import { fireEvent, render, screen } from "@solidjs/testing-library"; import { describe, expect, it } from "vitest"; import { ToggleGroup } from "../../../src/components/toggle-group/index"; describe("ToggleGroup single", () => { it("no item pressed by default", () => { render(() => ( A )); expect(screen.getByRole("button").getAttribute("aria-pressed")).toBe("false"); }); it("pressing an item selects it", () => { render(() => ( A B )); fireEvent.click(screen.getAllByRole("button")[0]); expect(screen.getAllByRole("button")[0].getAttribute("aria-pressed")).toBe("true"); expect(screen.getAllByRole("button")[1].getAttribute("aria-pressed")).toBe("false"); }); it("pressing another item in single mode deselects first", () => { render(() => ( A B )); fireEvent.click(screen.getAllByRole("button")[1]); expect(screen.getAllByRole("button")[0].getAttribute("aria-pressed")).toBe("false"); expect(screen.getAllByRole("button")[1].getAttribute("aria-pressed")).toBe("true"); }); it("data-state reflects pressed state", () => { render(() => ( A )); expect(screen.getByRole("button").getAttribute("data-state")).toBe("off"); fireEvent.click(screen.getByRole("button")); expect(screen.getByRole("button").getAttribute("data-state")).toBe("on"); }); }); describe("ToggleGroup multiple", () => { it("pressing items toggles them independently", () => { render(() => ( A B )); fireEvent.click(screen.getAllByRole("button")[0]); fireEvent.click(screen.getAllByRole("button")[1]); expect(screen.getAllByRole("button")[0].getAttribute("aria-pressed")).toBe("true"); expect(screen.getAllByRole("button")[1].getAttribute("aria-pressed")).toBe("true"); }); it("pressing a pressed item in multiple mode unpresses it", () => { render(() => ( A )); fireEvent.click(screen.getByRole("button")); expect(screen.getByRole("button").getAttribute("aria-pressed")).toBe("false"); }); it("disabled item is not pressable", () => { render(() => ( A )); fireEvent.click(screen.getByRole("button")); expect(screen.getByRole("button").getAttribute("aria-pressed")).toBe("false"); }); });