/* eslint-disable max-lines-per-function */
import { fireEvent, render, screen } from "tests"
import { ComponentProps } from "."
import Toggle from "./Toggle"
describe("Toggle", () => {
let props: ComponentProps
beforeEach(() => {
props = {
checked: false,
disabled: false,
inputId: "toggle-id",
label: "Toggle",
labelId: "toggle-label",
name: "toggle-name",
onChange: jest.fn(),
onKeyDown: jest.fn()
}
})
it("renders", () => {
render()
expect(screen.getByRole("switch", { name: "Toggle" })).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("does not toggle when pressing other keys", () => {
render()
fireEvent.keyDown(screen.getByRole("switch"), {
code: "ArrowRight",
key: "ArrowRight"
})
expect(props.onChange).not.toHaveBeenCalled()
})
})