import { fireEvent, render, screen } from "@solidjs/testing-library";
import { describe, expect, it } from "vitest";
import { RadioGroup } from "../../../src/components/radio-group/index";
describe("RadioGroup", () => {
it("renders with role=radiogroup", () => {
render(() => (
A
));
expect(screen.getByRole("radiogroup")).toBeTruthy();
});
it("items have role=radio", () => {
render(() => (
A
B
));
expect(screen.getAllByRole("radio")).toHaveLength(2);
});
it("no item is checked by default", () => {
render(() => (
A
));
expect(screen.getByRole("radio").getAttribute("aria-checked")).toBe("false");
});
it("defaultValue pre-selects item", () => {
render(() => (
A
B
));
const radios = screen.getAllByRole("radio");
expect(radios[0].getAttribute("aria-checked")).toBe("false");
expect(radios[1].getAttribute("aria-checked")).toBe("true");
});
it("clicking an item selects it", () => {
render(() => (
A
B
));
fireEvent.click(screen.getAllByRole("radio")[0]);
expect(screen.getAllByRole("radio")[0].getAttribute("aria-checked")).toBe("true");
expect(screen.getAllByRole("radio")[1].getAttribute("aria-checked")).toBe("false");
});
it("clicking a selected item keeps it selected", () => {
render(() => (
A
));
fireEvent.click(screen.getByRole("radio"));
expect(screen.getByRole("radio").getAttribute("aria-checked")).toBe("true");
});
it("ArrowDown moves to next radio", () => {
render(() => (
A
B
));
const [first] = screen.getAllByRole("radio");
first.focus();
fireEvent.keyDown(first, { key: "ArrowDown" });
expect(document.activeElement).toBe(screen.getAllByRole("radio")[1]);
});
it("disabled item is not selectable", () => {
render(() => (
A
));
fireEvent.click(screen.getByRole("radio"));
expect(screen.getByRole("radio").getAttribute("aria-checked")).toBe("false");
});
});