import { installPointerEvent } from "@kobalte/tests";
import { fireEvent, render } from "@solidjs/testing-library";
import { vi } from "vitest";
import * as ToggleButton from ".";
describe("ToggleButton", () => {
installPointerEvent();
it("can be default selected (uncontrolled)", () => {
const { getByTestId } = render(() => (
Button
));
const toggle = getByTestId("toggle");
expect(toggle).toHaveAttribute("aria-pressed", "true");
expect(toggle).toHaveAttribute("data-pressed");
});
it("can be controlled", async () => {
const onChangeSpy = vi.fn();
const { getByTestId } = render(() => (
Button
));
const toggle = getByTestId("toggle");
expect(toggle).toHaveAttribute("aria-pressed", "true");
expect(toggle).toHaveAttribute("data-pressed");
fireEvent.click(toggle);
await Promise.resolve();
expect(toggle).toHaveAttribute("aria-pressed", "true");
expect(toggle).toHaveAttribute("data-pressed");
expect(onChangeSpy).toHaveBeenCalledTimes(1);
expect(onChangeSpy).toHaveBeenCalledWith(false);
});
it("should have correct attributes when the toggle button is off (not selected)", () => {
const { getByTestId } = render(() => (
Button
));
const toggle = getByTestId("toggle");
expect(toggle).toHaveAttribute("aria-pressed", "false");
expect(toggle).not.toHaveAttribute("data-pressed");
});
it("should have correct attributes when the toggle button is on (selected)", () => {
const { getByTestId } = render(() => (
Button
));
const toggle = getByTestId("toggle");
expect(toggle).toHaveAttribute("aria-pressed", "true");
expect(toggle).toHaveAttribute("data-pressed");
});
});