import "@testing-library/jest-dom"; import { Request, Response, Headers } from "node-fetch"; // Mock matchMedia Object.defineProperty(window, "matchMedia", { writable: true, value: jest.fn().mockImplementation((query) => ({ matches: false, media: query, onchange: null, addListener: jest.fn(), removeListener: jest.fn(), addEventListener: jest.fn(), removeEventListener: jest.fn(), dispatchEvent: jest.fn(), })), }); // Mock IntersectionObserver class MockIntersectionObserver { observe = jest.fn(); unobserve = jest.fn(); disconnect = jest.fn(); } Object.defineProperty(window, "IntersectionObserver", { writable: true, configurable: true, value: MockIntersectionObserver, }); // Polyfill Headers/Request/Response if (!global.Headers) { // @ts-ignore global.Headers = Headers; } if (!global.Request) { // @ts-ignore global.Request = Request; } if (!global.Response) { // @ts-ignore global.Response = Response; } // Mock NextResponse jest.mock('next/server', () => { const actual = jest.requireActual('next/server'); return { ...actual, NextResponse: { json: (data: any, init?: any) => { const res = new Response(JSON.stringify(data), init); res.headers.set('Content-Type', 'application/json'); return res; }, next: () => ({ headers: new Headers() }), redirect: (url: string) => ({ headers: new Headers(), status: 302 }), }, }; }); // Env vars for tests process.env.DIRECTUS_URL = "http://localhost:8055"; process.env.DIRECTUS_TOKEN = "test-token"; process.env.NEXT_PUBLIC_SITE_URL = "http://localhost:3000";