import { afterEach, describe, expect, it, vi } from "vitest"; import { Command } from "commander"; const gatewayMocks = vi.hoisted(() => ({ callGatewayFromCli: vi.fn(async () => ({ ok: true, format: "ai", targetId: "t1", url: "https://example.com", snapshot: "ok", })), })); vi.mock("./gateway-rpc.js", () => ({ callGatewayFromCli: gatewayMocks.callGatewayFromCli, })); const configMocks = vi.hoisted(() => ({ loadConfig: vi.fn(() => ({ browser: {} })), })); vi.mock("../config/config.js", () => configMocks); const sharedMocks = vi.hoisted(() => ({ callBrowserRequest: vi.fn( async (_opts: unknown, params: { path?: string; query?: Record }) => { const format = params.query?.format === "aria" ? "aria" : "ai"; if (format === "aria") { return { ok: true, format: "aria", targetId: "t1", url: "https://example.com", nodes: [], }; } return { ok: true, format: "ai", targetId: "t1", url: "https://example.com", snapshot: "ok", }; }, ), })); vi.mock("./browser-cli-shared.js", () => ({ callBrowserRequest: sharedMocks.callBrowserRequest, })); const runtime = { log: vi.fn(), error: vi.fn(), exit: vi.fn(), }; vi.mock("../runtime.js", () => ({ defaultRuntime: runtime, })); describe("browser cli snapshot defaults", () => { afterEach(() => { vi.clearAllMocks(); configMocks.loadConfig.mockReturnValue({ browser: {} }); }); it("uses config snapshot defaults when mode is not provided", async () => { configMocks.loadConfig.mockReturnValue({ browser: { snapshotDefaults: { mode: "efficient" } }, }); const { registerBrowserInspectCommands } = await import("./browser-cli-inspect.js"); const program = new Command(); const browser = program.command("browser").option("--json", false); registerBrowserInspectCommands(browser, () => ({})); await program.parseAsync(["browser", "snapshot"], { from: "user" }); expect(sharedMocks.callBrowserRequest).toHaveBeenCalled(); const [, params] = sharedMocks.callBrowserRequest.mock.calls.at(-1) ?? []; expect(params?.path).toBe("/snapshot"); expect(params?.query).toMatchObject({ format: "ai", mode: "efficient", }); }); it("does not apply config snapshot defaults to aria snapshots", async () => { configMocks.loadConfig.mockReturnValue({ browser: { snapshotDefaults: { mode: "efficient" } }, }); gatewayMocks.callGatewayFromCli.mockResolvedValueOnce({ ok: true, format: "aria", targetId: "t1", url: "https://example.com", nodes: [], }); const { registerBrowserInspectCommands } = await import("./browser-cli-inspect.js"); const program = new Command(); const browser = program.command("browser").option("--json", false); registerBrowserInspectCommands(browser, () => ({})); await program.parseAsync(["browser", "snapshot", "--format", "aria"], { from: "user" }); expect(sharedMocks.callBrowserRequest).toHaveBeenCalled(); const [, params] = sharedMocks.callBrowserRequest.mock.calls.at(-1) ?? []; expect(params?.path).toBe("/snapshot"); expect((params?.query as { mode?: unknown } | undefined)?.mode).toBeUndefined(); }); });