import { afterAll, afterEach, beforeAll, vi } from "vitest"; import { cleanup } from "@testing-library/react"; import { server } from "#/mocks/node"; import "@testing-library/jest-dom/vitest"; HTMLCanvasElement.prototype.getContext = vi.fn(); HTMLElement.prototype.scrollTo = vi.fn(); window.scrollTo = vi.fn(); Object.defineProperty(window, "matchMedia", { writable: true, value: vi.fn().mockImplementation((query: string) => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), removeListener: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn(), })), }); const localStorageStore: Record = {}; vi.stubGlobal("localStorage", { getItem: (key: string) => localStorageStore[key] ?? null, setItem: (key: string, value: string) => { localStorageStore[key] = value; }, removeItem: (key: string) => { delete localStorageStore[key]; }, clear: () => { Object.keys(localStorageStore).forEach((k) => delete localStorageStore[k]); }, get length() { return Object.keys(localStorageStore).length; }, key: (index: number) => Object.keys(localStorageStore)[index] ?? null, }); // Mock ResizeObserver for test environment class MockResizeObserver { observe = vi.fn(); unobserve = vi.fn(); disconnect = vi.fn(); } // Mock the i18n provider vi.mock("react-i18next", async (importOriginal) => ({ ...(await importOriginal()), useTranslation: () => ({ t: (key: string) => key, i18n: { language: "en", exists: () => false, }, }), })); // Mock useRevalidator from react-router to allow direct store manipulation // in tests instead of mocking useSelectedOrganizationId hook vi.mock("react-router", async (importOriginal) => ({ ...(await importOriginal()), useRevalidator: () => ({ revalidate: vi.fn(), }), })); // Import the Zustand mock to enable automatic store resets vi.mock("zustand"); // Mock requests during tests beforeAll(() => { server.listen({ onUnhandledRequest: "bypass" }); vi.stubGlobal("ResizeObserver", MockResizeObserver); }); afterEach(() => { server.resetHandlers(); // Cleanup the document body after each test cleanup(); }); afterAll(() => { server.close(); vi.unstubAllGlobals(); });