// @vitest-environment jsdom import { act } from "react"; import { createRoot } from "react-dom/client"; import { MemoryRouter } from "react-router-dom"; import { expect, it, vi } from "vitest"; import { updateFastResponseSchema } from "@paperclipai/shared"; import { FastResponseSettingsView } from "./FastResponseSettings"; import { choices } from "../../../storybook/support/decision-models/fixtures"; vi.mock("@/context/CompanyContext", () => ({ useCompany: () => ({ selectedCompanyId: "company-storybook" }), })); ( globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean } ).IS_REACT_ACT_ENVIRONMENT = true; it("saves only API settings and keeps the draft across unchanged query refetches", async () => { const container = document.createElement("div"); document.body.appendChild(container); const root = createRoot(container), onSave = vi.fn(); const settings = { companyId: "company-storybook", enabled: false, connectionId: null, grantId: null, provider: null, model: null, allowSponsored: false, }; const render = () => ( ); try { await act(async () => root.render(render())); await act(async () => [...container.querySelectorAll("button")] .find((b) => b.textContent?.includes("Company OpenRouter"))! .click(), ); await act(async () => root.render(render())); expect( container.querySelector("input[list]")?.value, ).toBe("openai/gpt-oss-120b"); await act(async () => [...container.querySelectorAll("button")] .find((b) => b.textContent === "Save fast response")! .click(), ); const saved = onSave.mock.calls[0][0]; expect(updateFastResponseSchema.safeParse(saved).success).toBe(true); expect(saved).toMatchObject({ enabled: true, allowSponsored: false, connectionId: choices[1]!.id, }); expect(saved).not.toHaveProperty("companyId"); expect(saved).not.toHaveProperty("provider"); } finally { act(() => root.unmount()); container.remove(); } }); it("selects a newly created connection and recommends its default model", async () => { const container = document.createElement("div"); document.body.appendChild(container); const root = createRoot(container), onSave = vi.fn(), onConnectionChange = vi.fn(); const settings = { companyId: "company-storybook", enabled: false, connectionId: null, grantId: null, provider: null, model: null, allowSponsored: true, }; try { await act(async () => root.render( , ), ); expect( container.querySelector("input[list]")?.value, ).toBe("openai/gpt-oss-120b"); await act(async () => [...container.querySelectorAll("button")] .find((b) => b.textContent === "Save fast response")! .click(), ); expect(onSave).toHaveBeenCalledWith( expect.objectContaining({ connectionId: choices[1]!.id, enabled: true, allowSponsored: true, }), ); expect(onConnectionChange).toHaveBeenCalledWith(choices[1]!.id); } finally { act(() => root.unmount()); container.remove(); } });