import { describe, it, expect, vi } from "vitest"; import { render, screen, fireEvent } from "@testing-library/react"; import { FilterSheet, FiltersButton } from "../../src/components/FilterSheet"; describe("FiltersButton", () => { it("shows the active count only when there are active filters", () => { const { rerender } = render( {}} />); expect(screen.getByText("Filters")).toBeInTheDocument(); expect(screen.queryByText("3")).not.toBeInTheDocument(); rerender( {}} />); expect(screen.getByText("3")).toBeInTheDocument(); }); it("calls onClick when pressed", () => { const onClick = vi.fn(); render(); fireEvent.click(screen.getByText("Filters")); expect(onClick).toHaveBeenCalledTimes(1); }); }); describe("FilterSheet", () => { it("renders its children and a Done button that closes", () => { const onClose = vi.fn(); render(
control-content
, ); expect(screen.getByText("control-content")).toBeInTheDocument(); fireEvent.click(screen.getByRole("button", { name: "Done" })); expect(onClose).toHaveBeenCalledTimes(1); }); it("shows Clear all only when onClear is provided and wires it up", () => { const onClear = vi.fn(); const { rerender } = render( {}}>
, ); expect(screen.queryByRole("button", { name: "Clear all" })).not.toBeInTheDocument(); rerender( {}} onClear={onClear}>
, ); fireEvent.click(screen.getByRole("button", { name: "Clear all" })); expect(onClear).toHaveBeenCalledTimes(1); }); it("closes on Escape", () => { const onClose = vi.fn(); render(
, ); fireEvent.keyDown(window, { key: "Escape" }); expect(onClose).toHaveBeenCalledTimes(1); }); it("is a modal dialog for assistive tech", () => { render( {}}>
, ); const dialog = screen.getByRole("dialog", { name: "Filters" }); expect(dialog).toHaveAttribute("aria-modal", "true"); }); });