import { render, screen, fireEvent } from "@testing-library/react"; import { DrawerContent } from "./DrawerContent"; import { DrawerRoot } from "./DrawerRoot"; jest.mock("react-transition-group", () => { const MocCSSTransition = jest.fn(({ children, ...props }) => { if (props.in) { props.onEnter && props.onEnter(); return children; } else if (props.in === false) { props.onExit && props.onExit(); } return setTimeout(() => null, 0); }); return { CSSTransition: MocCSSTransition }; }); describe("DrawerContent", () => { const customRender = (ui, contextProps) => { return render({ui}); }; test("renders hidden into the document", () => { render(Drawer Content); expect(screen.queryByText("Drawer Content")).not.toBeInTheDocument(); }); test("uses the context open property to be visible", () => { customRender(Drawer Content, { open: true, }); expect(screen.getByText("Drawer Content")).toBeVisible(); }); test("uses the context defaultOpen property to be visible", () => { customRender(Drawer Content, { defaultOpen: true, }); expect(screen.getByText("Drawer Content")).toBeVisible(); }); test("uses the height property to add css", () => { customRender( Drawer Content , { defaultOpen: true, } ); expect(screen.getByTestId("drawer-content")).toHaveStyle("height: 100px;"); }); test("uses the width property to add css", () => { customRender( Drawer Content , { defaultOpen: true, } ); expect(screen.getByTestId("drawer-content")).toHaveStyle("width: 100px;"); }); test("adds a key listener to the document after open", () => { const spy = jest.spyOn(document, "addEventListener"); customRender(Drawer Content, { defaultOpen: true, }); expect(spy).toHaveBeenCalled(); }); test("removes a key listener from the document after close", async () => { const spy = jest.spyOn(document, "removeEventListener"); customRender(Drawer Content, { defaultOpen: true, }); fireEvent.keyDown(document, { key: "Escape", code: "Escape" }); expect(spy).toHaveBeenCalled(); }); test("closes with esc key", async () => { const handleChange = jest.fn(); customRender(Drawer Content, { defaultOpen: true, onOpenChange: handleChange, }); fireEvent.keyDown(document, { key: "Escape", code: "Escape" }); expect(handleChange).toHaveBeenCalledWith(false); }); });