import React, { type ReactNode } from "react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { AccessControlContextProvider } from "@contexts/accessControl"; import { AuditLogContextProvider } from "@contexts/auditLog"; import { AuthBindingsContextProvider, LegacyAuthContextProvider, } from "@contexts/auth"; import { DataContextProvider } from "@contexts/data"; import { I18nContextProvider } from "@contexts/i18n"; import { LiveContextProvider } from "@contexts/live"; import { NotificationContextProvider } from "@contexts/notification"; import { RefineContextProvider } from "@contexts/refine"; import type { IRefineContextProvider } from "@contexts/refine/types"; import { ResourceContextProvider } from "@contexts/resource"; import { RouterContextProvider } from "@contexts/router"; import { LegacyRouterContextProvider } from "@contexts/router/legacy"; import { RouterPickerProvider } from "@contexts/router/picker"; import { UndoableQueueContextProvider } from "@contexts/undoableQueue"; import type { AccessControlProvider } from "../src/contexts/accessControl/types"; import type { AuditLogProvider } from "../src/contexts/auditLog/types"; import type { AuthProvider, ILegacyAuthContext, } from "../src/contexts/auth/types"; import type { DataProvider, DataProviders } from "../src/contexts/data/types"; import type { I18nProvider } from "../src/contexts/i18n/types"; import type { LiveProvider } from "../src/contexts/live/types"; import type { NotificationProvider } from "../src/contexts/notification/types"; import type { IResourceItem } from "../src/contexts/resource/types"; import type { LegacyRouterProvider } from "../src/contexts/router/legacy/types"; import type { RouterProvider } from "../src/contexts/router/types"; export const queryClient = new QueryClient({ logger: { log: console.log, warn: console.warn, // ✅ no more errors on the console error: () => { return {}; }, }, defaultOptions: { queries: { cacheTime: 0, retry: 0, }, }, }); beforeEach(() => { queryClient.clear(); }); export interface ITestWrapperProps { legacyAuthProvider?: ILegacyAuthContext; authProvider?: AuthProvider; dataProvider?: DataProvider | DataProviders; i18nProvider?: I18nProvider; notificationProvider?: NotificationProvider; accessControlProvider?: Partial; liveProvider?: LiveProvider; resources?: IResourceItem[]; children?: React.ReactNode; legacyRouterProvider?: LegacyRouterProvider; routerProvider?: RouterProvider; refineProvider?: IRefineContextProvider; auditLogProvider?: Partial; } export const TestWrapper: ( props: ITestWrapperProps, ) => React.FC<{ children: ReactNode }> = ({ legacyAuthProvider, authProvider, dataProvider, resources, i18nProvider, notificationProvider, accessControlProvider, legacyRouterProvider, routerProvider, refineProvider, liveProvider, auditLogProvider, }) => { return ({ children }): React.ReactElement => { const withRouterPicker = ( {children} ); const withLegacyRouter = legacyRouterProvider ? ( {withRouterPicker} ) : ( withRouterPicker ); const withRouter = routerProvider ? ( {withLegacyRouter} ) : ( withLegacyRouter ); const withResource = resources ? ( ({ ...r, options: { ...r.options, route: r.options?.route ?? r.route, }, }))} > {withRouter} ) : ( withRouter ); const withData = dataProvider ? ( {withResource} ) : ( withResource ); const withNotificationProvider = notificationProvider ? ( {withData} ) : ( withData ); const withAccessControl = accessControlProvider ? ( {withNotificationProvider} ) : ( withNotificationProvider ); const withAuditLogProvider = auditLogProvider ? ( {withAccessControl} ) : ( withAccessControl ); const withLive = liveProvider ? ( {withAuditLogProvider} ) : ( withAuditLogProvider ); const withTranslation = i18nProvider ? ( {withLive} ) : ( withLive ); const withNotification = ( {withTranslation} ); const withLegacyAuth = legacyAuthProvider ? ( {withNotification} ) : ( withNotification ); const withAuth = authProvider ? ( {withLegacyAuth} ) : ( withLegacyAuth ); const withRefine = refineProvider ? ( {withAuth} ) : ( withAuth ); return ( {withRefine} ); }; }; export { MockJSONServer, mockLegacyRouterProvider, mockRouterProvider, MockAccessControlProvider, MockLiveProvider, mockLegacyAuthProvider, mockAuthProvider, } from "./dataMocks"; // re-export everything export * from "@testing-library/react";