import { describe, test, expect, vi } from "vitest";
import { render, fireEvent, screen } from "@testing-library/react";
import { Button } from ".";
import { PressResponder } from "@react-aria/interactions";
describe("Button", () => {
describe("matches snapshots", () => {
test("normal display", () => {
const result = render();
expect(result.asFragment()).toMatchSnapshot();
});
test("changes variant", () => {
const result = render();
expect(result.asFragment()).toMatchSnapshot();
});
test("loading state", () => {
const result2 = render();
expect(result2.asFragment()).toMatchSnapshot();
});
test("loading completed state", () => {
const result2 = render(
);
expect(result2.asFragment()).toMatchSnapshot();
});
});
describe("pressable", () => {
test("receives an onPress event", () => {
const onClick = vi.fn((e) => e);
render();
fireEvent.click(screen.getByText("Click me"));
expect(onClick.mock.calls.length).toEqual(1);
});
test("receives an onPress event from a parent PressResponder", () => {
const onPress = vi.fn((e) => e);
render(
);
fireEvent.click(screen.getByText("Click me"));
expect(onPress.mock.calls.length).toEqual(1);
});
});
test("displays loading displays spinner", () => {
const { rerender } = render(
);
expect(screen.getByTestId("spinner-svg")).not.toBeNull();
rerender(
);
expect(screen.queryByTestId("spinner-svg")).toBeNull();
});
test("can be rendered as a link", () => {
const onClick = vi.fn((e) => e);
const { container } = render(
);
const anchor = container.querySelector("a");
expect(anchor).not.toBeNull();
expect(anchor?.getAttribute("href")).toEqual("#");
fireEvent.click(screen.getByText("Click me"));
expect(onClick.mock.calls.length).toEqual(1);
});
});