diff --git a/kits/storage-resize-images/src/handlers.ts b/kits/storage-resize-images/src/handlers.ts index 5f35dd7591..800ce369e0 100644 --- a/kits/storage-resize-images/src/handlers.ts +++ b/kits/storage-resize-images/src/handlers.ts @@ -153,10 +153,12 @@ export async function generateResizedImageHandler( }, }); - resizeFailed = resizeResults.some( - (result) => - result.status === "rejected" || result.value.success === false - ); + resizeFailed = + resizeResults.length === 0 || + resizeResults.some( + (result) => + result.status === "rejected" || result.value.success === false + ); } const failed = filterErrored || resizeFailed; diff --git a/kits/storage-resize-images/tests/handlers.test.ts b/kits/storage-resize-images/tests/handlers.test.ts index fddbcf54c2..bb7681e46a 100644 --- a/kits/storage-resize-images/tests/handlers.test.ts +++ b/kits/storage-resize-images/tests/handlers.test.ts @@ -310,6 +310,29 @@ describe("generateResizedImageHandler", () => { expect(handleFailedImage).toHaveBeenCalledTimes(1); }); + test("treats zero resize outputs as a failure", async () => { + const ctx = makeCtx(); + mock(resizeImages).mockResolvedValue([]); + + await generateResizedImageHandler(mockObject, ctx, false); + + expect(logs.failed).toHaveBeenCalled(); + expect(handleFailedImage).toHaveBeenCalledTimes(1); + }); + + test("keeps the original under on_success when no resize was produced", async () => { + mock(downloadOriginalFile).mockResolvedValue([ + "/tmp/test.jpg", + { delete: vi.fn() }, + ]); + mock(resizeImages).mockResolvedValue([]); + const ctx = makeCtx({ deleteOriginalFile: DELETE_IMAGE.onSuccess }); + + await generateResizedImageHandler(mockObject, ctx, false); + + expect(deleteRemoteFile).not.toHaveBeenCalled(); + }); + test("deletes the original only after a successful run under on_success", async () => { const remoteFile = { delete: vi.fn() }; mock(downloadOriginalFile).mockResolvedValue(["/tmp/test.jpg", remoteFile]);