/** * Test utilities and wrapper components. */ import React from 'react'; import { render } from '@testing-library/react'; import type { RenderOptions } from '@testing-library/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { BrowserRouter } from 'react-router-dom'; import { ThemeProvider } from '../contexts/ThemeContext'; import { ToastProvider } from '../contexts/ToastContext'; import { AuthProvider } from '../contexts/AuthContext'; // Create a new QueryClient for each test function createTestQueryClient() { return new QueryClient({ defaultOptions: { queries: { retry: false, gcTime: 0, }, mutations: { retry: false, }, }, }); } interface AllProvidersProps { children: React.ReactNode; } function AllProviders({ children }: AllProvidersProps) { const queryClient = createTestQueryClient(); return ( {children} ); } /** * Custom render function that wraps components with all providers. */ function customRender( ui: React.ReactElement, options?: Omit ) { return render(ui, { wrapper: AllProviders, ...options }); } // Re-export everything from testing-library export * from '@testing-library/react'; // Override render with our custom render export { customRender as render }; /** * Create a test QueryClient with custom configuration. */ export { createTestQueryClient }; /** * Helper to wait for async operations. */ export const waitForAsync = () => new Promise((resolve) => setTimeout(resolve, 0));