77 deleteUnpublishedDatasetViaApi ,
88 waitForDatasetsIndexedInSolr ,
99 deletePublishedDatasetViaApi ,
10- deaccessionDatasetViaApi
10+ deaccessionDatasetViaApi ,
11+ createDatasetLicenseModel
1112} from '../../testHelpers/datasets/datasetHelper'
1213import { ReadError } from '../../../src/core/domain/repositories/ReadError'
1314import {
@@ -18,7 +19,8 @@ import {
1819 createDataset ,
1920 CreatedDatasetIdentifiers ,
2021 DatasetDTO ,
21- DatasetDeaccessionDTO
22+ DatasetDeaccessionDTO ,
23+ publishDataset
2224} from '../../../src/datasets'
2325import { ApiConfig , WriteError } from '../../../src'
2426import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
@@ -31,9 +33,23 @@ import {
3133import {
3234 createCollectionViaApi ,
3335 deleteCollectionViaApi ,
34- ROOT_COLLECTION_ALIAS
36+ publishCollectionViaApi ,
37+ ROOT_COLLECTION_ALIAS ,
38+ setStorageDriverViaApi
3539} from '../../testHelpers/collections/collectionHelper'
36- import { testTextFile1Name , uploadFileViaApi } from '../../testHelpers/files/filesHelper'
40+ import {
41+ calculateBlobChecksum ,
42+ createSinglepartFileBlob ,
43+ testTextFile1Name ,
44+ uploadFileViaApi
45+ } from '../../testHelpers/files/filesHelper'
46+ import {
47+ Summary ,
48+ SummaryStringValues
49+ } from '../../../src/datasets/domain/models/DatasetVersionSummary'
50+ import { FilesRepository } from '../../../src/files/infra/repositories/FilesRepository'
51+ import { DirectUploadClient } from '../../../src/files/infra/clients/DirectUploadClient'
52+ import { createTestFileUploadDestination } from '../../testHelpers/files/fileUploadDestinationHelper'
3753
3854const TEST_DIFF_DATASET_DTO : DatasetDTO = {
3955 license : {
@@ -79,6 +95,9 @@ describe('DatasetsRepository', () => {
7995 const sut : DatasetsRepository = new DatasetsRepository ( )
8096 const nonExistentTestDatasetId = 100
8197
98+ const filesRepositorySut = new FilesRepository ( )
99+ const directUploadSut : DirectUploadClient = new DirectUploadClient ( filesRepositorySut )
100+
82101 beforeAll ( async ( ) => {
83102 ApiConfig . init (
84103 TestConstants . TEST_API_URL ,
@@ -925,4 +944,179 @@ describe('DatasetsRepository', () => {
925944 ) . rejects . toBeInstanceOf ( WriteError )
926945 } )
927946 } )
947+
948+ describe ( 'getDatasetVersions' , ( ) => {
949+ const testDatasetVersionsCollectionAlias = 'testDatasetVersionsCollection'
950+
951+ beforeAll ( async ( ) => {
952+ await createCollectionViaApi ( testDatasetVersionsCollectionAlias )
953+ await publishCollectionViaApi ( testDatasetVersionsCollectionAlias )
954+ await setStorageDriverViaApi ( testDatasetVersionsCollectionAlias , 'LocalStack' )
955+ } )
956+
957+ afterAll ( async ( ) => {
958+ await deleteCollectionViaApi ( testDatasetVersionsCollectionAlias )
959+ } )
960+
961+ test ( 'should return dataset versions when dataset exists' , async ( ) => {
962+ const testDatasetIds = await createDataset . execute (
963+ TestConstants . TEST_NEW_DATASET_DTO ,
964+ testDatasetVersionsCollectionAlias
965+ )
966+
967+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
968+
969+ expect ( actual . length ) . toBeGreaterThan ( 0 )
970+ expect ( actual [ 0 ] . versionNumber ) . toBe ( 'DRAFT' )
971+ expect ( actual [ 0 ] . summary ) . toBe ( SummaryStringValues . firstDraft )
972+
973+ await deleteUnpublishedDatasetViaApi ( testDatasetIds . numericId )
974+ } )
975+
976+ test ( 'should return dataset versions correctly after first publish' , async ( ) => {
977+ const testDatasetIds = await createDataset . execute (
978+ TestConstants . TEST_NEW_DATASET_DTO ,
979+ testDatasetVersionsCollectionAlias
980+ )
981+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MAJOR )
982+
983+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
984+
985+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
986+
987+ expect ( actual . length ) . toBeGreaterThan ( 0 )
988+ expect ( actual [ 0 ] . versionNumber ) . toBe ( '1.0' )
989+ expect ( actual [ 0 ] . summary ) . toBe ( SummaryStringValues . firstPublished )
990+
991+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
992+ } )
993+
994+ test ( 'should return dataset versions correctly after 1st publish and metadata fields update' , async ( ) => {
995+ const testDatasetIds = await createDataset . execute (
996+ TestConstants . TEST_NEW_DATASET_DTO ,
997+ testDatasetVersionsCollectionAlias
998+ )
999+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MAJOR )
1000+
1001+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1002+
1003+ const metadataBlocksRepository = new MetadataBlocksRepository ( )
1004+ const citationMetadataBlock = await metadataBlocksRepository . getMetadataBlockByName (
1005+ 'citation'
1006+ )
1007+
1008+ await sut . updateDataset (
1009+ testDatasetIds . numericId ,
1010+ {
1011+ license : createDatasetLicenseModel ( true ) ,
1012+ metadataBlockValues : [
1013+ {
1014+ name : 'citation' ,
1015+ fields : {
1016+ title : 'Updated Dataset Title'
1017+ }
1018+ }
1019+ ]
1020+ } ,
1021+ [ citationMetadataBlock ]
1022+ )
1023+
1024+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
1025+
1026+ expect ( actual . length ) . toEqual ( 2 )
1027+
1028+ expect ( actual [ 0 ] . versionNumber ) . toBe ( 'DRAFT' )
1029+ expect ( actual [ 0 ] . summary ) . toMatchObject < Summary > ( {
1030+ 'Citation Metadata' : {
1031+ Title : {
1032+ added : 0 ,
1033+ deleted : 0 ,
1034+ changed : 1
1035+ }
1036+ } ,
1037+ files : {
1038+ added : 0 ,
1039+ removed : 0 ,
1040+ replaced : 0 ,
1041+ changedFileMetaData : 0 ,
1042+ changedVariableMetadata : 0
1043+ } ,
1044+ termsAccessChanged : false
1045+ } )
1046+
1047+ expect ( actual [ 1 ] . versionNumber ) . toBe ( '1.0' )
1048+ expect ( actual [ 1 ] . summary ) . toBe ( SummaryStringValues . firstPublished )
1049+
1050+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
1051+ } )
1052+
1053+ test ( 'should return correct files summary' , async ( ) => {
1054+ const testDatasetIds = await createDataset . execute (
1055+ TestConstants . TEST_NEW_DATASET_DTO ,
1056+ testDatasetVersionsCollectionAlias
1057+ )
1058+ await publishDataset . execute ( testDatasetIds . numericId , VersionUpdateType . MAJOR )
1059+
1060+ await waitForNoLocks ( testDatasetIds . numericId , 10 )
1061+
1062+ const singlepartFile = await createSinglepartFileBlob ( )
1063+
1064+ const destination = await createTestFileUploadDestination (
1065+ singlepartFile ,
1066+ testDatasetIds . numericId
1067+ )
1068+
1069+ const actualStorageId = await directUploadSut . uploadFile (
1070+ testDatasetIds . numericId ,
1071+ singlepartFile ,
1072+ jest . fn ( ) ,
1073+ new AbortController ( ) ,
1074+ destination
1075+ )
1076+
1077+ const fileArrayBuffer = await singlepartFile . arrayBuffer ( )
1078+ const fileBuffer = Buffer . from ( fileArrayBuffer )
1079+
1080+ const uploadedFileDTO = {
1081+ fileName : singlepartFile . name ,
1082+ storageId : actualStorageId ,
1083+ checksumType : 'md5' ,
1084+ checksumValue : calculateBlobChecksum ( fileBuffer , 'md5' ) ,
1085+ mimeType : singlepartFile . type
1086+ }
1087+
1088+ await filesRepositorySut . addUploadedFilesToDataset ( testDatasetIds . numericId , [
1089+ uploadedFileDTO
1090+ ] )
1091+
1092+ const actual = await sut . getDatasetVersions ( testDatasetIds . numericId )
1093+
1094+ expect ( actual . length ) . toEqual ( 2 )
1095+
1096+ expect ( actual [ 0 ] . versionNumber ) . toBe ( 'DRAFT' )
1097+ expect ( actual [ 0 ] . summary ) . toMatchObject < Summary > ( {
1098+ files : {
1099+ added : 1 ,
1100+ removed : 0 ,
1101+ replaced : 0 ,
1102+ changedFileMetaData : 0 ,
1103+ changedVariableMetadata : 0
1104+ } ,
1105+ termsAccessChanged : false
1106+ } )
1107+
1108+ expect ( actual [ 1 ] . versionNumber ) . toBe ( '1.0' )
1109+ expect ( actual [ 1 ] . summary ) . toBe ( SummaryStringValues . firstPublished )
1110+
1111+ await deletePublishedDatasetViaApi ( testDatasetIds . persistentId )
1112+ } )
1113+
1114+ test ( 'should return error when dataset does not exist' , async ( ) => {
1115+ const expectedError = new ReadError (
1116+ `[404] Dataset with ID ${ nonExistentTestDatasetId } not found.`
1117+ )
1118+
1119+ await expect ( sut . getDatasetVersions ( nonExistentTestDatasetId ) ) . rejects . toThrow ( expectedError )
1120+ } )
1121+ } )
9281122} )
0 commit comments