/* Copyright 2026 Marimo. All rights reserved. */ import { fireEvent, render, screen } from "@testing-library/react"; import { Provider } from "jotai"; import type React from "react"; import { afterEach, describe, expect, it, vi } from "vitest"; import { ModalProvider } from "@/components/modal/ImperativeModal"; import { TooltipProvider } from "@/components/ui/tooltip"; import { store } from "@/core/state/jotai"; import { PairWithAgentBanner, PairWithAgentButton } from "../pair-with-agent"; const mocks = vi.hoisted(() => ({ isWasm: vi.fn(() => false), })); vi.mock("@/core/wasm/utils", () => ({ isWasm: mocks.isWasm, })); function wrapper({ children }: { children: React.ReactNode }) { return ( {children} ); } function stubTokenFetch() { vi.stubGlobal( "fetch", vi.fn().mockResolvedValue(new Response(JSON.stringify({ token: null }))), ); } describe("PairWithAgent", () => { afterEach(() => { vi.unstubAllGlobals(); mocks.isWasm.mockReset(); mocks.isWasm.mockReturnValue(false); }); it("shows local agent options", () => { render(, { wrapper }); expect( screen.getByRole("group", { name: "Supported agents" }), ).toBeVisible(); expect(screen.getByRole("figure", { name: "Claude Code" })).toBeVisible(); expect(screen.getByRole("figure", { name: "Codex" })).toBeVisible(); expect(screen.getByRole("figure", { name: "Cursor" })).toBeVisible(); expect(screen.getByRole("figure", { name: "Gemini CLI" })).toBeVisible(); expect(screen.getByRole("figure", { name: "OpenCode" })).toBeVisible(); expect( screen.getByRole("figure", { name: "GitHub Copilot" }), ).toBeVisible(); expect( screen.getByRole("figure", { name: "Any local agent" }), ).toBeVisible(); expect( screen.getByRole("button", { name: "Learn more.", }), ).toBeVisible(); }); it("opens the pairing dialog from the banner description", () => { stubTokenFetch(); render(, { wrapper }); fireEvent.click( screen.getByRole("button", { name: "Learn more.", }), ); expect( screen.getByRole("dialog", { name: "Pair with an agent" }), ).toBeVisible(); }); it("opens the pairing dialog and preserves a passed click handler", () => { const onClick = vi.fn(); stubTokenFetch(); render(, { wrapper }); fireEvent.click(screen.getByRole("button", { name: "Connect your agent" })); expect(onClick).toHaveBeenCalledOnce(); expect( screen.getByRole("dialog", { name: "Pair with an agent" }), ).toBeVisible(); }); it("hides pairing controls in WASM", () => { mocks.isWasm.mockReturnValue(true); const { container, rerender } = render(, { wrapper, }); expect(container).toBeEmptyDOMElement(); rerender(); expect(container).toBeEmptyDOMElement(); }); });