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); }); });