import React, { useState } from "react";
import "@testing-library/jest-dom/extend-expect";
import {
render,
fireEvent,
waitForElementToBeRemoved
} from "@testing-library/react";
import SideBar from "../Sidebar";
import Button from "../Button";
import { css } from "emotion";
const wrapperStyle = css({
width: "100%",
height: 1000,
backgroundColor: "white"
});
function SidebarComponent({
closeOnOutsideClick
}: {
closeOnOutsideClick: boolean;
}) {
const [open, toggleSidebar] = useState(false);
return (
<>
toggleSidebar(false)}
width={400}
isOpen={open}
closeOnOutsideClick={closeOnOutsideClick}
>
Sidebar Content
>
);
}
describe("Sidebar", () => {
test("should open sidebar and not close on outside click", async () => {
jest.useFakeTimers();
const { findByText, getByText, getByTestId } = render(
);
fireEvent.click(getByText("Open Sidebar"));
jest.runOnlyPendingTimers();
await findByText("Sidebar Content");
fireEvent.click(getByTestId("shadowArea"));
jest.runOnlyPendingTimers();
await findByText("Sidebar Content");
});
test("should open sidebar and close on outside click", async () => {
jest.useFakeTimers();
const { getByText, getByTestId, findByText } = render(
);
fireEvent.click(getByText("Open Sidebar"));
jest.runOnlyPendingTimers();
await findByText("Sidebar Content");
const waitToBeRemovedPromise = waitForElementToBeRemoved(() =>
getByText("Sidebar Content")
);
fireEvent.click(getByTestId("shadowArea"));
jest.runOnlyPendingTimers();
await waitToBeRemovedPromise;
});
});