@@ -182,7 +182,7 @@ describe("useUploadKit", () => {
182182 expect ( uploader . files . value ) . toHaveLength ( 1 )
183183 } )
184184
185- it ( "should call storage plugin remove hook by default for files with remoteUrl " , async ( ) => {
185+ it ( "should call storage plugin remove hook by default (deleteFromStorage: 'always') " , async ( ) => {
186186 const removeHook = vi . fn ( )
187187 const storagePlugin : StoragePlugin = {
188188 id : "test-storage" ,
@@ -212,7 +212,7 @@ describe("useUploadKit", () => {
212212 expect ( uploader . files . value ) . toHaveLength ( 0 )
213213 } )
214214
215- it ( "should skip storage plugin remove hook when deleteFromStorage is false " , async ( ) => {
215+ it ( "should skip storage plugin remove hook when deleteFromStorage is 'never' " , async ( ) => {
216216 const removeHook = vi . fn ( )
217217 const storagePlugin : StoragePlugin = {
218218 id : "test-storage" ,
@@ -232,12 +232,55 @@ describe("useUploadKit", () => {
232232 // Add a remote file using initializeExistingFiles
233233 await uploader . initializeExistingFiles ( [ { id : "remote-1" } ] )
234234
235- await uploader . removeFile ( "remote-1" , { deleteFromStorage : false } )
235+ await uploader . removeFile ( "remote-1" , { deleteFromStorage : "never" } )
236236
237237 expect ( removeHook ) . not . toHaveBeenCalled ( )
238238 expect ( uploader . files . value ) . toHaveLength ( 0 )
239239 } )
240240
241+ it ( "should only delete local uploads when deleteFromStorage is 'local-only'" , async ( ) => {
242+ const removeHook = vi . fn ( )
243+ const uploadHook = vi . fn ( ) . mockResolvedValue ( {
244+ url : "https://storage.example.com/uploaded.jpg" ,
245+ storageKey : "uploaded.jpg" ,
246+ } )
247+ const storagePlugin : StoragePlugin = {
248+ id : "test-storage" ,
249+ hooks : {
250+ upload : uploadHook ,
251+ remove : removeHook ,
252+ getRemoteFile : vi . fn ( ) . mockResolvedValue ( {
253+ size : 1024 ,
254+ mimeType : "image/jpeg" ,
255+ remoteUrl : "https://storage.example.com/existing.jpg" ,
256+ } ) ,
257+ } ,
258+ }
259+
260+ const uploader = useUploadKit ( { storage : storagePlugin } )
261+
262+ // Add a remote file (source: "storage") - simulates pre-populated file
263+ await uploader . initializeExistingFiles ( [ { id : "existing-file" } ] )
264+
265+ // Add and upload a local file (source: "local")
266+ await uploader . addFile ( createMockFile ( "new-upload.jpg" ) )
267+ const localFileId = uploader . files . value . find ( ( f ) => f . source === "local" ) ! . id
268+
269+ // Upload to set remoteUrl
270+ await uploader . upload ( )
271+
272+ expect ( uploader . files . value ) . toHaveLength ( 2 )
273+
274+ // Remove the pre-populated file with "local-only" - should NOT delete from storage
275+ await uploader . removeFile ( "existing-file" , { deleteFromStorage : "local-only" } )
276+ expect ( removeHook ) . not . toHaveBeenCalled ( )
277+
278+ // Remove the locally uploaded file with "local-only" - SHOULD delete from storage
279+ await uploader . removeFile ( localFileId , { deleteFromStorage : "local-only" } )
280+ expect ( removeHook ) . toHaveBeenCalledTimes ( 1 )
281+ expect ( removeHook ) . toHaveBeenCalledWith ( expect . objectContaining ( { source : "local" } ) , expect . any ( Object ) )
282+ } )
283+
241284 it ( "should not call storage plugin remove hook for files without remoteUrl" , async ( ) => {
242285 const removeHook = vi . fn ( )
243286 const storagePlugin : StoragePlugin = {
@@ -252,6 +295,7 @@ describe("useUploadKit", () => {
252295 await uploader . addFile ( createMockFile ( "local.jpg" ) )
253296 const fileId = uploader . files . value [ 0 ] ! . id
254297
298+ // File hasn't been uploaded yet, so no remoteUrl
255299 await uploader . removeFile ( fileId )
256300
257301 // Should not call remove hook since file doesn't have remoteUrl yet
0 commit comments