// Test utilities for React components import React, { PropsWithChildren } from "react"; import { RenderOptions, render } from "@testing-library/react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { I18nextProvider, initReactI18next } from "react-i18next"; import i18n from "i18next"; import { vi } from "vitest"; import { AxiosError } from "axios"; // Mock useParams before importing components vi.mock("react-router", async () => { const actual = await vi.importActual("react-router"); return { ...actual, useParams: () => ({ conversationId: "test-conversation-id" }), }; }); // Initialize i18n for tests i18n.use(initReactI18next).init({ lng: "en", fallbackLng: "en", ns: ["translation"], defaultNS: "translation", resources: { en: { translation: {}, }, }, interpolation: { escapeValue: false, }, }); // This type interface extends the default options for render from RTL interface ExtendedRenderOptions extends Omit {} // Export our own customized renderWithProviders function that renders with QueryClient and i18next providers // Since we're using Zustand stores, we don't need a Redux Provider wrapper export function renderWithProviders( ui: React.ReactElement, renderOptions: ExtendedRenderOptions = {}, ) { function Wrapper({ children }: PropsWithChildren) { return ( {children} ); } return render(ui, { wrapper: Wrapper, ...renderOptions }); } export const createAxiosNotFoundErrorObject = () => new AxiosError( "Request failed with status code 404", "ERR_BAD_REQUEST", undefined, undefined, { status: 404, statusText: "Not Found", data: { message: "Settings not found" }, headers: {}, // @ts-expect-error - we only need the response object for this test config: {}, }, );