import { describe, it, expect, vi } from "vitest"; import { render, screen } from "@testing-library/react"; import { Column } from "../Column"; import type { Task, Column as ColumnType } from "@kb/core"; // Mock child components to keep tests focused on the Column badge behavior vi.mock("../TaskCard", () => ({ TaskCard: ({ task }: { task: Task }) =>
, })); vi.mock("../WorktreeGroup", () => ({ WorktreeGroup: () =>
, })); vi.mock("../QuickEntryBox", () => ({ QuickEntryBox: () =>
, })); vi.mock("lucide-react", () => ({ Link: () => null, Clock: () => null, })); function makeTask(id: string): Task { return { id, title: `Task ${id}`, column: "triage" as ColumnType, status: undefined as any, steps: [], currentStep: 0, dependencies: [], description: "", log: [], createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), }; } const defaultProps = { column: "triage" as ColumnType, allTasks: [] as Task[], maxConcurrent: 2, onMoveTask: vi.fn().mockResolvedValue({} as Task), onOpenDetail: vi.fn(), addToast: vi.fn(), }; describe("Column count-flash", () => { it("does not apply count-flash class on initial render", () => { const tasks = [makeTask("KB-001")]; render(); const badge = screen.getByText("1"); expect(badge.className).toContain("column-count"); expect(badge.className).not.toContain("count-flash"); }); it("applies count-flash class when task count increases", () => { const tasks = [makeTask("KB-001")]; const { rerender } = render(); const moreTasks = [makeTask("KB-001"), makeTask("KB-002")]; rerender(); const badge = screen.getByText("2"); expect(badge.className).toContain("count-flash"); }); it("does not apply count-flash class when task count decreases", () => { const tasks = [makeTask("KB-001"), makeTask("KB-002")]; const { rerender } = render(); const fewerTasks = [makeTask("KB-001")]; rerender(); const badge = screen.getByText("1"); expect(badge.className).not.toContain("count-flash"); }); }); describe("Column QuickEntryBox", () => { it("renders QuickEntryBox in triage column when onQuickCreate is provided", () => { const tasks = [makeTask("KB-001")]; render(); expect(screen.getByTestId("quick-entry-box")).toBeTruthy(); }); it("does not render QuickEntryBox in triage column when onQuickCreate is not provided", () => { const tasks = [makeTask("KB-001")]; render(); expect(screen.queryByTestId("quick-entry-box")).toBeNull(); }); it("does not render QuickEntryBox in non-triage columns", () => { const tasks = [makeTask("KB-001")]; render(); expect(screen.queryByTestId("quick-entry-box")).toBeNull(); }); });