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");
});
});