Skip to content

Commit a153656

Browse files
committed
add GetMyDataCollectionItems integration test
1 parent 0a0dd88 commit a153656

File tree

1 file changed

+329
-1
lines changed

1 file changed

+329
-1
lines changed

test/integration/collections/CollectionsRepository.test.ts

Lines changed: 329 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import {
4141
deleteCollectionFeaturedItemsViaApi,
4242
deleteCollectionFeaturedItemViaApi
4343
} from '../../testHelpers/collections/collectionFeaturedItemsHelper'
44+
import { CollectionItemsFacet } from '../../../dist/collections/domain/models/CollectionItemSubset'
4445

4546
describe('CollectionsRepository', () => {
4647
const testCollectionAlias = 'collectionsRepositoryTestCollection'
@@ -350,7 +351,6 @@ describe('CollectionsRepository', () => {
350351
)
351352
})
352353
})
353-
354354
describe('getCollectionItems', () => {
355355
let testDatasetIds: CreatedDatasetIdentifiers
356356

@@ -818,6 +818,334 @@ describe('CollectionsRepository', () => {
818818
})
819819
})
820820

821+
describe('getMyDataCollectionItems', () => {
822+
let testDatasetIds: CreatedDatasetIdentifiers
823+
824+
const testTextFile1Name = 'test-file-1.txt'
825+
const testSubCollectionAlias = 'collectionsRepositoryMyDataCollection'
826+
beforeAll(async () => {
827+
await createCollectionViaApi(testSubCollectionAlias, testCollectionAlias).catch(() => {
828+
throw new Error(
829+
`Tests beforeAll(): Error while creating subcollection ${testSubCollectionAlias}`
830+
)
831+
})
832+
try {
833+
testDatasetIds = await createDataset.execute(
834+
TestConstants.TEST_NEW_DATASET_DTO,
835+
testSubCollectionAlias
836+
)
837+
} catch (error) {
838+
throw new Error('Tests beforeAll(): Error while creating test dataset')
839+
}
840+
await uploadFileViaApi(testDatasetIds.numericId, testTextFile1Name).catch(() => {
841+
throw new Error(`Tests beforeAll(): Error while uploading file ${testTextFile1Name}`)
842+
})
843+
})
844+
845+
afterAll(async () => {
846+
try {
847+
await deleteUnpublishedDatasetViaApi(testDatasetIds.numericId)
848+
} catch (error) {
849+
throw new Error(
850+
`Tests afterAll(): Error while deleting test dataset ${testDatasetIds.numericId}`
851+
)
852+
}
853+
try {
854+
await deleteCollectionViaApi(testSubCollectionAlias)
855+
} catch (error) {
856+
throw new Error(
857+
`Tests afterAll(): Error while deleting subcollection ${testSubCollectionAlias}`
858+
)
859+
}
860+
})
861+
862+
test('should return collection items given valid roleIds', async () => {
863+
// Give enough time to Solr for indexing
864+
await new Promise((resolve) => setTimeout(resolve, 15000))
865+
// TODO: replace this with API call to get the role ids
866+
const roleIds = [1, 2, 3, 4, 5, 6, 7, 8]
867+
const publicationStatuses = [PublicationStatus.Draft, PublicationStatus.Unpublished]
868+
const collectionItemTypes = [
869+
CollectionItemType.COLLECTION,
870+
CollectionItemType.DATASET,
871+
CollectionItemType.FILE
872+
]
873+
let actual = await sut.getMyDataCollectionItems(
874+
roleIds,
875+
collectionItemTypes,
876+
publicationStatuses
877+
)
878+
const actualFilePreview = actual.items[1] as FilePreview
879+
const actualDatasetPreview = actual.items[0] as DatasetPreview
880+
const actualCollectionPreview = actual.items[2] as CollectionPreview
881+
882+
const expectedFileMd5 = '68b22040025784da775f55cfcb6dee2e'
883+
const expectedDatasetCitationFragment = `Admin, Dataverse; Owner, Dataverse, ${currentYear}, "Dataset created using the createDataset use case"`
884+
const expectedDatasetDescription = 'Dataset created using the createDataset use case'
885+
const expectedFileName = 'test-file-1.txt'
886+
const expectedCollectionsName = 'Scientific Research'
887+
888+
//prettier-ignore
889+
const expectedFacetsAll = [
890+
{
891+
name: 'publicationStatus', friendlyName: 'Publication Status', labels: [{ name: 'Unpublished', count: 3 },{ name: 'Draft', count: 2 }]
892+
}
893+
]
894+
expect(actualFilePreview.checksum?.type).toBe('MD5')
895+
expect(actualFilePreview.checksum?.value).toBe(expectedFileMd5)
896+
expect(actualFilePreview.datasetCitation).toContain(expectedDatasetCitationFragment)
897+
expect(actualFilePreview.datasetId).toBe(testDatasetIds.numericId)
898+
expect(actualFilePreview.datasetName).toBe(expectedDatasetDescription)
899+
expect(actualFilePreview.datasetPersistentId).toBe(testDatasetIds.persistentId)
900+
expect(actualFilePreview.description).toBe('')
901+
expect(actualFilePreview.fileContentType).toBe('text/plain')
902+
expect(actualFilePreview.fileId).not.toBeUndefined()
903+
expect(actualFilePreview.fileType).toBe('Plain Text')
904+
expect(actualFilePreview.md5).toBe(expectedFileMd5)
905+
expect(actualFilePreview.name).toBe(expectedFileName)
906+
expect(actualFilePreview.publicationStatuses[0]).toBe(PublicationStatus.Unpublished)
907+
expect(actualFilePreview.publicationStatuses[1]).toBe(PublicationStatus.Draft)
908+
expect(actualFilePreview.sizeInBytes).toBe(12)
909+
expect(actualFilePreview.url).not.toBeUndefined()
910+
expect(actualFilePreview.releaseOrCreateDate).not.toBeUndefined()
911+
expect(actualFilePreview.type).toBe(CollectionItemType.FILE)
912+
expect(actualFilePreview.restricted).toBe(false)
913+
expect(actualFilePreview.canDownloadFile).toBe(true)
914+
915+
expect(actualDatasetPreview.title).toBe(expectedDatasetDescription)
916+
expect(actualDatasetPreview.citation).toContain(expectedDatasetCitationFragment)
917+
expect(actualDatasetPreview.description).toBe('This is the description of the dataset.')
918+
expect(actualDatasetPreview.persistentId).not.toBeUndefined()
919+
expect(actualDatasetPreview.persistentId).not.toBeUndefined()
920+
expect(actualDatasetPreview.publicationStatuses[0]).toBe(PublicationStatus.Unpublished)
921+
expect(actualDatasetPreview.publicationStatuses[1]).toBe(PublicationStatus.Draft)
922+
expect(actualDatasetPreview.versionId).not.toBeUndefined()
923+
expect(actualDatasetPreview.versionInfo.createTime).not.toBeUndefined()
924+
expect(actualDatasetPreview.versionInfo.lastUpdateTime).not.toBeUndefined()
925+
expect(actualDatasetPreview.versionInfo.majorNumber).toBeUndefined()
926+
expect(actualDatasetPreview.versionInfo.minorNumber).toBeUndefined()
927+
expect(actualDatasetPreview.versionInfo.state).toBe('DRAFT')
928+
expect(actualDatasetPreview.parentCollectionAlias).toBe(
929+
'collectionsRepositoryMyDataCollection'
930+
)
931+
expect(actualDatasetPreview.parentCollectionName).toBe(expectedCollectionsName)
932+
expect(actualDatasetPreview.type).toBe(CollectionItemType.DATASET)
933+
934+
expect(actualCollectionPreview.name).toBe(expectedCollectionsName)
935+
expect(actualCollectionPreview.alias).toBe(testSubCollectionAlias)
936+
expect(actualCollectionPreview.description).toBe('We do all the science.')
937+
expect(actualCollectionPreview.imageUrl).toBe(undefined)
938+
expect(actualCollectionPreview.parentAlias).toBe(testCollectionAlias)
939+
expect(actualCollectionPreview.parentName).toBe(expectedCollectionsName)
940+
expect(actualCollectionPreview.publicationStatuses[0]).toBe(PublicationStatus.Unpublished)
941+
expect(actualCollectionPreview.releaseOrCreateDate).not.toBeUndefined()
942+
expect(actualCollectionPreview.affiliation).toBe('Scientific Research University')
943+
expect(actualCollectionPreview.parentAlias).toBe('collectionsRepositoryTestCollection')
944+
expect(actualCollectionPreview.parentName).toBe(expectedCollectionsName)
945+
expect(actualCollectionPreview.type).toBe(CollectionItemType.COLLECTION)
946+
expect(actual.items.length).toBe(3)
947+
expect(actual.totalItemCount).toBe(3)
948+
expect(actual.countPerObjectType.collections).toBe(1)
949+
expect(actual.countPerObjectType.datasets).toBe(1)
950+
expect(actual.countPerObjectType.files).toBe(1)
951+
952+
expect(actual.facets).toEqual(expectedFacetsAll)
953+
954+
// Test limit and selectedPage
955+
actual = await sut.getMyDataCollectionItems(
956+
roleIds,
957+
collectionItemTypes,
958+
publicationStatuses,
959+
1,
960+
1
961+
)
962+
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
963+
expect(actual.items.length).toBe(1)
964+
expect(actual.totalItemCount).toBe(3)
965+
966+
// Test search text
967+
const fileNameSearchText = 'test-fi'
968+
969+
actual = await sut.getMyDataCollectionItems(
970+
roleIds,
971+
collectionItemTypes,
972+
publicationStatuses,
973+
undefined,
974+
undefined,
975+
fileNameSearchText
976+
)
977+
expect(actual.totalItemCount).toBe(1)
978+
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
979+
expect(actual.countPerObjectType.collections).toBe(0)
980+
expect(actual.countPerObjectType.datasets).toBe(0)
981+
expect(actual.countPerObjectType.files).toBe(1)
982+
983+
const datasetSearchText = 'This is the description'
984+
985+
actual = await sut.getMyDataCollectionItems(
986+
roleIds,
987+
collectionItemTypes,
988+
publicationStatuses,
989+
undefined,
990+
undefined,
991+
datasetSearchText
992+
)
993+
expect(actual.totalItemCount).toBe(1)
994+
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
995+
expect(actual.countPerObjectType.collections).toBe(0)
996+
expect(actual.countPerObjectType.datasets).toBe(1)
997+
expect(actual.countPerObjectType.files).toBe(0)
998+
999+
const searchTextForDatasetAndCollection = 'the'
1000+
actual = await sut.getMyDataCollectionItems(
1001+
roleIds,
1002+
collectionItemTypes,
1003+
publicationStatuses,
1004+
undefined,
1005+
undefined,
1006+
searchTextForDatasetAndCollection
1007+
)
1008+
expect(actual.totalItemCount).toBe(2)
1009+
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
1010+
expect((actual.items[1] as CollectionPreview).name).toBe(expectedCollectionsName)
1011+
expect(actual.facets as CollectionItemsFacet[]).toBe({
1012+
name: 'publicationStatus',
1013+
friendlyName: 'Publication Status',
1014+
labels: [
1015+
{ name: 'Unpublished', count: 1 },
1016+
{ name: 'Draft', count: 1 }
1017+
]
1018+
})
1019+
expect(actual.countPerObjectType.collections).toBe(1)
1020+
expect(actual.countPerObjectType.datasets).toBe(1)
1021+
expect(actual.countPerObjectType.files).toBe(0)
1022+
1023+
// Test search text, limit and offset
1024+
// TODO: run this test when the limit param has been fixed in the Dataverse API
1025+
/*
1026+
actual = await sut.getMyDataCollectionItems(
1027+
roleIds,
1028+
collectionItemTypes,
1029+
publicationStatuses,
1030+
1,
1031+
1,
1032+
searchTextForDatasetAndCollection
1033+
)
1034+
expect(actual.items.length).toBe(1)
1035+
expect(actual.totalItemCount).toBe(2)
1036+
expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName)
1037+
expect(actual.countPerObjectType.collections).toBe(1)
1038+
expect(actual.countPerObjectType.datasets).toBe(1)
1039+
expect(actual.countPerObjectType.files).toBe(0)
1040+
*/
1041+
1042+
// Test type collection
1043+
const searchForCollectionType = [CollectionItemType.COLLECTION]
1044+
actual = await sut.getMyDataCollectionItems(
1045+
roleIds,
1046+
searchForCollectionType,
1047+
publicationStatuses,
1048+
undefined,
1049+
undefined
1050+
)
1051+
expect(actual.items.length).toBe(1)
1052+
expect(actual.totalItemCount).toBe(1)
1053+
expect((actual.items[0] as CollectionPreview).name).toBe(expectedCollectionsName)
1054+
expect(actual.facets).toEqual([
1055+
{
1056+
name: 'publicationStatus',
1057+
friendlyName: 'Publication Status',
1058+
labels: [{ name: 'Unpublished', count: 1 }]
1059+
}
1060+
])
1061+
expect(actual.countPerObjectType.collections).toBe(1)
1062+
expect(actual.countPerObjectType.datasets).toBe(1)
1063+
expect(actual.countPerObjectType.files).toBe(1)
1064+
1065+
// Test type dataset
1066+
const collectionSearchCriteriaForDatasetType = new CollectionSearchCriteria().withItemTypes([
1067+
CollectionItemType.DATASET
1068+
])
1069+
actual = await sut.getCollectionItems(
1070+
testCollectionAlias,
1071+
undefined,
1072+
undefined,
1073+
collectionSearchCriteriaForDatasetType
1074+
)
1075+
expect(actual.items.length).toBe(1)
1076+
expect(actual.totalItemCount).toBe(1)
1077+
expect((actual.items[0] as DatasetPreview).title).toBe(expectedDatasetDescription)
1078+
expect(actual.facets).toEqual([
1079+
{
1080+
name: 'publicationStatus',
1081+
friendlyName: 'Publication Status',
1082+
labels: [
1083+
{ name: 'Draft', count: 1 },
1084+
{ name: 'Unpublished', count: 1 }
1085+
]
1086+
}
1087+
])
1088+
expect(actual.countPerObjectType.collections).toBe(1)
1089+
expect(actual.countPerObjectType.datasets).toBe(1)
1090+
expect(actual.countPerObjectType.files).toBe(1)
1091+
1092+
// Test type file
1093+
const collectionSearchCriteriaForFileType = new CollectionSearchCriteria().withItemTypes([
1094+
CollectionItemType.FILE
1095+
])
1096+
actual = await sut.getCollectionItems(
1097+
testCollectionAlias,
1098+
undefined,
1099+
undefined,
1100+
collectionSearchCriteriaForFileType
1101+
)
1102+
expect(actual.items.length).toBe(1)
1103+
expect(actual.totalItemCount).toBe(1)
1104+
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
1105+
expect(actual.facets).toEqual([
1106+
{
1107+
name: 'publicationStatus',
1108+
friendlyName: 'Publication Status',
1109+
labels: [
1110+
{ name: 'Draft', count: 1 },
1111+
{ name: 'Unpublished', count: 1 }
1112+
]
1113+
}
1114+
])
1115+
1116+
expect(actual.countPerObjectType.collections).toBe(1)
1117+
expect(actual.countPerObjectType.datasets).toBe(1)
1118+
expect(actual.countPerObjectType.files).toBe(1)
1119+
1120+
// Test multiple types
1121+
const collectionSearchCriteriaForMultiTypes = new CollectionSearchCriteria().withItemTypes([
1122+
CollectionItemType.FILE,
1123+
CollectionItemType.COLLECTION
1124+
])
1125+
actual = await sut.getCollectionItems(
1126+
testCollectionAlias,
1127+
undefined,
1128+
undefined,
1129+
collectionSearchCriteriaForMultiTypes
1130+
)
1131+
expect(actual.items.length).toBe(2)
1132+
expect(actual.totalItemCount).toBe(2)
1133+
expect((actual.items[0] as FilePreview).name).toBe(expectedFileName)
1134+
expect((actual.items[1] as CollectionPreview).name).toBe(expectedCollectionsName)
1135+
expect(actual.countPerObjectType.collections).toBe(1)
1136+
expect(actual.countPerObjectType.datasets).toBe(1)
1137+
expect(actual.countPerObjectType.files).toBe(1)
1138+
})
1139+
1140+
test('should return error when role, type and publication status params are empty', async () => {
1141+
const expectedError = new ReadError('No results. Please select at least one Role.')
1142+
1143+
await expect(
1144+
sut.getMyDataCollectionItems([], [], [], 0, 0, undefined, undefined)
1145+
).rejects.toThrow(expectedError)
1146+
})
1147+
})
1148+
8211149
describe('getCollectionItems for published tabular file', () => {
8221150
let testDatasetIds: CreatedDatasetIdentifiers
8231151
const testTextFile4Name = 'test-file-4.tab'

0 commit comments

Comments
 (0)