From ed223e81fd627f174ccbc5b408c231fc152b08e0 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2026 06:42:18 +0000 Subject: [PATCH] test: add missing error test for generateImage catch block Co-authored-by: is0692vs <135803462+is0692vs@users.noreply.github.com> --- src/hooks/__tests__/useCardPreview.test.ts | 51 +++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/hooks/__tests__/useCardPreview.test.ts b/src/hooks/__tests__/useCardPreview.test.ts index 328ef85f..03e0ace0 100644 --- a/src/hooks/__tests__/useCardPreview.test.ts +++ b/src/hooks/__tests__/useCardPreview.test.ts @@ -318,4 +318,53 @@ describe("useCardPreview", () => { expect(toBlob).not.toHaveBeenCalled(); expect(result.current.copyStatus).toBe("idle"); }); -}); + + it("handles fonts ready failure in generate effect", async () => { + // Suppress unhandled rejection warning by catching it + const fontsReadyPromise = Promise.reject(new Error("Fonts loading failed")); + fontsReadyPromise.catch(() => {}); + + Object.defineProperty(document, "fonts", { + value: { + ready: fontsReadyPromise, + }, + configurable: true, + }); + + const { result, rerender } = renderHook( + ({ isOpen }) => + useCardPreview(isOpen, mockCardRef, mockSummary, mockLayout, mockDisplayOptions), + { initialProps: { isOpen: false } } + ); + + rerender({ isOpen: true }); + + await waitFor(() => { + expect(result.current.isGenerating).toBe(false); + }); + + expect(result.current.previewUrl).toBeNull(); + expect(result.current.previewSize).toBeNull(); + }); + + it("handles generateImage failure due to target error", async () => { + // Override the mock block to return null or throw earlier if possible, but testing the catch block of generateImage + const error = new Error("Mock Error"); + vi.mocked(toPng).mockRejectedValueOnce(error); + + const { result, rerender } = renderHook( + ({ isOpen }) => + useCardPreview(isOpen, mockCardRef, mockSummary, mockLayout, mockDisplayOptions), + { initialProps: { isOpen: false } } + ); + + rerender({ isOpen: true }); + + await waitFor(() => { + expect(result.current.isGenerating).toBe(false); + }); + + expect(logger.error).toHaveBeenCalledWith("Failed to generate image", error); + expect(result.current.previewUrl).toBeNull(); + }); +}); \ No newline at end of file