import { useContext, useState } from "react";
import { render, screen } from "@testing-library/react";
import { userEvent } from "@testing-library/user-event";
import { DrawerRoot, DrawerContext } from "./DrawerRoot";
describe("DrawerRoot", () => {
const TestComponent = () => {
const { contentId, open, defaultOpen, zIndex, onOpenChange } =
useContext(DrawerContext);
return (
Drawer Sub-Component
{open && open}
{defaultOpen && default open}
);
};
test("children render visibly into the document", () => {
render(Test);
expect(screen.getByText("Test")).toBeVisible();
});
test("context passes id", () => {
render(
);
expect(screen.getByText("Drawer Sub-Component")).toHaveAttribute(
"id",
"test-id"
);
});
test("context passes open prop", () => {
render(
);
expect(screen.getByText("open")).toBeVisible();
});
test("context passes defaultOpen prop", () => {
render(
);
expect(screen.getByText("default open")).toBeVisible();
});
test("context passes zIndex prop", () => {
render(
);
expect(screen.getByText("Drawer Sub-Component")).toHaveStyle("zIndex: 2");
});
test("context sets open change callback and gets called", async () => {
const user = userEvent.setup();
const handleChange = jest.fn();
render(
);
await user.click(screen.getByRole("button"));
expect(handleChange).toHaveBeenCalled();
});
const App = ({ handleChange }) => {
const [open] = useState(false);
return (
);
};
test("context uses controlled open property", async () => {
const user = userEvent.setup();
const handleChange = jest.fn();
render();
await user.click(screen.getByRole("button"));
expect(handleChange).toHaveBeenCalled();
});
});