@@ -43,6 +43,10 @@ import {
4343} from '../../testHelpers/collections/collectionHelper'
4444import { RestrictFileDTO } from '../../../src/files/domain/dtos/RestrictFileDTO'
4545import { DatasetsRepository } from '../../../src/datasets/infra/repositories/DatasetsRepository'
46+ import {
47+ FileVersionState ,
48+ FileVersionSummaryInfo
49+ } from '../../../src/files/domain/models/FileVersionSummaryInfo'
4650
4751describe ( 'FilesRepository' , ( ) => {
4852 const sut : FilesRepository = new FilesRepository ( )
@@ -761,6 +765,182 @@ describe('FilesRepository', () => {
761765 } )
762766 } )
763767
768+ describe ( 'getFileVersionSummaries' , ( ) => {
769+ let fileTestDatasetIds : CreatedDatasetIdentifiers
770+ const testTextFile1Name = 'test-file-1.txt'
771+
772+ beforeEach ( async ( ) => {
773+ try {
774+ fileTestDatasetIds = await createDataset . execute ( TestConstants . TEST_NEW_DATASET_DTO )
775+ } catch ( error ) {
776+ throw new Error ( 'Tests beforeEach(): Error while creating test dataset' )
777+ }
778+ await uploadFileViaApi ( fileTestDatasetIds . numericId , testTextFile1Name ) . catch ( ( ) => {
779+ throw new Error ( `Tests beforeEach(): Error while uploading file ${ testTextFile1Name } ` )
780+ } )
781+ } )
782+
783+ test ( 'should return file version summaries when file draft exists' , async ( ) => {
784+ const currentTestFilesSubset = await sut . getDatasetFiles (
785+ fileTestDatasetIds . numericId ,
786+ latestDatasetVersionId ,
787+ false ,
788+ FileOrderCriteria . NAME_AZ
789+ )
790+ const testFile = currentTestFilesSubset . files [ 0 ]
791+ const actual = await sut . getFileVersionSummaries ( testFile . id )
792+
793+ const fileSummmaries : FileVersionSummaryInfo = {
794+ datasetVersion : 'DRAFT' ,
795+ isDraft : true ,
796+ isReleased : false ,
797+ isDeaccessioned : false ,
798+ versionState : FileVersionState . DRAFT ,
799+ contributors : 'Dataverse Admin' ,
800+ datafileId : testFile . id ,
801+ persistentId : testFile . persistentId ,
802+ publishedDate : '' ,
803+ fileDifferenceSummary : { file : 'Added' }
804+ }
805+
806+ expect ( actual ) . toHaveLength ( 1 )
807+ expect ( actual [ 0 ] ) . toEqual ( fileSummmaries )
808+ deleteUnpublishedDatasetViaApi ( fileTestDatasetIds . numericId )
809+ } )
810+
811+ test ( 'should return file version summaries when dataset is deaccessioned' , async ( ) => {
812+ await publishDatasetViaApi ( fileTestDatasetIds . numericId ) . catch ( ( ) => {
813+ throw new Error ( 'Error while publishing test Dataset' )
814+ } )
815+
816+ await waitForNoLocks ( fileTestDatasetIds . numericId , 10 ) . catch ( ( ) => {
817+ throw new Error ( 'Error while waiting for no locks' )
818+ } )
819+
820+ const datasetFiles = await sut . getDatasetFiles (
821+ fileTestDatasetIds . numericId ,
822+ latestDatasetVersionId ,
823+ false ,
824+ FileOrderCriteria . NAME_AZ
825+ )
826+ const testFile = datasetFiles . files [ 0 ]
827+ const publishedFileVersionSummariesActual = await sut . getFileVersionSummaries ( testFile . id )
828+
829+ const publishedFileVersionSummmaries : FileVersionSummaryInfo = {
830+ datasetVersion : '1.0' ,
831+ isDraft : false ,
832+ isReleased : true ,
833+ isDeaccessioned : false ,
834+ versionNumber : 1 ,
835+ versionMinorNumber : 0 ,
836+ publishedDate : new Date ( ) . toISOString ( ) . split ( 'T' ) [ 0 ] , // Format: yyyy-mm-dd
837+ versionState : FileVersionState . RELEASED ,
838+ contributors : 'Dataverse Admin' ,
839+ datafileId : testFile . id ,
840+ persistentId : testFile . persistentId ,
841+ fileDifferenceSummary : { file : 'Added' }
842+ }
843+
844+ expect ( publishedFileVersionSummariesActual ) . toHaveLength ( 1 )
845+ expect ( publishedFileVersionSummariesActual [ 0 ] ) . toEqual ( publishedFileVersionSummmaries )
846+
847+ await deaccessionDatasetViaApi ( fileTestDatasetIds . numericId , '1.0' ) . catch ( ( ) => {
848+ throw new Error ( 'Error while deaccessioning test Dataset' )
849+ } )
850+
851+ const actual = await sut . getFileVersionSummaries ( testFile . id )
852+
853+ const fileSummmaries : FileVersionSummaryInfo = {
854+ datasetVersion : '1.0' ,
855+ versionNumber : 1 ,
856+ versionMinorNumber : 0 ,
857+ publishedDate : new Date ( ) . toISOString ( ) . split ( 'T' ) [ 0 ] ,
858+ isDraft : false ,
859+ isReleased : false ,
860+ isDeaccessioned : true ,
861+ versionState : FileVersionState . DEACCESSIONED ,
862+ contributors : 'Dataverse Admin' ,
863+ datafileId : testFile . id ,
864+ persistentId : testFile . persistentId ,
865+ fileDifferenceSummary : {
866+ deaccessionedReason : 'Test reason.' ,
867+ file : 'Added'
868+ }
869+ }
870+
871+ expect ( actual ) . toHaveLength ( 1 )
872+ expect ( actual [ 0 ] ) . toEqual ( fileSummmaries )
873+ deletePublishedDatasetViaApi ( fileTestDatasetIds . persistentId )
874+ } )
875+
876+ test ( 'should return file version summaries when file is updated' , async ( ) => {
877+ await publishDatasetViaApi ( fileTestDatasetIds . numericId ) . catch ( ( ) => {
878+ throw new Error ( 'Error while publishing test Dataset' )
879+ } )
880+
881+ await waitForNoLocks ( fileTestDatasetIds . numericId , 10 ) . catch ( ( ) => {
882+ throw new Error ( 'Error while waiting for no locks' )
883+ } )
884+
885+ const datasetFiles = await sut . getDatasetFiles (
886+ fileTestDatasetIds . numericId ,
887+ latestDatasetVersionId ,
888+ false ,
889+ FileOrderCriteria . NAME_AZ
890+ )
891+ const testFile = datasetFiles . files [ 0 ]
892+ const actual = await sut . getFileVersionSummaries ( testFile . id )
893+
894+ expect ( actual ) . toHaveLength ( 1 )
895+
896+ await sut . updateFileMetadata ( testFile . id , {
897+ description : 'My description test.' ,
898+ categories : [ 'Data' , 'Test' ] ,
899+ label : 'myfile.txt' ,
900+ directoryLabel : 'mydir' ,
901+ restrict : true
902+ } )
903+ const updatedFileVersionSummariesActual = await sut . getFileVersionSummaries ( testFile . id )
904+ const updatedFileVersionSummaries : FileVersionSummaryInfo = {
905+ datasetVersion : 'DRAFT' ,
906+ publishedDate : '' ,
907+ isDraft : true ,
908+ isReleased : false ,
909+ isDeaccessioned : false ,
910+ versionState : FileVersionState . DRAFT ,
911+ contributors : 'Dataverse Admin' ,
912+ datafileId : testFile . id ,
913+ persistentId : testFile . persistentId ,
914+ fileDifferenceSummary : {
915+ FileMetadata : [
916+ {
917+ name : 'File Name' ,
918+ action : 'Changed'
919+ } ,
920+ {
921+ name : 'Description' ,
922+ action : 'Changed'
923+ }
924+ ] ,
925+ FileTags : {
926+ Added : 2
927+ } ,
928+ FileAccess : 'Restricted'
929+ }
930+ }
931+
932+ expect ( updatedFileVersionSummariesActual ) . toHaveLength ( 2 )
933+ expect ( updatedFileVersionSummariesActual [ 0 ] ) . toEqual ( updatedFileVersionSummaries )
934+ deletePublishedDatasetViaApi ( fileTestDatasetIds . persistentId )
935+ } )
936+
937+ test ( 'should return error when file does not exist' , async ( ) => {
938+ const expectedError = new ReadError ( `[404] File with ID ${ nonExistentFiledId } not found.` )
939+
940+ await expect ( sut . getFileVersionSummaries ( nonExistentFiledId ) ) . rejects . toThrow ( expectedError )
941+ } )
942+ } )
943+
764944 describe ( 'deleteFile' , ( ) => {
765945 let deleFileTestDatasetIds : CreatedDatasetIdentifiers
766946 const testTextFile1Name = 'test-file-1.txt'
0 commit comments