fork refine

This commit is contained in:
Stefan Pejcic
2024-02-05 10:23:04 +01:00
parent 3fffde9a8f
commit 8496a83edb
3634 changed files with 715528 additions and 2 deletions

View File

@@ -0,0 +1,181 @@
import React from "react";
import {
ParsedParams,
IResourceItem,
Action,
RouterBindings,
AuthProvider,
LegacyAuthProvider,
} from "@refinedev/core";
import { IRouterContext } from "@refinedev/core/dist/interfaces";
import { useParams, useLocation, Link, useNavigate } from "react-router-dom";
/* import {
IDataContext,
IRouterContext,
IAccessControlContext,
ILiveContext,
} from "@refinedev/core"; */
export const posts = [
{
id: "1",
title: "Necessitatibus necessitatibus id et cupiditate provident est qui amet.",
slug: "ut-ad-et",
content:
"Cupiditate labore quaerat cum incidunt vel et consequatur modi illo. Et maxime aut commodi occaecati omnis. Est voluptatem quibusdam aliquam. Esse tenetur omnis eaque. Consequatur necessitatibus illum ipsum aspernatur architecto qui. Ut temporibus qui nobis. Reiciendis est magnam ipsa quasi dolor ipsa error. Et eaque cumque est. Eos et odit corporis delectus aut corrupti tempora velit. Perferendis ratione voluptas corrupti id temporibus nam.",
categoryId: 1,
status: "active",
userId: 5,
tags: [16, 31, 45],
},
{
id: "2",
title: "Recusandae consectetur aut atque est.",
slug: "consequatur-molestiae-rerum",
content:
"Quia ut autem. Hic dolorum magni est quisquam. Modi est id et est. Est sapiente velit iure non voluptatem natus enim. Distinctio ipsa repellendus est. Sunt ipsam dignissimos vero error est cumque eaque. Consequatur voluptas suscipit optio incidunt doloremque quia harum harum. Totam voluptatibus aperiam quia. Est omnis deleniti et aut at fugit temporibus debitis modi. Magni aut vel quod magnam.",
categoryId: 38,
status: "active",
userId: 36,
tags: [16, 30, 46],
},
];
const MockDataProvider = () => {
return {
create: () => Promise.resolve({ data: posts[0] }),
createMany: () => Promise.resolve({ data: posts }),
deleteOne: () => Promise.resolve({ data: posts[0] }),
deleteMany: () => Promise.resolve({ data: [] }),
getList: () => Promise.resolve({ data: posts, total: 2 }),
getMany: () => Promise.resolve({ data: [...posts] }),
getOne: () => Promise.resolve({ data: posts[0] }),
update: () => Promise.resolve({ data: posts[0] }),
updateMany: () => Promise.resolve({ data: [] }),
getApiUrl: () => "https://api.fake-rest.refine.dev",
custom: () => Promise.resolve({ data: [...posts] }),
};
};
export const MockJSONServer = MockDataProvider() as any;
export const MockRouterProvider = {
useHistory: () => {
const navigate = useNavigate();
return {
push: navigate,
replace: (path: string) => {
navigate(path, { replace: true });
},
goBack: () => {
navigate(-1);
},
};
},
useLocation,
useParams: () => {
const params = useParams();
return params as any;
},
Link,
Prompt: () => null,
};
export const MockAccessControlProvider: any = {
can: () => Promise.resolve({ can: true }),
};
export const MockLiveProvider: any = {
subscribe: () => ({}),
unsubscribe: () => ({}),
publish: () => ({}),
};
export const mockLegacyAuthProvider: LegacyAuthProvider = {
login: () => Promise.resolve(),
logout: () => Promise.resolve(),
checkError: () => Promise.resolve(),
checkAuth: () => Promise.resolve(),
getPermissions: () => Promise.resolve(["admin"]),
getUserIdentity: () =>
Promise.resolve({ name: "John Doe", avatar: "localhost:3000" }),
};
export const mockAuthProvider: AuthProvider = {
login: async () => ({ success: true }),
check: async () => ({ authenticated: true }),
onError: async () => ({}),
logout: async () => ({ success: true }),
updatePassword: jest.fn().mockResolvedValue({ success: true }),
forgotPassword: jest.fn().mockResolvedValue({ success: true }),
register: jest.fn().mockResolvedValue({ success: true }),
};
export const mockRouterBindings = ({
pathname,
params,
resource,
action,
id,
fns,
}: {
pathname?: string;
params?: ParsedParams;
resource?: IResourceItem;
action?: Action;
id?: string;
fns?: Partial<RouterBindings>;
} = {}): RouterBindings => {
const bindings: RouterBindings = {
go: () => {
return ({ type }) => {
if (type === "path") return "";
return undefined;
};
},
parse: () => {
return () => {
return {
params: {
...params,
},
pathname,
resource: resource,
action: action,
id: id || undefined,
};
};
},
back: () => {
return () => undefined;
},
Link: ({ to, children, ...props }) => (
<a href={to} {...props}>
{children}
</a>
),
...fns,
};
return bindings;
};
export const mockLegacyRouterProvider = () => {
const provider: IRouterContext = {
useHistory: () => {
return {
push: () => undefined,
replace: () => undefined,
goBack: () => undefined,
};
},
useLocation: () => ({} as any),
useParams: () => ({} as any),
Link: () => null,
Prompt: () => null,
};
return provider;
};

