Skip to content

Commit cbc63da

Browse files
committed
test: integration cases
1 parent 4510be5 commit cbc63da

File tree

1 file changed

+163
-25
lines changed

1 file changed

+163
-25
lines changed

test/integration/collections/CollectionsRepository.test.ts

Lines changed: 163 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import {
1313
WriteError,
1414
createDataset,
1515
getCollection,
16-
createCollection
16+
createCollection,
17+
getDatasetFiles,
18+
restrictFile
1719
} from '../../../src'
1820
import { ApiConfig } from '../../../src'
1921
import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
@@ -28,7 +30,8 @@ import { updateFileTabularTags, uploadFileViaApi } from '../../testHelpers/files
2830
import {
2931
deletePublishedDatasetViaApi,
3032
deleteUnpublishedDatasetViaApi,
31-
publishDatasetViaApi
33+
publishDatasetViaApi,
34+
waitForNoLocks
3235
} from '../../testHelpers/datasets/datasetHelper'
3336
import { PublicationStatus } from '../../../src/core/domain/models/PublicationStatus'
3437
import { CollectionType } from '../../../src/collections/domain/models/CollectionType'
@@ -44,7 +47,11 @@ import {
4447
deleteCollectionFeaturedItemViaApi
4548
} from '../../testHelpers/collections/collectionFeaturedItemsHelper'
4649
import { 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

4956
describe('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

Comments
 (0)