// @vitest-environment jsdom import { cleanup, fireEvent, render, screen } from "@testing-library/react"; import { afterEach, describe, expect, it, vi } from "vitest"; import { Button, ControlSectionHeader, PanelTitle } from "../../index"; afterEach(cleanup); describe("ControlSectionHeader reference layout", () => { it("keeps the title, help, reset and separate collapse button in order", () => { const toggle = vi.fn(); const reset = vi.fn(); const { container } = render( } collapsible description="The visible output frame." onCollapsedChange={toggle} > Frame , ); expect(screen.getAllByRole("button").map((button) => button.getAttribute("aria-label"))).toEqual([ "Toggle Frame section", "Frame help", "Reset Frame section", "Collapse Frame section", ]); const title = screen.getByRole("button", { name: "Toggle Frame section" }); const collapse = screen.getByRole("button", { name: "Collapse Frame section" }); expect(title.classList.contains("text-left")).toBe(true); expect(collapse.textContent).not.toContain("Frame"); expect(collapse.getAttribute("data-size")).toBe("icon-sm"); expect(collapse.getAttribute("data-variant")).toBe("ghost"); expect(container.querySelector("button button")).toBeNull(); fireEvent.click(screen.getByRole("button", { name: "Frame help" })); fireEvent.click(screen.getByRole("button", { name: "Reset Frame section" })); expect(reset).toHaveBeenCalledTimes(1); expect(toggle).not.toHaveBeenCalled(); fireEvent.click(title); fireEvent.click(collapse); expect(toggle.mock.calls).toEqual([[true], [true]]); }); it("does not add collapse controls to a noncollapsible section", () => { render(Frame); expect(screen.queryAllByRole("button")).toHaveLength(0); expect(screen.getByText("Frame")).toBeTruthy(); }); });