import '@testing-library/jest-dom' // Mock Next.js router jest.mock('next/router', () => ({ useRouter() { return { route: '/', pathname: '/', query: '', asPath: '', push: jest.fn(), pop: jest.fn(), reload: jest.fn(), back: jest.fn(), prefetch: jest.fn().mockResolvedValue(undefined), beforePopState: jest.fn(), events: { on: jest.fn(), off: jest.fn(), emit: jest.fn(), }, } }, })) // Mock Next.js navigation jest.mock('next/navigation', () => ({ useRouter() { return { push: jest.fn(), replace: jest.fn(), prefetch: jest.fn(), back: jest.fn(), forward: jest.fn(), refresh: jest.fn(), } }, useSearchParams() { return new URLSearchParams() }, usePathname() { return '/' }, })) // Mock IntersectionObserver global.IntersectionObserver = jest.fn().mockImplementation(() => ({ observe: jest.fn(), unobserve: jest.fn(), disconnect: jest.fn(), })) // Mock ResizeObserver global.ResizeObserver = jest.fn().mockImplementation(() => ({ observe: jest.fn(), unobserve: jest.fn(), disconnect: jest.fn(), })) // Mock WebSocket global.WebSocket = jest.fn().mockImplementation(() => ({ addEventListener: jest.fn(), removeEventListener: jest.fn(), send: jest.fn(), close: jest.fn(), readyState: 1, CONNECTING: 0, OPEN: 1, CLOSING: 2, CLOSED: 3, })) // Mock fetch global.fetch = jest.fn() // Mock localStorage const localStorageMock = { getItem: jest.fn(), setItem: jest.fn(), removeItem: jest.fn(), clear: jest.fn(), } global.localStorage = localStorageMock // Mock sessionStorage const sessionStorageMock = { getItem: jest.fn(), setItem: jest.fn(), removeItem: jest.fn(), clear: jest.fn(), } global.sessionStorage = sessionStorageMock