Open History to see the last commit
1import { expect, it, vi } from "vite-plus/test";
2import { page } from "vite-plus/test/browser";
3
4import { render } from "../../../test/render";
5import { AnchoredToastProvider } from "../ui/toast";
6import { MessageCopyButton } from "./MessageCopyButton";
7
8it("explains a denied clipboard write and lets the same message be copied again", async () => {
9 await using screen = await render(
10 <AnchoredToastProvider timeout={0}>
11 <MessageCopyButton text="A message to copy" />
12 </AnchoredToastProvider>,
13 );
14 using _write = vi
15 .spyOn(navigator.clipboard, "writeText")
16 .mockRejectedValueOnce(new DOMException("Clipboard access denied", "NotAllowedError"))
17 .mockResolvedValue(undefined);
18 using _console = vi.spyOn(console, "error").mockImplementation(() => undefined);
19
20 const copy = screen.getByRole("button", { name: "Copy message" });
21 await copy.click();
22
23 await expect.element(page.getByText("Failed to copy text to the clipboard.")).toBeVisible();
24 await expect.element(copy).toBeEnabled();
25 await page.getByRole("button", { name: "Dismiss notification" }).click();
26 await copy.click();
27
28 await expect.element(page.getByText("Copied!", { exact: true })).toBeVisible();
29 await expect.element(copy).toBeDisabled();
30});