import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; import { render, screen, fireEvent } from "@testing-library/react"; import { QuickstartBackButton } from "@/components/quickstart/QuickstartBackButton"; describe("QuickstartBackButton", () => { const mockOnClick = vi.fn(); beforeEach(() => { vi.clearAllMocks(); }); afterEach(() => { vi.restoreAllMocks(); }); describe("Basic Rendering", () => { it("should render the back button with text", () => { render(); expect(screen.getByText("Back")).toBeInTheDocument(); }); it("should render as a button element", () => { render(); const button = screen.getByRole("button"); expect(button).toBeInTheDocument(); }); it("should render back arrow icon (svg element)", () => { const { container } = render(); const svg = container.querySelector("svg"); expect(svg).toBeInTheDocument(); }); }); describe("Click Behavior", () => { it("should call onClick when clicked", () => { render(); fireEvent.click(screen.getByText("Back")); expect(mockOnClick).toHaveBeenCalledTimes(1); }); it("should call onClick when button is clicked via role", () => { render(); fireEvent.click(screen.getByRole("button")); expect(mockOnClick).toHaveBeenCalledTimes(1); }); }); describe("Disabled State", () => { it("should not be disabled by default", () => { render(); const button = screen.getByRole("button"); expect(button).not.toBeDisabled(); }); it("should be disabled when disabled prop is true", () => { render(); const button = screen.getByRole("button"); expect(button).toBeDisabled(); }); it("should have disabled styling when disabled", () => { render(); const button = screen.getByRole("button"); expect(button).toHaveClass("opacity-50"); expect(button).toHaveClass("cursor-not-allowed"); }); it("should not call onClick when disabled and clicked", () => { render(); fireEvent.click(screen.getByRole("button")); expect(mockOnClick).not.toHaveBeenCalled(); }); }); describe("Accessibility", () => { it("should be focusable when not disabled", () => { render(); const button = screen.getByRole("button"); button.focus(); expect(document.activeElement).toBe(button); }); it("should not be focusable when disabled", () => { render(); const button = screen.getByRole("button"); expect(button).toHaveAttribute("disabled"); }); }); });