@@ -207,4 +207,76 @@ describe('PUT request handler', () => {
207207 expect ( deleteDBFileStub ) . toHaveBeenCalledOnce ( ) ;
208208 expect ( deleteDriveFileStub ) . toHaveBeenCalledOnce ( ) ;
209209 } ) ;
210+
211+ it ( 'When the Drive destination folder is found, then it should upload the multipart file' , async ( ) => {
212+ const driveDatabaseManager = getDriveDatabaseManager ( ) ;
213+ const downloadService = DownloadService . instance ;
214+ const uploadService = UploadService . instance ;
215+ const cryptoService = CryptoService . instance ;
216+ const authService = AuthService . instance ;
217+ const networkFacade = new NetworkFacade ( getNetworkMock ( ) , uploadService , downloadService , cryptoService ) ;
218+ const sut = new PUTRequestHandler ( {
219+ driveFileService : DriveFileService . instance ,
220+ driveFolderService : DriveFolderService . instance ,
221+ authService : AuthService . instance ,
222+ trashService : TrashService . instance ,
223+ networkFacade,
224+ driveDatabaseManager,
225+ } ) ;
226+
227+ const multipartFileSize = 105 * 1024 * 1024 ;
228+
229+ const requestedFileResource : WebDavRequestedResource = getRequestedFileResource ( ) ;
230+ const requestedParentFolderResource : WebDavRequestedResource = getRequestedFolderResource ( {
231+ parentFolder : '/' ,
232+ folderName : '' ,
233+ } ) ;
234+ const folderFixture = newFolderItem ( { name : requestedParentFolderResource . name } ) ;
235+ const fileFixture = newDriveFile ( {
236+ folderId : folderFixture . id ,
237+ folderUuid : folderFixture . uuid ,
238+ size : multipartFileSize ,
239+ } ) ;
240+
241+ const request = createWebDavRequestFixture ( {
242+ method : 'PUT' ,
243+ url : requestedFileResource . url ,
244+ headers : {
245+ 'content-length' : multipartFileSize . toString ( ) ,
246+ } ,
247+ } ) ;
248+
249+ const response = createWebDavResponseFixture ( {
250+ status : vi . fn ( ) . mockReturnValue ( { send : vi . fn ( ) } ) ,
251+ } ) ;
252+
253+ const getRequestedResourceStub = vi
254+ . spyOn ( WebDavUtils , 'getRequestedResource' )
255+ . mockResolvedValueOnce ( requestedFileResource )
256+ . mockResolvedValueOnce ( requestedParentFolderResource ) ;
257+ const getAndSearchItemFromResourceStub = vi
258+ . spyOn ( WebDavUtils , 'getAndSearchItemFromResource' )
259+ . mockResolvedValueOnce ( folderFixture )
260+ . mockRejectedValue ( new Error ( ) ) ;
261+ const getAuthDetailsStub = vi . spyOn ( authService , 'getAuthDetails' ) . mockResolvedValue ( UserCredentialsFixture ) ;
262+ const uploadMultipartFromStreamStub = vi
263+ . spyOn ( networkFacade , 'uploadMultipartFromStream' )
264+ . mockResolvedValue ( [
265+ Promise . resolve ( { fileId : '09218313209' , hash : Buffer . from ( 'test' ) } ) ,
266+ new AbortController ( ) ,
267+ ] ) ;
268+ const createDriveFileStub = vi
269+ . spyOn ( DriveFileService . instance , 'createFile' )
270+ . mockResolvedValue ( fileFixture . toItem ( ) ) ;
271+ const createDBFileStub = vi . spyOn ( driveDatabaseManager , 'createFile' ) . mockResolvedValue ( fileFixture ) ;
272+
273+ await sut . handle ( request , response ) ;
274+ expect ( response . status ) . toHaveBeenCalledWith ( 200 ) ;
275+ expect ( getRequestedResourceStub ) . toHaveBeenCalledTimes ( 2 ) ;
276+ expect ( getAndSearchItemFromResourceStub ) . toHaveBeenCalledTimes ( 2 ) ;
277+ expect ( getAuthDetailsStub ) . toHaveBeenCalledOnce ( ) ;
278+ expect ( uploadMultipartFromStreamStub ) . toHaveBeenCalledOnce ( ) ;
279+ expect ( createDriveFileStub ) . toHaveBeenCalledOnce ( ) ;
280+ expect ( createDBFileStub ) . toHaveBeenCalledOnce ( ) ;
281+ } ) ;
210282} ) ;
0 commit comments