import { act, fireEvent, render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import React from "react"; import { describe, expect, test } from "vitest"; import { ToggleGroup } from "./ToggleGroup"; const TestToggleGroup = ({ value, onChange, defaultValue }: any) => ( ); describe("ToggleGroup", () => { test("sets default value correctly", () => { render(); const toggle2 = screen.getByTestId("toggle2"); expect(toggle2).toHaveAttribute("aria-checked", "true"); }); test("sets correct attributes on active toggle", () => { render(); const toggle2 = screen.getByTestId("toggle2"); expect(toggle2).toHaveAttribute("aria-checked", "true"); expect(toggle2).toHaveAttribute("role", "radio"); expect(toggle2).toHaveAttribute("type", "button"); expect(toggle2).toHaveAttribute("tabindex", "0"); }); test("sets correct attributes on idle toggle", () => { render(); const toggle2 = screen.getByTestId("toggle2"); expect(toggle2).toHaveAttribute("aria-checked", "false"); expect(toggle2).toHaveAttribute("role", "radio"); expect(toggle2).toHaveAttribute("type", "button"); expect(toggle2).toHaveAttribute("tabindex", "-1"); }); test("sets tabindex to 0 when focused", () => { render(); const toggle2 = screen.getByTestId("toggle2"); fireEvent.focus(toggle2); expect(toggle2).toHaveAttribute("tabindex", "0"); }); test("roving tabindex keydown moves focus", () => { render(); const toggle1 = screen.getByTestId("toggle1"); expect(toggle1).toHaveAttribute("tabindex", "0"); fireEvent.keyDown(toggle1, { key: "ArrowRight" }); expect(toggle1).toHaveAttribute("tabindex", "-1"); expect(screen.getByTestId("toggle2")).toHaveAttribute("tabindex", "0"); expect(screen.getByTestId("toggle2")).toHaveAttribute( "aria-checked", "false", ); }); test("Space selects focused toggle-item", async () => { render(); const toggle1 = screen.getByTestId("toggle1"); expect(toggle1).toHaveAttribute("tabindex", "0"); fireEvent.keyDown(toggle1, { key: "ArrowRight" }); expect(toggle1).toHaveAttribute("tabindex", "-1"); expect(screen.getByTestId("toggle2")).toHaveAttribute("tabindex", "0"); expect(screen.getByTestId("toggle2")).toHaveAttribute( "aria-checked", "false", ); // eslint-disable-next-line testing-library/no-unnecessary-act await act(async () => { await userEvent.keyboard(" "); }); expect(screen.getByTestId("toggle2")).toHaveAttribute( "aria-checked", "true", ); }); });