import React, { ReactNode } from "react";
import { Route } from "react-router-dom";
import { Table } from "antd";
import { render, TestWrapper, MockJSONServer, wait } from "@test";
import { List } from "./index";
import { IAccessControlContext } from "../../../interfaces";
const renderList = (
list: ReactNode,
accessControlProvider?: IAccessControlContext,
) => {
return render({list}, {
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [{ name: "posts", route: "posts" }],
routerInitialEntries: ["/posts"],
accessControlProvider,
}),
});
};
describe("
", () => {
describe("JSON Rest Server", () => {
it("mounts with table", async () => {
const { getByText } = renderList(
,
);
getByText("No Data");
});
it("renders given data", async () => {
const { container } = renderList(
,
);
expect(container).toMatchSnapshot();
});
it("should render optional title with title prop", async () => {
const { getByText } = renderList(
);
getByText("New Title");
});
it("should render with label instead of resource name successfully", () => {
const { getByText } = render(
,
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [
{ name: "posts", route: "posts", label: "test" },
],
routerInitialEntries: ["/posts"],
}),
},
);
getByText("Tests");
});
describe("render create button", () => {
it("should create edit button", () => {
const { getByText, queryByTestId } = render(
,
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [
{
name: "posts",
route: "posts",
canCreate: true,
},
],
routerInitialEntries: ["/posts"],
}),
},
);
expect(queryByTestId("list-create-button")).not.toBeNull();
getByText("Posts");
});
it("should not render create button on resource canCreate false", () => {
const { getByText, queryByTestId } = render(
,
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [
{
name: "posts",
route: "posts",
canCreate: false,
},
],
routerInitialEntries: ["/posts"],
}),
},
);
expect(queryByTestId("list-create-button")).toBeNull();
getByText("Posts");
});
it("should render create button on resource canCreate false & createButtonProps props not null on component", () => {
const { getByText, queryByTestId } = render(
,
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [
{
name: "posts",
route: "posts",
},
],
routerInitialEntries: ["/posts"],
}),
},
);
expect(queryByTestId("list-create-button")).not.toBeNull();
getByText("Posts");
});
it("should render create button on resource canCreate true & createButtonProps props not null on component", () => {
const { getByText, queryByTestId } = render(
,
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [
{
name: "posts",
route: "posts",
canCreate: true,
},
],
routerInitialEntries: ["/posts"],
}),
},
);
expect(queryByTestId("list-create-button")).not.toBeNull();
getByText("Posts");
});
it("should not render create button on resource canCreate true & canCreate props false on component", () => {
const { queryByTestId } = render(
,
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [
{
name: "posts",
route: "posts",
canCreate: true,
},
],
routerInitialEntries: ["/posts"],
}),
},
);
expect(queryByTestId("list-create-button")).toBeNull();
});
it("should render create button on resource canCreate false & canCreate props true on component", () => {
const { queryByTestId } = render(
,
{
wrapper: TestWrapper({
dataProvider: MockJSONServer,
resources: [
{
name: "posts",
route: "posts",
canCreate: false,
},
],
routerInitialEntries: ["/posts"],
}),
},
);
expect(queryByTestId("list-create-button")).not.toBeNull();
});
it("should render disabled create button if user doesn't have permission", async () => {
const { queryByTestId } = renderList(
,
{
can: ({ action }) => {
switch (action) {
case "create":
return Promise.resolve({ can: false });
default:
return Promise.resolve({ can: false });
}
},
},
);
await wait(() =>
expect(queryByTestId("list-create-button")).toBeDisabled(),
);
});
});
});
});