import { renderToStaticMarkup } from "react-dom/server"; import { describe, expect, it, vi } from "vitest"; import SetupTokenHelp from "./SetupTokenHelp"; import { copySetupTokenCommand, SETUP_TOKEN_COMMAND } from "./setup-token-help"; describe("setup token console help", () => { it("copies only the retrieval command when clipboard access succeeds", async () => { const clipboard = { writeText: vi.fn().mockResolvedValue(undefined) }; const commandField = { focus: vi.fn(), select: vi.fn() }; expect(await copySetupTokenCommand(clipboard, commandField)).toBe("copied"); expect(clipboard.writeText).toHaveBeenCalledExactlyOnceWith("python -m app.container_bootstrap setup-token"); expect(commandField.select).not.toHaveBeenCalled(); }); it("selects the command for manual copying when LAN HTTP has no clipboard API", async () => { const commandField = { focus: vi.fn(), select: vi.fn() }; expect(await copySetupTokenCommand(undefined, commandField)).toBe("selected"); expect(commandField.focus).toHaveBeenCalledOnce(); expect(commandField.select).toHaveBeenCalledOnce(); }); it("offers manual copying instead of reporting success when clipboard permission is denied", async () => { const clipboard = { writeText: vi.fn().mockRejectedValue(new Error("Clipboard permission denied")) }; const commandField = { focus: vi.fn(), select: vi.fn() }; expect(await copySetupTokenCommand(clipboard, commandField)).toBe("selected"); expect(commandField.focus).toHaveBeenCalledOnce(); expect(commandField.select).toHaveBeenCalledOnce(); }); it("does not claim a selection or successful copy if the command field is unavailable", async () => { expect(await copySetupTokenCommand(undefined, null)).toBe("manual"); }); it("provides labelled native dialog controls and the managed and manual retrieval instructions", () => { const html = renderToStaticMarkup(); expect(html).toContain('aria-haspopup="dialog"'); expect(html).toContain('aria-controls="setup-token-help"'); expect(html).toContain('magent"); expect(html).toContain(SETUP_TOKEN_COMMAND); expect(html).toContain("SETUP_TOKEN"); expect(html).not.toContain('type="submit"'); expect(html).not.toContain("Command copied."); }); it("can disable the help trigger while account creation is busy", () => { expect(renderToStaticMarkup()).toMatch(/]*disabled=""[^>]*aria-haspopup/); }); });