import React, { ReactNode } from "react"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { AuthBindingsContextProvider, LegacyAuthContextProvider, } from "@contexts/auth"; import { UndoableQueueContextProvider } from "@contexts/undoableQueue"; import { DataContextProvider } from "@contexts/data"; import { ResourceContextProvider, IResourceItem } from "@contexts/resource"; import { ILegacyAuthContext, I18nProvider, IAccessControlContext, ILiveContext, INotificationContext, IDataMultipleContextProvider, IDataContextProvider, IAuditLogContext, RouterBindings, IRouterContext, AuthProvider, } from "../src/interfaces"; import { TranslationContextProvider } from "@contexts/translation"; import { RefineContextProvider } from "@contexts/refine"; import { IRefineContextProvider } from "@contexts/refine/IRefineContext"; import { LegacyRouterContextProvider } from "@contexts/legacy-router"; import { AccessControlContextProvider } from "@contexts/accessControl"; import { LiveContextProvider } from "@contexts/live"; import { NotificationContextProvider } from "@contexts/notification"; import { AuditLogContextProvider } from "@contexts/auditLog"; import { RouterBindingsProvider } from "@contexts/router"; import { RouterPickerProvider } from "@contexts/router-picker"; 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?: IDataContextProvider | IDataMultipleContextProvider; i18nProvider?: I18nProvider; notificationProvider?: INotificationContext; accessControlProvider?: IAccessControlContext; liveProvider?: ILiveContext; resources?: IResourceItem[]; children?: React.ReactNode; legacyRouterProvider?: IRouterContext; routerProvider?: RouterBindings; refineProvider?: IRefineContextProvider; auditLogProvider?: IAuditLogContext; } export const TestWrapper: ( props: ITestWrapperProps, ) => React.FC<{ children: ReactNode }> = ({ legacyAuthProvider, authProvider, dataProvider, resources, i18nProvider, notificationProvider, accessControlProvider, legacyRouterProvider, routerProvider, refineProvider, liveProvider, auditLogProvider, }) => { // eslint-disable-next-line react/display-name return ({ children }): React.ReactElement => { const withRouterPicker = ( {children} ); const withLegacyRouter = legacyRouterProvider ? ( {withRouterPicker} ) : ( withRouterPicker ); const withRouterBindings = routerProvider ? ( {withLegacyRouter} ) : ( withLegacyRouter ); const withResource = resources ? ( ({ ...r, options: { ...r.options, route: r.options?.route ?? r.route, }, }))} > {withRouterBindings} ) : ( withRouterBindings ); const withData = dataProvider ? ( {withResource} ) : ( withResource ); const withNotificationProvider = notificationProvider ? ( {withData} ) : ( withData ); const withAccessControl = accessControlProvider ? ( {withNotificationProvider} ) : ( withNotificationProvider ); const withAuidtLogProvider = auditLogProvider ? ( {withAccessControl} ) : ( withAccessControl ); const withLive = liveProvider ? ( {withAuidtLogProvider} ) : ( withAuidtLogProvider ); 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, mockRouterBindings, MockAccessControlProvider, MockLiveProvider, mockLegacyAuthProvider, mockAuthProvider, } from "./dataMocks"; // re-export everything export * from "@testing-library/react";