@@ -725,4 +725,139 @@ describe('FilesRepository', () => {
725725 await expect ( sut . deleteFile ( nonExistentFiledId ) ) . rejects . toThrow ( expectedError )
726726 } )
727727 } )
728+
729+ describe ( 'restrictFile' , ( ) => {
730+ let restrictFileDatasetIds : CreatedDatasetIdentifiers
731+ const testTextFile1Name = 'test-file-1.txt'
732+
733+ const setFileToRestricted = async ( fileId : number ) => {
734+ await sut . restrictFile ( fileId , true )
735+ }
736+
737+ const setFileToUnrestricted = async ( fileId : number ) => {
738+ await sut . restrictFile ( fileId , false )
739+ }
740+
741+ beforeEach ( async ( ) => {
742+ try {
743+ restrictFileDatasetIds = await createDataset . execute ( TestConstants . TEST_NEW_DATASET_DTO )
744+ } catch ( error ) {
745+ throw new Error ( 'Tests beforeEach(): Error while creating test dataset' )
746+ }
747+ await uploadFileViaApi ( restrictFileDatasetIds . numericId , testTextFile1Name ) . catch ( ( ) => {
748+ throw new Error ( `Tests beforeEach(): Error while uploading file ${ testTextFile1Name } ` )
749+ } )
750+
751+ await publishDatasetViaApi ( restrictFileDatasetIds . numericId ) . catch ( ( ) => {
752+ throw new Error ( 'Error while publishing test Dataset' )
753+ } )
754+
755+ await waitForNoLocks ( restrictFileDatasetIds . numericId , 10 )
756+ } )
757+
758+ afterEach ( async ( ) => {
759+ await deletePublishedDatasetViaApi ( restrictFileDatasetIds . persistentId )
760+ } )
761+
762+ test ( 'should successfully restrict a file' , async ( ) => {
763+ const datasetFiles = await sut . getDatasetFiles (
764+ restrictFileDatasetIds . numericId ,
765+ DatasetNotNumberedVersion . LATEST ,
766+ false ,
767+ FileOrderCriteria . NAME_AZ
768+ )
769+
770+ expect ( datasetFiles . files [ 0 ] . restricted ) . toEqual ( false )
771+
772+ await setFileToRestricted ( datasetFiles . files [ 0 ] . id )
773+
774+ const datasetFilesAfterRestrict = await sut . getDatasetFiles (
775+ restrictFileDatasetIds . numericId ,
776+ DatasetNotNumberedVersion . LATEST ,
777+ false ,
778+ FileOrderCriteria . NAME_AZ
779+ )
780+
781+ expect ( datasetFilesAfterRestrict . files [ 0 ] . restricted ) . toEqual ( true )
782+
783+ // Unrestrict the file Just in case to avoid conflicts with other tests
784+ await setFileToUnrestricted ( datasetFiles . files [ 0 ] . id )
785+ } )
786+
787+ test ( 'should successfully unrestrict a file' , async ( ) => {
788+ const datasetFiles = await sut . getDatasetFiles (
789+ restrictFileDatasetIds . numericId ,
790+ DatasetNotNumberedVersion . LATEST ,
791+ false ,
792+ FileOrderCriteria . NAME_AZ
793+ )
794+
795+ expect ( datasetFiles . files [ 0 ] . restricted ) . toEqual ( false )
796+
797+ await setFileToRestricted ( datasetFiles . files [ 0 ] . id )
798+
799+ const datasetFilesAfterRestrict = await sut . getDatasetFiles (
800+ restrictFileDatasetIds . numericId ,
801+ DatasetNotNumberedVersion . LATEST ,
802+ false ,
803+ FileOrderCriteria . NAME_AZ
804+ )
805+
806+ expect ( datasetFilesAfterRestrict . files [ 0 ] . restricted ) . toEqual ( true )
807+
808+ await setFileToUnrestricted ( datasetFiles . files [ 0 ] . id )
809+
810+ const datasetFilesAfterUnrestrict = await sut . getDatasetFiles (
811+ restrictFileDatasetIds . numericId ,
812+ DatasetNotNumberedVersion . LATEST ,
813+ false ,
814+ FileOrderCriteria . NAME_AZ
815+ )
816+
817+ expect ( datasetFilesAfterUnrestrict . files [ 0 ] . restricted ) . toEqual ( false )
818+ } )
819+
820+ test ( 'should return error when file was already restricted' , async ( ) => {
821+ const datasetFiles = await sut . getDatasetFiles (
822+ restrictFileDatasetIds . numericId ,
823+ DatasetNotNumberedVersion . LATEST ,
824+ false ,
825+ FileOrderCriteria . NAME_AZ
826+ )
827+
828+ await setFileToRestricted ( datasetFiles . files [ 0 ] . id )
829+
830+ const expectedError = new WriteError (
831+ `[400] Problem trying to update restriction status on ${ testTextFile1Name } : File ${ testTextFile1Name } is already restricted`
832+ )
833+
834+ await expect ( setFileToRestricted ( datasetFiles . files [ 0 ] . id ) ) . rejects . toThrow ( expectedError )
835+
836+ // Unrestrict the file Just in case to avoid conflicts with other tests
837+ await setFileToUnrestricted ( datasetFiles . files [ 0 ] . id )
838+ } )
839+
840+ test ( 'should return error when files was already unrestricted' , async ( ) => {
841+ const datasetFiles = await sut . getDatasetFiles (
842+ restrictFileDatasetIds . numericId ,
843+ DatasetNotNumberedVersion . LATEST ,
844+ false ,
845+ FileOrderCriteria . NAME_AZ
846+ )
847+
848+ const expectedError = new WriteError (
849+ `[400] Problem trying to update restriction status on ${ testTextFile1Name } : File ${ testTextFile1Name } is already unrestricted`
850+ )
851+
852+ await expect ( setFileToUnrestricted ( datasetFiles . files [ 0 ] . id ) ) . rejects . toThrow ( expectedError )
853+ } )
854+
855+ test ( 'should return error when file does not exist' , async ( ) => {
856+ const expectedError = new WriteError (
857+ `[400] Could not find datafile with id ${ nonExistentFiledId } `
858+ )
859+
860+ await expect ( setFileToRestricted ( nonExistentFiledId ) ) . rejects . toThrow ( expectedError )
861+ } )
862+ } )
728863} )
0 commit comments