@@ -792,6 +792,7 @@ describe('storage', function () {
792792
793793 describe ( 'soft-delete' , ( ) => {
794794 let bucket : Bucket ;
795+ let hnsBucket : Bucket ;
795796 const SOFT_DELETE_RETENTION_SECONDS = 7 * 24 * 60 * 60 ; //7 days in seconds;
796797
797798 beforeEach ( async ( ) => {
@@ -802,11 +803,26 @@ describe('storage', function () {
802803 retentionDurationSeconds : SOFT_DELETE_RETENTION_SECONDS ,
803804 } ,
804805 } ) ;
806+
807+ hnsBucket = storage . bucket ( generateName ( ) ) ;
808+ await storage . createBucket ( hnsBucket . name , {
809+ hierarchicalNamespace : { enabled : true } ,
810+ iamConfiguration : {
811+ uniformBucketLevelAccess : {
812+ enabled : true ,
813+ } ,
814+ } ,
815+ softDeletePolicy : {
816+ retentionDurationSeconds : SOFT_DELETE_RETENTION_SECONDS ,
817+ } ,
818+ } ) ;
805819 } ) ;
806820
807821 afterEach ( async ( ) => {
808822 await bucket . deleteFiles ( { force : true , versions : true } ) ;
809823 await bucket . delete ( ) ;
824+ await hnsBucket . deleteFiles ( { force : true , versions : true } ) ;
825+ await hnsBucket . delete ( ) ;
810826 } ) ;
811827
812828 it ( 'should set softDeletePolicy correctly' , async ( ) => {
@@ -862,6 +878,63 @@ describe('storage', function () {
862878 [ files ] = await bucket . getFiles ( ) ;
863879 assert . strictEqual ( files . length , 1 ) ;
864880 } ) ;
881+
882+ it ( 'should LIST soft-deleted files with restore token' , async ( ) => {
883+ const f1 = hnsBucket . file ( 'file5a' ) ;
884+ const f2 = hnsBucket . file ( 'file5b' ) ;
885+ await f1 . save ( 'file5a' ) ;
886+ await f2 . save ( 'file5b' ) ;
887+ await f1 . delete ( ) ;
888+ await f2 . delete ( ) ;
889+ const [ notSoftDeletedFiles ] = await hnsBucket . getFiles ( ) ;
890+ assert . strictEqual ( notSoftDeletedFiles . length , 0 ) ;
891+ const [ softDeletedFiles ] = await hnsBucket . getFiles ( { softDeleted : true } ) ;
892+ assert . strictEqual ( softDeletedFiles . length , 2 ) ;
893+ assert . notStrictEqual (
894+ softDeletedFiles ! [ 0 ] . metadata . restoreToken ,
895+ undefined
896+ ) ;
897+ } ) ;
898+
899+ it ( 'should GET a soft-deleted file with restore token' , async ( ) => {
900+ const f1 = hnsBucket . file ( 'file6' ) ;
901+ await f1 . save ( 'file6' ) ;
902+ const [ metadata ] = await f1 . getMetadata ( ) ;
903+ await f1 . delete ( ) ;
904+ const [ softDeletedFile ] = await f1 . get ( {
905+ softDeleted : true ,
906+ generation : parseInt ( metadata . generation ?. toString ( ) || '0' ) ,
907+ } ) ;
908+ assert ( softDeletedFile ) ;
909+ assert . strictEqual (
910+ softDeletedFile . metadata . generation ,
911+ metadata . generation
912+ ) ;
913+ assert . notStrictEqual ( softDeletedFile . metadata . restoreToken , undefined ) ;
914+ } ) ;
915+
916+ it ( 'should restore a soft-deleted file using restoreToken' , async ( ) => {
917+ const f1 = hnsBucket . file ( 'file7' ) ;
918+ await f1 . save ( 'file7' ) ;
919+ const [ metadata ] = await f1 . getMetadata ( ) ;
920+ await f1 . delete ( ) ;
921+ let [ files ] = await hnsBucket . getFiles ( ) ;
922+ assert . strictEqual ( files . length , 0 ) ;
923+ const [ softDeletedFile ] = await f1 . get ( {
924+ softDeleted : true ,
925+ generation : parseInt ( metadata . generation ?. toString ( ) || '0' ) ,
926+ } ) ;
927+ assert ( softDeletedFile ) ;
928+ const restoredFile = await f1 . restore ( {
929+ generation : parseInt (
930+ softDeletedFile . metadata . generation ?. toString ( ) || '0'
931+ ) ,
932+ restoreToken : softDeletedFile . metadata . restoreToken ,
933+ } ) ;
934+ assert ( restoredFile ) ;
935+ [ files ] = await hnsBucket . getFiles ( ) ;
936+ assert . strictEqual ( files . length , 1 ) ;
937+ } ) ;
865938 } ) ;
866939
867940 describe ( 'dual-region' , ( ) => {
0 commit comments