/* eslint-disable max-lines-per-function */ import Toggle, { Props } from "." import { fireEvent, render, screen } from "tests" describe("Toggle", () => { let props: Props beforeEach(() => { props = { checked: false, disabled: false, inputId: "toggle-id", name: "toggle-name", onChange: jest.fn() } }) it("renders with the correct initial state", () => { render() expect(screen.getByRole("switch")).toHaveAttribute("aria-checked", "false") }) it("toggles the checked state when clicked", () => { render() fireEvent.click(screen.getByRole("switch")) expect(props.onChange).toHaveBeenCalled() }) it("does not trigger onChange when disabled", () => { const disabledProps = { ...props, disabled: true } render() fireEvent.click(screen.getByRole("switch")) expect(props.onChange).not.toHaveBeenCalled() }) it("renders with the correct checked state", () => { const checkedProps = { ...props, checked: true } render() expect(screen.getByRole("switch")).toHaveAttribute("aria-checked", "true") }) it("can be toggled using the keyboard (Space key)", () => { render() fireEvent.keyDown(screen.getByRole("switch"), { code: "Space", key: " " }) expect(props.onChange).toHaveBeenCalled() }) it("can be toggled using the keyboard (Enter key)", () => { render() fireEvent.keyDown(screen.getByRole("switch"), { code: "Enter", key: "Enter" }) expect(props.onChange).toHaveBeenCalled() }) it("does not toggle when pressing other keys", () => { render() fireEvent.keyDown(screen.getByRole("switch"), { code: "ArrowRight", key: "ArrowRight" }) expect(props.onChange).not.toHaveBeenCalled() }) })