import { describe, it, expect, vi } from "vitest"; import { render, screen } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { QueueItem } from "@/components/QueueItem"; import { makeFocusItem } from "../helpers/fixtures"; describe("QueueItem", () => { it("renders the item title", () => { render(); expect( screen.getByText("Fix authentication token refresh logic") ).toBeInTheDocument(); }); it("renders the type badge", () => { render(); expect(screen.getByText(/MR REVIEW/i)).toBeInTheDocument(); }); it("renders the IID with correct prefix for MRs", () => { render(); expect(screen.getByText(/!847/)).toBeInTheDocument(); }); it("renders the IID with # prefix for issues", () => { render( ); expect(screen.getByText(/#42/)).toBeInTheDocument(); }); it("renders the project name", () => { render(); expect(screen.getByText(/platform\/core/)).toBeInTheDocument(); }); it("calls onClick when clicked", async () => { const onClick = vi.fn(); const user = userEvent.setup(); const item = makeFocusItem({ id: "test-click" }); render(); await user.click(screen.getByRole("button")); expect(onClick).toHaveBeenCalledOnce(); expect(onClick).toHaveBeenCalledWith("test-click"); }); it("shows staleness color for fresh items", () => { const freshItem = makeFocusItem({ updatedAt: new Date().toISOString(), }); const { container } = render( ); // Fresh items should have green indicator expect(container.querySelector("[data-staleness='fresh']")).toBeTruthy(); }); it("shows staleness color for urgent items", () => { const oldItem = makeFocusItem({ updatedAt: new Date( Date.now() - 10 * 24 * 60 * 60 * 1000 ).toISOString(), }); const { container } = render( ); expect(container.querySelector("[data-staleness='urgent']")).toBeTruthy(); }); it("shows requestedBy when present", () => { render( ); expect(screen.getByText(/@alice/)).toBeInTheDocument(); }); it("staleness indicator has accessible label for fresh items", () => { const freshItem = makeFocusItem({ updatedAt: new Date().toISOString(), }); render(); expect(screen.getByRole("img", { name: /updated recently/i })).toBeInTheDocument(); }); it("staleness indicator has accessible label for urgent items", () => { const oldItem = makeFocusItem({ updatedAt: new Date(Date.now() - 10 * 24 * 60 * 60 * 1000).toISOString(), }); render(); expect(screen.getByRole("img", { name: /needs attention/i })).toBeInTheDocument(); }); });