// @vitest-environment jsdom
import { cleanup, render, screen } from "@testing-library/react";
import { userEvent } from "@testing-library/user-event";
import { afterEach, beforeAll, describe, expect, it, vi } from "vitest";
import { polyfillDialog } from "../../__tests__/polyfill-dialog.js";
import { Dialog, DialogHeader } from "../ui/dialog.js";
beforeAll(() => {
polyfillDialog();
});
afterEach(cleanup);
describe("Dialog", () => {
it("opens when open=true", () => {
render(
,
);
expect(screen.getByText("Content")).toBeDefined();
});
it("closes when open changes from true to false", () => {
const { rerender } = render(
,
);
const dialog = document.querySelector("dialog");
expect(dialog?.hasAttribute("open")).toBe(true);
rerender(
,
);
expect(dialog?.hasAttribute("open")).toBe(false);
});
it("calls onClose on cancel event", () => {
const onClose = vi.fn();
render(
,
);
const dialog = document.querySelector("dialog");
dialog?.dispatchEvent(new Event("cancel"));
expect(onClose).toHaveBeenCalledOnce();
});
});
describe("DialogHeader", () => {
it("renders title and close button", async () => {
const onClose = vi.fn();
render();
expect(screen.getByText("Test Title")).toBeDefined();
await userEvent.click(screen.getByRole("button"));
expect(onClose).toHaveBeenCalledOnce();
});
});