import { ReactElement } from 'react' import { render, RenderOptions } from '@testing-library/react' import { QueryClient, QueryClientProvider } from '@tanstack/react-query' import { BrowserRouter } from 'react-router-dom' import { vi } from 'vitest' /** * Creates a fresh QueryClient for testing with retry disabled */ export function createTestQueryClient() { return new QueryClient({ defaultOptions: { queries: { retry: false, gcTime: 0, }, mutations: { retry: false, }, }, }) } interface WrapperProps { children: React.ReactNode } /** * Custom render function that wraps components with necessary providers */ export function renderWithProviders( ui: ReactElement, options?: Omit & { queryClient?: QueryClient route?: string } ) { const { queryClient = createTestQueryClient(), route = '/', ...renderOptions } = options || {} // Set the route window.history.pushState({}, 'Test page', route) function Wrapper({ children }: WrapperProps) { return ( {children} ) } return { ...render(ui, { wrapper: Wrapper, ...renderOptions }), queryClient, } } /** * Mock snackbar context for testing */ export const mockSnackbar = { showError: vi.fn(), showSuccess: vi.fn(), showWarning: vi.fn(), showInfo: vi.fn(), } /** * Mock WebSocket context for testing */ export const mockWebSocketContext = { isConnected: true, lastMessage: null, messageHistory: [], sendMessage: vi.fn(), subscribe: vi.fn(), } // Re-export everything from testing-library export * from '@testing-library/react' export { default as userEvent } from '@testing-library/user-event'