import React from "react"; import { wait } from "@testing-library/react"; import ReactRouterDom from "react-router-dom"; import { MockJSONServer, render, TestWrapper } from "@test"; import { Authenticated } from "./"; const mockAuthProvider = { login: () => Promise.resolve(), logout: () => Promise.resolve(), checkError: () => Promise.resolve(), checkAuth: () => Promise.resolve(), getPermissions: () => Promise.resolve(["admin"]), getUserIdentity: () => Promise.resolve(), }; const mHistory = { push: jest.fn(), replace: jest.fn(), goBack: jest.fn(), }; jest.mock("react-router-dom", () => ({ ...(jest.requireActual("react-router-dom") as typeof ReactRouterDom), useHistory: jest.fn(() => mHistory), })); describe("Authenticated", () => { it("should render children successfully", async () => { const { getByText } = render( Custom Authenticated, { wrapper: TestWrapper({ dataProvider: MockJSONServer, authProvider: mockAuthProvider, resources: [{ name: "posts", route: "posts" }], }), }, ); await wait(() => getByText("Custom Authenticated")); }); it("not authenticated test", async () => { mockAuthProvider.checkAuth = jest .fn() .mockImplementation(() => Promise.reject()); const { queryByText } = render( Custom Authenticated, { wrapper: TestWrapper({ dataProvider: MockJSONServer, authProvider: mockAuthProvider, resources: [{ name: "posts", route: "posts" }], }), }, ); await wait(() => { expect(queryByText("Custom Authenticated")).toBeNull(); expect(mHistory.replace).toBeCalledTimes(1); }); }); it("not authenticated fallback component test", async () => { mockAuthProvider.checkAuth = jest .fn() .mockImplementation(() => Promise.reject()); const { queryByText } = render( Error fallback}> Custom Authenticated , { wrapper: TestWrapper({ dataProvider: MockJSONServer, authProvider: mockAuthProvider, resources: [{ name: "posts", route: "posts" }], }), }, ); await wait(() => { expect(queryByText("Error fallback")); }); }); it("loading test", async () => { mockAuthProvider.checkAuth = jest .fn() .mockImplementation(() => Promise.reject()); const { queryByText } = render( loading}> Custom Authenticated , { wrapper: TestWrapper({ dataProvider: MockJSONServer, authProvider: mockAuthProvider, resources: [{ name: "posts", route: "posts" }], }), }, ); await wait(() => { expect(queryByText("loading")); }); }); });