import { describe, it, expect, vi } from "vitest";
import { render, screen, waitForElementToBeRemoved } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
import "@testing-library/jest-dom";
import { ConfirmDialog } from "./ConfirmDialog";
describe("ConfirmDialog", () => {
it("renders title and message", () => {
render(
,
);
expect(screen.getByText("Delete?")).toBeInTheDocument();
expect(screen.getByText("Are you sure?")).toBeInTheDocument();
});
it("calls onConfirm when confirm button is clicked", async () => {
const user = userEvent.setup();
const onConfirm = vi.fn();
render(
,
);
await user.click(screen.getByText(/confirm/i));
expect(onConfirm).toHaveBeenCalled();
});
it("calls onCancel when cancel button is clicked", async () => {
const user = userEvent.setup();
const onCancel = vi.fn();
render(
,
);
await user.click(screen.getByText(/cancel/i));
expect(onCancel).toHaveBeenCalled();
});
it("removes content from DOM after exit animation", async () => {
const { rerender } = render(
,
);
expect(screen.getByText("Delete?")).toBeInTheDocument();
rerender(
,
);
await waitForElementToBeRemoved(() => screen.queryByText("Delete?"));
expect(screen.queryByText("Delete?")).not.toBeInTheDocument();
});
it("calls onCancel when Escape is pressed", async () => {
const user = userEvent.setup();
const onCancel = vi.fn();
render(
,
);
await user.keyboard("{Escape}");
expect(onCancel).toHaveBeenCalled();
});
});