From 6bf5a3fb965785b0d61af9b62c2ca536bb163886 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 6 Jun 2026 03:18:23 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=AA=20add=20test=20for=20navigator.cli?= =?UTF-8?q?pboard.writeText=20failure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: is0692vs <135803462+is0692vs@users.noreply.github.com> --- .../__tests__/useCopyToClipboard.test.ts | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/hooks/__tests__/useCopyToClipboard.test.ts b/src/hooks/__tests__/useCopyToClipboard.test.ts index 4c6e5f7b..165caa3c 100644 --- a/src/hooks/__tests__/useCopyToClipboard.test.ts +++ b/src/hooks/__tests__/useCopyToClipboard.test.ts @@ -114,6 +114,28 @@ describe("useCopyToClipboard", () => { expect(result.current.copied).toBe(false); }); + it("should catch and store error if navigator.clipboard.writeText rejects", async () => { + const error = new Error("writeText failed"); + vi.mocked(navigator.clipboard.writeText).mockRejectedValue(error); + + // We also need to mock execCommand to return true so the fallback succeeds + // or false so it fails, but we want to specifically ensure the catch block was hit. + vi.mocked(document.execCommand).mockReturnValue(false); + + const { result } = renderHook(() => useCopyToClipboard()); + + await act(async () => { + await result.current.copyToClipboard("test text"); + }); + + expect(navigator.clipboard.writeText).toHaveBeenCalledWith("test text"); + expect(logger.error).toHaveBeenCalledWith( + "Failed to copy", + error, + expect.any(Error) + ); + }); + it("should log error if both clipboard and fallback fail", async () => { vi.mocked(navigator.clipboard.writeText).mockRejectedValue(new Error("Clipboard error")); vi.mocked(document.execCommand).mockReturnValue(false);