// @vitest-environment jsdom import { flushSync } from "react-dom"; import { createRoot, type Root } from "react-dom/client"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { ClassicWorkspaceSetting } from "./ClassicWorkspaceSetting"; const mocks = vi.hoisted(() => ({ setEnabled: vi.fn(), enabled: false, })); vi.mock("@/context/CompanyContext", () => ({ useCompany: () => ({ selectedCompany: { id: "company" } }) })); vi.mock("@/hooks/useCoordinatorWorkspaceEnabled", () => ({ useCoordinatorWorkspaceEnabled: () => ({ enabled: mocks.enabled, loaded: true, userId: "person", error: null, isSaving: false, setEnabled: mocks.setEnabled, }) })); describe("Classic workspace preference", () => { let container: HTMLDivElement, root: Root; beforeEach(() => { vi.clearAllMocks(); mocks.enabled = false; mocks.setEnabled.mockResolvedValue(undefined); container = document.createElement("div"); document.body.append(container); root = createRoot(container); }); afterEach(() => { flushSync(() => root.unmount()); container.remove(); }); it.each([false, true])("changes only the personal workspace (enabled: %s)", enabled => { mocks.enabled = enabled; flushSync(() => root.render()); expect(container.querySelector("h3")?.textContent).toBe("Classic workspace"); expect(container.textContent).toContain("Off by default"); expect(container.querySelector('[role="switch"]')?.getAttribute("aria-checked")).toBe(String(!enabled)); expect(container.querySelector("a")).toBeNull(); flushSync(() => container.querySelector('[role="switch"]')!.click()); expect(mocks.setEnabled).toHaveBeenCalledWith("company", !enabled); }); });