// @vitest-environment jsdom import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { flushSync } from "react-dom"; import { createRoot, type Root } from "react-dom/client"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { NewProjectDialog } from "./NewProjectDialog"; import { TooltipProvider } from "@/components/ui/tooltip"; import { queryKeys } from "../lib/queryKeys"; (globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; function act(callback: () => void) { flushSync(() => { callback(); }); } vi.mock("../api/projects", () => ({ projectsApi: { create: vi.fn(), repositoryOptions: vi.fn().mockResolvedValue({ repositories: [], connectionCount: 0, failedConnectionCount: 0 }), } })); vi.mock("../api/goals", () => ({ goalsApi: { list: vi.fn().mockResolvedValue([]) } })); vi.mock("../api/agents", () => ({ agentsApi: { list: vi.fn().mockResolvedValue([]) } })); vi.mock("../api/access", () => ({ accessApi: { listUserDirectory: vi.fn().mockResolvedValue({ users: [] }) } })); vi.mock("../api/assets", () => ({ assetsApi: { uploadImage: vi.fn() } })); vi.mock("../api/instanceSettings", () => ({ instanceSettingsApi: { getExperimental: vi.fn().mockResolvedValue({}) } })); vi.mock("../context/DialogContext", () => ({ useDialog: () => ({ newProjectOpen: true, closeNewProject: vi.fn() }), })); vi.mock("../context/CompanyContext", () => ({ useCompany: () => ({ selectedCompanyId: "company-1", selectedCompany: { id: "company-1", name: "Paperclip" }, }), })); vi.mock("./MarkdownEditor", () => ({ MarkdownEditor: () =>
, })); let container: HTMLDivElement; let root: Root; beforeEach(() => { container = document.createElement("div"); document.body.appendChild(container); root = createRoot(container); }); afterEach(() => { act(() => root.unmount()); container.remove(); document.body.innerHTML = ""; vi.clearAllMocks(); }); /** Pass `null` for `experimentalSettings` to render with the policy unresolved. */ function render(experimentalSettings: Record