import React from "react"; import { render, TestWrapper, wait } from "@test"; import { CanAccess } from "."; describe("CanAccess Component", () => { it("should render children", async () => { const { container, getByText } = render( Accessible , { wrapper: TestWrapper({ accessControlProvider: { can: ({ resource, action }) => { if (action === "access" && resource === "posts") { return Promise.resolve({ can: true }); } return Promise.resolve({ can: false }); }, }, }), }, ); expect(container).toBeTruthy(); await wait(() => getByText("Accessible")); }); it("should not render children", async () => { const { container, queryByText } = render( Accessible , { wrapper: TestWrapper({ accessControlProvider: { can: () => Promise.resolve({ can: false }), }, }), }, ); expect(container).toBeTruthy(); await wait(() => expect(queryByText("Accessible")).not.toBeInTheDocument(), ); }); it("should successfully pass the own attirbute to its children", async () => { const { container, getByText } = render(

Accessible

, { wrapper: TestWrapper({ accessControlProvider: { can: () => Promise.resolve({ can: true }), }, }), }, ); expect(container).toBeTruthy(); await wait(() => expect( getByText("Accessible").closest("p")?.getAttribute("data-id"), ).toBe("refine"), ); }); it("should fallback successfully render when not accessible", async () => { const { container, queryByText, getByText } = render( Access Denied

} >

Accessible

, { wrapper: TestWrapper({ accessControlProvider: { can: () => Promise.resolve({ can: false }), }, }), }, ); expect(container).toBeTruthy(); await wait(() => expect(queryByText("Accessible")).not.toBeInTheDocument(), ); await wait(() => getByText("Access Denied")); }); });