import { fireEvent, render, screen } from "@testing-library/react";
import { Modal, useModal } from "./Modal";
function WithTitle(props: any) {
const modal = useModal();
return (
);
}
function WithFooter(args: any) {
const modal = useModal();
function ModalFooter({ closeModal, onSubmit }: any) {
return (
{
onSubmit(e);
closeModal();
}}
>
Save
Close
);
}
return (
Open modal
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
Hello body
);
}
describe("Modal", () => {
describe("WithTitle", () => {
it("should display the modal when we click on the button", async () => {
const onClose = vi.fn();
render( );
expect(screen.queryByTestId("modalTitle")).toBeFalsy();
expect(screen.queryByTestId("modalBody")).toBeFalsy();
expect(screen.queryByTestId("modalFooter")).toBeFalsy();
fireEvent.click(screen.getByRole("button", { name: "Open modal" }));
await screen.findByTestId("modalTitle");
expect(screen.getByTestId("modalTitle")).toBeTruthy();
expect(screen.getByTestId("modalTitle")).toHaveTextContent("Modal title");
expect(screen.getByTestId("modalBody")).toBeTruthy();
expect(screen.getByTestId("modalBody")).toHaveTextContent("Hello body");
expect(screen.queryByTestId("modalFooter")).toBeFalsy();
fireEvent.click(screen.getByTestId("closeModal"));
expect(screen.queryByTestId("modalTitle")).toBeFalsy();
expect(screen.queryByTestId("modalBody")).toBeFalsy();
expect(screen.queryByTestId("modalFooter")).toBeFalsy();
expect(onClose).toHaveBeenCalledWith();
});
});
describe("WithFooter", () => {
it("should display the modal when we click on the button", async () => {
render(
);
expect(screen.queryByTestId("modalTitle")).toBeFalsy();
expect(screen.queryByTestId("modalBody")).toBeFalsy();
expect(screen.queryByTestId("modalFooter")).toBeFalsy();
fireEvent.click(screen.getByRole("button", { name: "Open modal" }));
await screen.findByTestId("modalTitle");
expect(screen.getByTestId("modalTitle")).toBeTruthy();
expect(screen.getByTestId("modalTitle")).toHaveTextContent("Modal title");
expect(screen.getByTestId("modalBody")).toBeTruthy();
expect(screen.getByTestId("modalBody")).toHaveTextContent("Hello body");
expect(screen.getByTestId("modalFooter")).toBeTruthy();
fireEvent.click(screen.getByTestId("customCloseModal"));
expect(screen.queryByTestId("modalTitle")).toBeFalsy();
expect(screen.queryByTestId("modalBody")).toBeFalsy();
expect(screen.queryByTestId("modalFooter")).toBeFalsy();
});
it("should call the onSubmit listener", async () => {
const onSubmit = vi.fn();
render(
);
fireEvent.click(screen.getByRole("button", { name: "Open modal" }));
await screen.findByTestId("modalTitle");
fireEvent.click(screen.getByTestId("customSubmitModal"));
expect(onSubmit).toHaveBeenCalled();
expect(screen.queryByTestId("modalTitle")).toBeFalsy();
expect(screen.queryByTestId("modalBody")).toBeFalsy();
expect(screen.queryByTestId("modalFooter")).toBeFalsy();
});
});
});