import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { TaskList } from "./TaskList"; import type { StateResponse, Topology } from "../api"; const TOPO: Topology = { trees: [ { id: "core", label: "Core" }, { id: "sdlc", label: "SDLC" }, ], nodes: [ { id: "intake", label: "Intake", agent: "coordinator", tree: "core", kind: "phase", gated: false }, { id: "plan", label: "Plan", agent: "Claude", tree: "sdlc", kind: "phase", gated: false }, ], edges: [], }; function makeState(): StateResponse { return { ok: true, error: null, generated_at: "now", db_path: "x", tasks: [ { thread_id: "aaaa1111", short_id: "aaaa1111", task: "remediate CVE", current_phase: "plan", status: "active", waiting: false, waiting_since: null }, { thread_id: "bbbb2222", short_id: "bbbb2222", task: "fix login bug", current_phase: "intake", status: "parked", waiting: false, waiting_since: null }, ], waiting: [], question_counts: {}, summary: { active: 1, parked: 1, waiting: 0, open_questions: 0, total: 2 }, budget: { available: false }, nodes: {}, }; } describe("TaskList", () => { it("renders all tasks", () => { render( {}} onClearNodeFilter={() => {}} />, ); expect(screen.getByText("remediate CVE")).toBeInTheDocument(); expect(screen.getByText("fix login bug")).toBeInTheDocument(); }); it("filters by status", () => { render( {}} onClearNodeFilter={() => {}} />, ); fireEvent.change(screen.getByLabelText("Filter by status"), { target: { value: "parked" } }); expect(screen.queryByText("remediate CVE")).not.toBeInTheDocument(); expect(screen.getByText("fix login bug")).toBeInTheDocument(); }); it("honors a node filter (map click)", () => { render( {}} onClearNodeFilter={() => {}} />, ); expect(screen.getByText("remediate CVE")).toBeInTheDocument(); expect(screen.queryByText("fix login bug")).not.toBeInTheDocument(); }); it("fires onSelect when a row is clicked", () => { const onSelect = vi.fn(); render( {}} />, ); fireEvent.click(screen.getByText("remediate CVE")); expect(onSelect).toHaveBeenCalledWith("aaaa1111"); }); });