@@ -24,6 +24,7 @@ beforeEach(() => {
2424 vi . stubGlobal ( "window" , {
2525 URL : {
2626 createObjectURL : vi . fn ( ( ) => "blob:http://localhost/fake-object-url" ) ,
27+ revokeObjectURL : vi . fn ( ) ,
2728 } ,
2829 } ) ;
2930
@@ -514,6 +515,28 @@ describe("createHttpService", () => {
514515 "No content type found" ,
515516 ) ;
516517 } ) ;
518+
519+ it ( "revokes the object URL after triggering the download" , async ( ) => {
520+ // Arrange
521+ mock . onGet ( `${ BASE_URL } /download/file.pdf` ) . reply ( 200 , "file-content" , {
522+ "content-type" : "application/pdf" ,
523+ } ) ;
524+ const service = createHttpService ( BASE_URL ) ;
525+ const mockLink = { href : "" , download : "" , click : vi . fn ( ) } ;
526+ vi . stubGlobal ( "document" , {
527+ createElement : vi . fn ( ( ) => mockLink ) ,
528+ cookie : "" ,
529+ } ) ;
530+
531+ // Act
532+ await service . downloadRequest ( "/download/file.pdf" , "report.pdf" ) ;
533+
534+ // Assert — revoke fires with the same URL that was assigned to href
535+ expect ( window . URL . revokeObjectURL ) . toHaveBeenCalledTimes ( 1 ) ;
536+ expect ( window . URL . revokeObjectURL ) . toHaveBeenCalledWith (
537+ "blob:http://localhost/fake-object-url" ,
538+ ) ;
539+ } ) ;
517540 } ) ;
518541
519542 describe ( "previewRequest" , ( ) => {
0 commit comments