View File

@@ -0,0 +1,112 @@
import React from "react";
import { BrowserRouter } from "react-router-dom";
import { AuthProvider, Refine } from "@refinedev/core";
import { MockRouterProvider, MockJSONServer } from "@test";
import {
I18nProvider,
AccessControlProvider,
LegacyAuthProvider,
DataProvider,
NotificationProvider,
IResourceItem,
RouterBindings,
IRouterProvider,
} from "@refinedev/core";
import { IRouterContext } from "@refinedev/core/dist/interfaces";
/* interface ITestWrapperProps {
authProvider?: IAuthContext;
dataProvider?: IDataContext;
i18nProvider?: I18nProvider;
accessControlProvider?: IAccessControlContext;
liveProvider?: ILiveContext;
resources?: IResourceItem[];
children?: React.ReactNode;
routerInitialEntries?: string[];
refineProvider?: IRefineContextProvider;
} */
const List = () => {
return <div>hede</div>;
};
export interface ITestWrapperProps {
dataProvider?: DataProvider;
legacyAuthProvider?: LegacyAuthProvider;
authProvider?: AuthProvider;
resources?: IResourceItem[];
notificationProvider?: NotificationProvider;
accessControlProvider?: AccessControlProvider;
i18nProvider?: I18nProvider;
legacyRouterProvider?: IRouterContext;
routerProvider?: RouterBindings;
routerInitialEntries?: string[];
DashboardPage?: React.FC;
}
export const TestWrapper: (props: ITestWrapperProps) => React.FC = ({
dataProvider,
legacyAuthProvider,
authProvider,
resources,
notificationProvider,
accessControlProvider,
routerInitialEntries,
DashboardPage,
i18nProvider,
routerProvider,
legacyRouterProvider,
}) => {
// Previously, MemoryRouter was used in this wrapper. However, the
// recommendation by react-router developers (see
// https://github.com/remix-run/react-router/discussions/8241#discussioncomment-159686)
// is essentially to use the same router as your actual application. Besides
// that, it's impossible to check for location changes with MemoryRouter if
// needed.
if (routerInitialEntries) {
routerInitialEntries.forEach((route) => {
window.history.replaceState({}, "", route);
});
}
// eslint-disable-next-line react/display-name
return ({ children }: React.PropsWithChildren<{}>): React.ReactElement => {
return (
<BrowserRouter>
<Refine
options={{
disableTelemetry: true,
}}
dataProvider={dataProvider ?? MockJSONServer}
i18nProvider={i18nProvider}
routerProvider={routerProvider}
legacyRouterProvider={
legacyRouterProvider ?? MockRouterProvider
}
legacyAuthProvider={legacyAuthProvider}
authProvider={authProvider}
notificationProvider={notificationProvider}
resources={resources ?? [{ name: "posts", list: List }]}
accessControlProvider={accessControlProvider}
DashboardPage={DashboardPage ?? undefined}
>
{children}
</Refine>
</BrowserRouter>
);
};
};
export {
MockJSONServer,
MockRouterProvider,
MockAccessControlProvider,
MockLiveProvider,
mockRouterBindings,
mockAuthProvider,
mockLegacyAuthProvider,
mockLegacyRouterProvider,
} from "./dataMocks";
// re-export everything
export * from "@testing-library/react";

View File

@@ -0,0 +1,16 @@
import "@testing-library/jest-dom";
import "@testing-library/jest-dom/extend-expect";
/** Antd mocks */
window.matchMedia = jest.fn().mockImplementation((query) => {
return {
matches: false,
media: query,
onchange: null,
addListener: jest.fn(),
removeListener: jest.fn(),
};
});
window.scroll = jest.fn();
window.alert = jest.fn();

View File

@@ -0,0 +1,8 @@
module.exports = {
process() {
return "module.exports = {};";
},
getCacheKey() {
return "svgTransform";
},
};