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";