import { fireEvent, render, screen } from "@solidjs/testing-library";
import { describe, expect, it } from "vitest";
import { Collapsible } from "../../../src/components/collapsible/index";
describe("Collapsible", () => {
it("content is hidden by default", () => {
render(() => (
Toggle
Hidden
));
expect(screen.getByTestId("content")).toHaveAttribute("hidden");
});
it("content is shown when defaultOpen=true", () => {
render(() => (
Toggle
Visible
));
expect(screen.getByTestId("content")).not.toHaveAttribute("hidden");
});
it("trigger click opens content", () => {
render(() => (
Toggle
Content
));
fireEvent.click(screen.getByRole("button"));
expect(screen.getByTestId("content")).not.toHaveAttribute("hidden");
});
it("trigger click closes open content", () => {
render(() => (
Toggle
Content
));
fireEvent.click(screen.getByRole("button"));
expect(screen.getByTestId("content")).toHaveAttribute("hidden");
});
it("trigger has aria-expanded reflecting open state", () => {
render(() => (
Toggle
Content
));
expect(screen.getByRole("button").getAttribute("aria-expanded")).toBe("false");
fireEvent.click(screen.getByRole("button"));
expect(screen.getByRole("button").getAttribute("aria-expanded")).toBe("true");
});
it("trigger aria-controls matches content id", () => {
render(() => (
Toggle
Content
));
const trigger = screen.getByRole("button");
const content = screen.getByTestId("content");
expect(trigger.getAttribute("aria-controls")).toBe(content.id);
});
it("disabled trigger does not toggle", () => {
render(() => (
Toggle
Content
));
fireEvent.click(screen.getByRole("button"));
expect(screen.getByTestId("content")).toHaveAttribute("hidden");
});
it("controlled open state", () => {
render(() => (
{}}>
Toggle
Content
));
expect(screen.getByTestId("content")).not.toHaveAttribute("hidden");
});
});