@@ -41,6 +41,7 @@ import {
4141 deleteCollectionFeaturedItemsViaApi ,
4242 deleteCollectionFeaturedItemViaApi
4343} from '../../testHelpers/collections/collectionFeaturedItemsHelper'
44+ import { CollectionItemsFacet } from '../../../dist/collections/domain/models/CollectionItemSubset'
4445
4546describe ( '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