import React from "react"; import { QueryClient, QueryClientProvider } from "react-query"; import { MemoryRouter } from "react-router-dom"; import { AuthContextProvider } from "@contexts/auth"; import { NotificationContextProvider } from "@contexts/notification"; import { DataContextProvider } from "@contexts/data"; import { ResourceContextProvider, IResourceItem } from "@contexts/resource"; import { IDataContext, IAuthContext, I18nProvider, IAccessControlContext, ILiveContext, } from "../src/interfaces"; import { TranslationContextProvider } from "@contexts/translation"; import { RefineContextProvider } from "@contexts/refine"; import { IRefineContextProvider } from "@contexts/refine/IRefineContext"; import { RouterContextProvider } from "@contexts/router"; import { AccessControlContextProvider } from "@contexts/accessControl"; import { LiveContextProvider } from "@contexts/live"; import { MockRouterProvider, MockAccessControlProvider, MockLiveProvider, } from "@test"; const queryClient = new QueryClient({ defaultOptions: { queries: { cacheTime: 0, retry: 0, }, }, }); interface ITestWrapperProps { authProvider?: IAuthContext; dataProvider?: IDataContext; i18nProvider?: I18nProvider; accessControlProvider?: IAccessControlContext; liveProvider?: ILiveContext; resources?: IResourceItem[]; children?: React.ReactNode; routerInitialEntries?: string[]; refineProvider?: IRefineContextProvider; } export const TestWrapper: (props: ITestWrapperProps) => React.FC = ({ authProvider, dataProvider, resources, i18nProvider, accessControlProvider, routerInitialEntries, refineProvider, liveProvider, }) => { // eslint-disable-next-line react/display-name return ({ children }): React.ReactElement => { const withResource = resources ? ( {children} ) : ( children ); const withData = dataProvider ? ( {withResource} ) : ( withResource ); const withAccessControl = accessControlProvider ? ( {withData} ) : ( {withData} ); const withLive = liveProvider ? ( {withAccessControl} ) : ( {withAccessControl} ); const withTranslation = i18nProvider ? ( {withLive} ) : ( withLive ); const withNotification = ( {withTranslation} ); const withAuth = authProvider ? ( {withNotification} ) : ( withNotification ); const withRefine = refineProvider ? ( {withAuth} ) : ( withAuth ); return ( {withRefine} ); }; }; export { MockJSONServer, MockRouterProvider, MockAccessControlProvider, MockLiveProvider, } from "./dataMocks"; // re-export everything export * from "@testing-library/react";