import '@testing-library/jest-dom' import { vi } from 'vitest' // Mock Next.js router vi.mock('next/router', () => ({ useRouter: () => ({ push: vi.fn(), pathname: '/', query: {}, asPath: '/', }), })) // Mock Next.js navigation vi.mock('next/navigation', () => ({ useRouter: () => ({ push: vi.fn(), replace: vi.fn(), back: vi.fn(), forward: vi.fn(), refresh: vi.fn(), prefetch: vi.fn(), }), usePathname: () => '/', useSearchParams: () => new URLSearchParams(), })) // Mock NextAuth vi.mock('next-auth/react', () => ({ useSession: () => ({ data: { user: { id: 'test-user-id', name: 'Test User', email: 'test@example.com', role: 'SHOP_ADMIN', }, }, status: 'authenticated', }), signIn: vi.fn(), signOut: vi.fn(), getSession: vi.fn(), })) // Mock React Query vi.mock('@tanstack/react-query', () => ({ useQuery: vi.fn(() => ({ data: null, isLoading: false, error: null, })), useMutation: vi.fn(() => ({ mutate: vi.fn(), mutateAsync: vi.fn(), isPending: false, isError: false, error: null, })), useQueryClient: vi.fn(() => ({ invalidateQueries: vi.fn(), setQueryData: vi.fn(), getQueryData: vi.fn(), })), QueryClient: vi.fn(), QueryClientProvider: ({ children }: { children: React.ReactNode }) => children, })) // Mock fetch globally global.fetch = vi.fn() // Mock crypto.randomUUID Object.defineProperty(global, 'crypto', { value: { randomUUID: () => 'test-uuid-' + Math.random().toString(36).substr(2, 9), }, }) // Mock window.matchMedia Object.defineProperty(window, 'matchMedia', { writable: true, value: vi.fn().mockImplementation(query => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), // deprecated removeListener: vi.fn(), // deprecated addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn(), })), }) // Mock IntersectionObserver global.IntersectionObserver = vi.fn().mockImplementation(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn(), })) // Mock ResizeObserver global.ResizeObserver = vi.fn().mockImplementation(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn(), }))