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