@@ -15,7 +15,6 @@ import * as spacesPathUtils from '../../spaces/utils/paths'
1515import * as spacesPermsUtils from '../../spaces/utils/permissions'
1616import { DEPTH } from '../../webdav/constants/webdav'
1717import { ACTION } from '../../../common/constants'
18- import { FILE_OPERATION } from '../constants/operations'
1918import { DownloadFileDto } from '../dto/file-operations.dto'
2019import { FileEvent , FileTaskEvent } from '../events/file-events'
2120import { FileError , SourceCleanupError } from '../models/file-error'
@@ -43,7 +42,7 @@ vi.mock('node:dns/promises', () => ({
4342
4443describe ( FilesManager . name , ( ) => {
4544 let service : FilesManager
46- let filesTasksTransfer : { copy : Mock ; move : Mock ; delete : Mock }
45+ let filesTasksTransfer : { copy : Mock ; move : Mock ; delete : Mock ; createByteProgressHandler : Mock ; createExtractionProgressHandler : Mock }
4746 let http : { axiosRef : Mock }
4847 const lookupMock = lookup as Mock
4948 let filesQueries : { moveFiles : Mock ; deleteFiles : Mock }
@@ -172,7 +171,13 @@ describe(FilesManager.name, () => {
172171 }
173172 ) ,
174173 move : vi . fn ( ) . mockResolvedValue ( undefined ) ,
175- delete : vi . fn ( ) . mockResolvedValue ( undefined )
174+ delete : vi . fn ( ) . mockResolvedValue ( undefined ) ,
175+ createByteProgressHandler : vi . fn ( ( space ) =>
176+ vi . fn ( ( bytes : number ) => {
177+ space . task . props . size = ( space . task . props . size || 0 ) + bytes
178+ } )
179+ ) ,
180+ createExtractionProgressHandler : vi . fn ( ) . mockReturnValue ( vi . fn ( ) )
176181 }
177182 filesLockManager = {
178183 create : vi . fn ( ) . mockResolvedValue ( [ true , { key : 'lock-1' } ] ) ,
@@ -1054,17 +1059,19 @@ describe(FilesManager.name, () => {
10541059
10551060 await service . downloadFromUrl ( user , space , { url : 'https://example.org/file.txt' } )
10561061
1057- expect ( space . task . props . totalSize ) . toBe ( 55 )
1058- expect ( taskEmitSpy ) . toHaveBeenCalledWith (
1059- 'startWatch' ,
1060- space ,
1061- FILE_OPERATION . DOWNLOAD ,
1062- '/tmp/download.txt' ,
1063- '/data/users/john/tmp/tasks/.task-1-download.txt'
1064- )
1062+ expect ( space . task . props ) . toMatchObject ( { progress : 1 , size : 0 , totalSize : 55 } )
1063+ expect ( taskEmitSpy ) . toHaveBeenCalledWith ( 'startWatch' , space , '/tmp/download.txt' )
10651064 expect ( taskUtils . taskTemporaryPath ) . toHaveBeenCalledWith ( user . tasksPath , 'task-1' , '/tmp/download.txt' )
10661065 expect ( filesUtils . tempFilePath ) . not . toHaveBeenCalled ( )
1067- expect ( filesUtils . writeFromStream ) . toHaveBeenCalledWith ( '/data/users/john/tmp/tasks/.task-1-download.txt' , expect . anything ( ) , 0 , 55 )
1066+ expect ( filesUtils . writeFromStream ) . toHaveBeenCalledWith (
1067+ '/data/users/john/tmp/tasks/.task-1-download.txt' ,
1068+ expect . anything ( ) ,
1069+ 0 ,
1070+ 55 ,
1071+ undefined ,
1072+ expect . any ( Function )
1073+ )
1074+ expect ( filesTasksTransfer . createByteProgressHandler ) . toHaveBeenCalledWith ( space )
10681075 expect ( filesUtils . moveFiles ) . toHaveBeenCalledWith ( '/data/users/john/tmp/tasks/.task-1-download.txt' , '/tmp/download.txt' )
10691076 expect ( filesLockManager . create ) . toHaveBeenCalledWith (
10701077 user ,
@@ -1129,6 +1136,9 @@ describe(FilesManager.name, () => {
11291136 describe ( 'compress' , ( ) => {
11301137 it ( 'should archive files and emit events' , async ( ) => {
11311138 const archive = createArchiveMock ( )
1139+ archive . finalize . mockImplementationOnce ( async ( ) => {
1140+ archive . end ( 'content' )
1141+ } )
11321142 vi . mocked ( filesUtils . uniqueFilePathFromDir ) . mockResolvedValueOnce ( '/tmp/archive.tar.gz' )
11331143 vi . mocked ( filesUtils . isPathIsDir ) . mockImplementation ( async ( p : string ) => p . endsWith ( '/dir' ) )
11341144 const space = makeSpace ( { realPath : '/data/users/john/files/source.txt' , task : { cacheKey : 'task-c' , props : { } } } )
@@ -1149,18 +1159,13 @@ describe(FilesManager.name, () => {
11491159 expect ( archive . directory ) . toHaveBeenCalled ( )
11501160 expect ( archive . file ) . toHaveBeenCalled ( )
11511161 expect ( archive . finalize ) . toHaveBeenCalled ( )
1152- expect ( taskEmitSpy ) . toHaveBeenCalledWith (
1153- 'startWatch' ,
1154- space ,
1155- FILE_OPERATION . COMPRESS ,
1156- '/tmp/archive.tar.gz' ,
1157- '/data/users/john/tmp/tasks/.task-c-archive.tar.gz'
1158- )
1162+ expect ( taskEmitSpy ) . toHaveBeenCalledWith ( 'startWatch' , space , '/tmp/archive.tar.gz' )
11591163 expect ( taskUtils . taskTemporaryPath ) . toHaveBeenCalledWith ( user . tasksPath , 'task-c' , '/tmp/archive.tar.gz' )
11601164 expect ( filesUtils . tempFilePath ) . not . toHaveBeenCalled ( )
11611165 expect ( fs . createWriteStream ) . toHaveBeenCalledWith ( '/data/users/john/tmp/tasks/.task-c-archive.tar.gz' , {
11621166 highWaterMark : expect . any ( Number )
11631167 } )
1168+ expect ( space . task . props . size ) . toBe ( Buffer . byteLength ( 'content' ) )
11641169 expect ( filesUtils . moveFiles ) . toHaveBeenCalledWith ( '/data/users/john/tmp/tasks/.task-c-archive.tar.gz' , '/tmp/archive.tar.gz' )
11651170 } )
11661171
@@ -1314,15 +1319,16 @@ describe(FilesManager.name, () => {
13141319
13151320 expect ( taskUtils . createTaskTemporaryDir ) . toHaveBeenCalledWith ( user . tasksPath , 'task-d' , '/data/users/john/files/archive' )
13161321 expect ( filesUtils . makeTempDir ) . not . toHaveBeenCalled ( )
1317- expect ( unzipSpy ) . toHaveBeenCalledWith ( '/data/users/john/files/archive.zip' , '/data/users/john/tmp/tasks/.task-d-archive' , undefined , undefined )
1318- expect ( filesUtils . moveFiles ) . toHaveBeenCalledWith ( '/data/users/john/tmp/tasks/.task-d-archive' , '/data/users/john/files/archive' )
1319- expect ( taskEmitSpy ) . toHaveBeenCalledWith (
1320- 'startWatch' ,
1321- space ,
1322- FILE_OPERATION . DECOMPRESS ,
1323- '/data/users/john/files/archive' ,
1324- '/data/users/john/tmp/tasks/.task-d-archive'
1322+ expect ( filesTasksTransfer . createExtractionProgressHandler ) . toHaveBeenCalledWith ( space )
1323+ expect ( unzipSpy ) . toHaveBeenCalledWith (
1324+ '/data/users/john/files/archive.zip' ,
1325+ '/data/users/john/tmp/tasks/.task-d-archive' ,
1326+ undefined ,
1327+ undefined ,
1328+ expect . any ( Function )
13251329 )
1330+ expect ( filesUtils . moveFiles ) . toHaveBeenCalledWith ( '/data/users/john/tmp/tasks/.task-d-archive' , '/data/users/john/files/archive' )
1331+ expect ( taskEmitSpy ) . toHaveBeenCalledWith ( 'startWatch' , space , '/data/users/john/files/archive' )
13261332 expect ( filesLockManager . removeLock ) . toHaveBeenCalledWith ( 'lock-1' )
13271333 } )
13281334
@@ -1340,6 +1346,7 @@ describe(FilesManager.name, () => {
13401346 '/data/users/john/tmp/archive-extract-123' ,
13411347 true ,
13421348 undefined ,
1349+ undefined ,
13431350 undefined
13441351 )
13451352 expect ( filesUtils . moveFiles ) . toHaveBeenCalledWith ( '/data/users/john/tmp/archive-extract-123' , '/data/users/john/files/archive' )
@@ -1354,7 +1361,13 @@ describe(FilesManager.name, () => {
13541361
13551362 await service . decompress ( user , space )
13561363
1357- expect ( unzipSpy ) . toHaveBeenCalledWith ( '/data/users/john/files/archive.zip' , '/data/users/john/tmp/archive-extract-123' , 60 , undefined )
1364+ expect ( unzipSpy ) . toHaveBeenCalledWith (
1365+ '/data/users/john/files/archive.zip' ,
1366+ '/data/users/john/tmp/archive-extract-123' ,
1367+ 60 ,
1368+ undefined ,
1369+ undefined
1370+ )
13581371 } )
13591372
13601373 it ( 'should remove partial extraction and skip add event on failure' , async ( ) => {
0 commit comments