import "@testing-library/jest-dom"; import { beforeEach, vi } from "vitest"; // Mock fetch globally global.fetch = vi.fn(); // Mock localStorage const localStorageMock = { getItem: vi.fn(), setItem: vi.fn(), removeItem: vi.fn(), clear: vi.fn(), }; Object.defineProperty(window, "localStorage", { value: localStorageMock }); // Mock matchMedia Object.defineProperty(window, "matchMedia", { writable: true, value: vi.fn().mockImplementation((query) => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), removeListener: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn(), })), }); // Mock navigator.clipboard Object.defineProperty(navigator, "clipboard", { value: { writeText: vi.fn().mockResolvedValue(undefined), readText: vi.fn().mockResolvedValue(""), }, writable: true, }); // Mock URL.createObjectURL and URL.revokeObjectURL global.URL.createObjectURL = vi.fn().mockReturnValue("blob:test-url"); global.URL.revokeObjectURL = vi.fn(); // Mock window.history const mockHistoryPushState = vi.fn(); const mockHistoryBack = vi.fn(); Object.defineProperty(window, "history", { value: { pushState: mockHistoryPushState, back: mockHistoryBack, replaceState: vi.fn(), state: null, length: 1, scrollRestoration: "auto", go: vi.fn(), forward: vi.fn(), }, writable: true, }); // Mock react-i18next globally const mockT = (key: string, options?: Record) => { if (options?.count !== undefined) return `${key}_${options.count}`; if (options?.max !== undefined) return `Max ${options.max} chars`; if (options?.days !== undefined) return `${key} (${options.days} days)`; return key; }; const mockI18n = { language: "en", changeLanguage: vi.fn(), }; vi.mock("react-i18next", () => ({ useTranslation: () => ({ t: mockT, i18n: mockI18n, }), I18nextProvider: ({ children }: { children: React.ReactNode }) => children, initReactI18next: { type: "3rdParty", init: vi.fn() }, })); // Reset mocks before each test beforeEach(() => { vi.clearAllMocks(); localStorageMock.getItem.mockReturnValue(null); mockHistoryPushState.mockClear(); mockHistoryBack.mockClear(); });