import "@testing-library/jest-dom/extend-expect"; import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import React from "react"; import { WithFooter, WithTitle } from "./modal.stories"; describe("Modal", () => { describe("WithTitle", () => { it("should display the modal when we click on the button", async () => { const onClose = jest.fn(); const { queryByTestId, getByTestId } = render( ); expect(queryByTestId("modalTitle")).toBeFalsy(); expect(queryByTestId("modalBody")).toBeFalsy(); expect(queryByTestId("modalFooter")).toBeFalsy(); fireEvent.click(screen.getByRole("button", { name: "Open modal" })); await waitFor(() => getByTestId("modalTitle")); expect(getByTestId("modalTitle")).toBeTruthy(); expect(getByTestId("modalTitle")).toHaveTextContent("Modal title"); expect(getByTestId("modalBody")).toBeTruthy(); expect(getByTestId("modalBody")).toHaveTextContent("Hello body"); expect(queryByTestId("modalFooter")).toBeFalsy(); fireEvent.click(screen.getByTestId("closeModal")); expect(queryByTestId("modalTitle")).toBeFalsy(); expect(queryByTestId("modalBody")).toBeFalsy(); expect(queryByTestId("modalFooter")).toBeFalsy(); expect(onClose).toHaveBeenCalledWith(); }); }); describe("WithFooter", () => { it("should display the modal when we click on the button", async () => { const { getByRole, queryByTestId, getByTestId } = render( ); expect(queryByTestId("modalTitle")).toBeFalsy(); expect(queryByTestId("modalBody")).toBeFalsy(); expect(queryByTestId("modalFooter")).toBeFalsy(); fireEvent.click(getByRole("button", { name: "Open modal" })); await waitFor(() => getByTestId("modalTitle")); expect(getByTestId("modalTitle")).toBeTruthy(); expect(getByTestId("modalTitle")).toHaveTextContent("Modal title"); expect(getByTestId("modalBody")).toBeTruthy(); expect(getByTestId("modalBody")).toHaveTextContent("Hello body"); expect(queryByTestId("modalFooter")).toBeTruthy(); fireEvent.click(screen.getByTestId("customCloseModal")); expect(queryByTestId("modalTitle")).toBeFalsy(); expect(queryByTestId("modalBody")).toBeFalsy(); expect(queryByTestId("modalFooter")).toBeFalsy(); }); it("should call the onSubmit listener", async () => { const onSubmit = jest.fn(); const { getByRole, queryByTestId, getByTestId } = render( ); fireEvent.click(getByRole("button", { name: "Open modal" })); await waitFor(() => getByTestId("modalTitle")); fireEvent.click(screen.getByTestId("customSubmitModal")); expect(onSubmit).toHaveBeenCalled(); expect(queryByTestId("modalTitle")).toBeFalsy(); expect(queryByTestId("modalBody")).toBeFalsy(); expect(queryByTestId("modalFooter")).toBeFalsy(); }); }); });