@@ -13,7 +13,9 @@ import {
1313 WriteError ,
1414 createDataset ,
1515 getCollection ,
16- createCollection
16+ createCollection ,
17+ getDatasetFiles ,
18+ restrictFile
1719} from '../../../src'
1820import { ApiConfig } from '../../../src'
1921import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
@@ -28,7 +30,8 @@ import { updateFileTabularTags, uploadFileViaApi } from '../../testHelpers/files
2830import {
2931 deletePublishedDatasetViaApi ,
3032 deleteUnpublishedDatasetViaApi ,
31- publishDatasetViaApi
33+ publishDatasetViaApi ,
34+ waitForNoLocks
3235} from '../../testHelpers/datasets/datasetHelper'
3336import { PublicationStatus } from '../../../src/core/domain/models/PublicationStatus'
3437import { CollectionType } from '../../../src/collections/domain/models/CollectionType'
@@ -44,7 +47,11 @@ import {
4447 deleteCollectionFeaturedItemViaApi
4548} from '../../testHelpers/collections/collectionFeaturedItemsHelper'
4649import { createApiTokenViaApi } from '../../testHelpers/users/apiTokenHelper'
47- import { CustomFeaturedItem } from '../../../src/collections/domain/models/CollectionFeaturedItem'
50+ import {
51+ CustomFeaturedItem ,
52+ DvObjectFeaturedItemType
53+ } from '../../../src/collections/domain/models/CollectionFeaturedItem'
54+ import { DvObjectFeaturedItemDTO } from '../../../src/collections/domain/dtos/CollectionFeaturedItemsDTO'
4855
4956describe ( 'CollectionsRepository' , ( ) => {
5057 const testCollectionAlias = 'collectionsRepositoryTestCollection'
@@ -1219,13 +1226,8 @@ describe('CollectionsRepository', () => {
12191226 expectedError
12201227 )
12211228 } )
1222-
1223- // Should return error when the dvObjectIdentifier type 'collection' doesnt exist
1224- // Should return error when the dvObjectIdentifier type 'dataset' doesnt exist
1225- // Should return error when the dvObjectIdentifier type 'file' doesnt exist
1226- // Should not return any more dv objects items dataset or file that were deaccessioned or restricted
12271229 } )
1228- // eslint-disable-next-line no-unused-vars
1230+
12291231 describe ( 'updateCollectionFeaturedItems' , ( ) => {
12301232 afterAll ( async ( ) => {
12311233 try {
@@ -1269,22 +1271,158 @@ describe('CollectionsRepository', () => {
12691271
12701272 expect ( response ) . toHaveLength ( 3 )
12711273
1272- // expect(response[0].content).toEqual(newFeaturedItems[0].content)
1273- // expect(response[0].displayOrder).toEqual(newFeaturedItems[0].displayOrder)
1274- // expect(response[0].imageFileName).toEqual(undefined)
1275- // expect(response[0].imageFileUrl).toEqual(undefined)
1276-
1277- // expect(response[1].content).toEqual(newFeaturedItems[1].content)
1278- // expect(response[1].displayOrder).toEqual(newFeaturedItems[1].displayOrder)
1279- // expect(response[1].imageFileName).toEqual(undefined)
1280- // expect(response[1].imageFileUrl).toEqual(undefined)
1281-
1282- // expect(response[2].content).toEqual(newFeaturedItems[2].content)
1283- // expect(response[2].displayOrder).toEqual(newFeaturedItems[2].displayOrder)
1284- // expect(response[2].imageFileName).toEqual('featured-item-test-image-3.png')
1285- // expect(response[2].imageFileUrl).toBe(
1286- // `http://localhost:8080/api/access/dataverseFeaturedItemImage/${response[2].id}`
1287- // )
1274+ const firstFeaturedItem = response [ 0 ] as CustomFeaturedItem
1275+ const secondFeaturedItem = response [ 1 ] as CustomFeaturedItem
1276+ const thirdFeaturedItem = response [ 2 ] as CustomFeaturedItem
1277+
1278+ expect ( firstFeaturedItem . content ) . toEqual ( ( newFeaturedItems [ 0 ] as CustomFeaturedItem ) . content )
1279+ expect ( firstFeaturedItem . displayOrder ) . toEqual ( newFeaturedItems [ 0 ] . displayOrder )
1280+ expect ( firstFeaturedItem . imageFileName ) . toEqual ( undefined )
1281+ expect ( firstFeaturedItem . imageFileUrl ) . toEqual ( undefined )
1282+
1283+ expect ( secondFeaturedItem . content ) . toEqual (
1284+ ( newFeaturedItems [ 1 ] as CustomFeaturedItem ) . content
1285+ )
1286+ expect ( secondFeaturedItem . displayOrder ) . toEqual ( newFeaturedItems [ 1 ] . displayOrder )
1287+ expect ( secondFeaturedItem . imageFileName ) . toEqual ( undefined )
1288+ expect ( secondFeaturedItem . imageFileUrl ) . toEqual ( undefined )
1289+
1290+ expect ( thirdFeaturedItem . content ) . toEqual ( ( newFeaturedItems [ 2 ] as CustomFeaturedItem ) . content )
1291+ expect ( thirdFeaturedItem . displayOrder ) . toEqual ( newFeaturedItems [ 2 ] . displayOrder )
1292+ expect ( thirdFeaturedItem . imageFileName ) . toEqual ( 'featured-item-test-image-3.png' )
1293+ expect ( thirdFeaturedItem . imageFileUrl ) . toBe (
1294+ `http://localhost:8080/api/access/dataverseFeaturedItemImage/${ response [ 2 ] . id } `
1295+ )
1296+ } )
1297+
1298+ it ( 'should return error when the dvObjectIdentifier of a collection does not exist' , async ( ) => {
1299+ const invalidCollectionAlias = 'invalid-collection-alias'
1300+ const newFeaturedItems : DvObjectFeaturedItemDTO [ ] = [
1301+ {
1302+ type : DvObjectFeaturedItemType . COLLECTION ,
1303+ dvObjectIdentifier : invalidCollectionAlias ,
1304+ displayOrder : 0
1305+ }
1306+ ]
1307+
1308+ const expectedError = new WriteError (
1309+ `[400] Cant find Collection, Dataset, or Datafile with identifier: ${ invalidCollectionAlias } .`
1310+ )
1311+ await expect (
1312+ sut . updateCollectionFeaturedItems ( testCollectionAlias , newFeaturedItems )
1313+ ) . rejects . toThrow ( expectedError )
1314+ } )
1315+
1316+ it ( 'should return error when the dvObjectIdentifier of a dataset does not exist' , async ( ) => {
1317+ const invalidDatasetPersistentId = 'doi:10.5072/FK2/INVALID_DATASET'
1318+ const newFeaturedItems : DvObjectFeaturedItemDTO [ ] = [
1319+ {
1320+ type : DvObjectFeaturedItemType . DATASET ,
1321+ dvObjectIdentifier : invalidDatasetPersistentId ,
1322+ displayOrder : 0
1323+ }
1324+ ]
1325+ const expectedError = new WriteError (
1326+ `[400] Cant find Collection, Dataset, or Datafile with identifier: ${ invalidDatasetPersistentId } .`
1327+ )
1328+ await expect (
1329+ sut . updateCollectionFeaturedItems ( testCollectionAlias , newFeaturedItems )
1330+ ) . rejects . toThrow ( expectedError )
1331+ } )
1332+
1333+ // TODO:ME - Fix from API. getting 500 error right now instead of 400
1334+
1335+ // eslint-disable-next-line jest/no-commented-out-tests
1336+ // it('should return error when the dvObjectIdentifier of a file does not exist', async () => {
1337+ // const invalidFileId = '99'
1338+ // const newFeaturedItems: DvObjectFeaturedItemDTO[] = [
1339+ // {
1340+ // type: DvObjectFeaturedItemType.FILE,
1341+ // dvObjectIdentifier: invalidFileId,
1342+ // displayOrder: 0
1343+ // }
1344+ // ]
1345+ // const expectedError = new WriteError(
1346+ // `[400] Cant find Collection, Dataset, or Datafile with identifier: ${invalidFileId}.`
1347+ // )
1348+ // await expect(
1349+ // sut.updateCollectionFeaturedItems(testCollectionAlias, newFeaturedItems)
1350+ // ).rejects.toThrow(expectedError)
1351+ // })
1352+
1353+ it ( 'should return error when the collection to feature is not published' , async ( ) => {
1354+ const unpublishedCollectionAlias = 'unpublished-collection-featured-item-test'
1355+ await createCollectionViaApi ( unpublishedCollectionAlias , testCollectionAlias )
1356+
1357+ const newFeaturedItems : DvObjectFeaturedItemDTO [ ] = [
1358+ {
1359+ type : DvObjectFeaturedItemType . COLLECTION ,
1360+ dvObjectIdentifier : unpublishedCollectionAlias ,
1361+ displayOrder : 0
1362+ }
1363+ ]
1364+ const expectedError = new WriteError ( '[400] Dataverse must be published to be featured.' )
1365+ await expect (
1366+ sut . updateCollectionFeaturedItems ( testCollectionAlias , newFeaturedItems )
1367+ ) . rejects . toThrow ( expectedError )
1368+ await deleteCollectionViaApi ( unpublishedCollectionAlias )
1369+ } )
1370+
1371+ it ( 'should return error when the dataset to feature is not published' , async ( ) => {
1372+ const testDatasetIds = await createDataset . execute (
1373+ TestConstants . TEST_NEW_DATASET_DTO ,
1374+ testCollectionAlias
1375+ )
1376+
1377+ const newFeaturedItems : DvObjectFeaturedItemDTO [ ] = [
1378+ {
1379+ type : DvObjectFeaturedItemType . DATASET ,
1380+ dvObjectIdentifier : testDatasetIds . persistentId ,
1381+ displayOrder : 0
1382+ }
1383+ ]
1384+ const expectedError = new WriteError ( '[400] Dataset must be published to be featured.' )
1385+ await expect (
1386+ sut . updateCollectionFeaturedItems ( testCollectionAlias , newFeaturedItems )
1387+ ) . rejects . toThrow ( expectedError )
1388+
1389+ await deleteUnpublishedDatasetViaApi ( testDatasetIds . numericId )
1390+ } )
1391+
1392+ it ( 'should return error when the file to feature is restricted' , async ( ) => {
1393+ const testDatasetIds = await createDataset . execute (
1394+ TestConstants . TEST_NEW_DATASET_DTO ,
1395+ testCollectionAlias
1396+ )
1397+ await publishDatasetViaApi ( testDatasetIds . numericId )
1398+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1399+ await uploadFileViaApi ( testDatasetIds . numericId , 'test-file-1.txt' )
1400+
1401+ const datasetFiles = await getDatasetFiles . execute ( testDatasetIds . numericId )
1402+
1403+ const fileId = datasetFiles . files [ 0 ] . id
1404+
1405+ await restrictFile . execute ( fileId , {
1406+ restrict : true ,
1407+ enableAccessRequest : true ,
1408+ termsOfAccess : 'This file is restricted for testing purposes'
1409+ } )
1410+
1411+ const newFeaturedItems : DvObjectFeaturedItemDTO [ ] = [
1412+ {
1413+ type : DvObjectFeaturedItemType . FILE ,
1414+ dvObjectIdentifier : fileId . toString ( ) ,
1415+ displayOrder : 0
1416+ }
1417+ ]
1418+
1419+ const expectedError = new WriteError ( '[400] Datafile must not be restricted to be featured.' )
1420+
1421+ await expect (
1422+ sut . updateCollectionFeaturedItems ( testCollectionAlias , newFeaturedItems )
1423+ ) . rejects . toThrow ( expectedError )
1424+
1425+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
12881426 } )
12891427 } )
12901428
0 commit comments