// @vitest-environment jsdom import { act } from "react"; import { createRoot, type Root } from "react-dom/client"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { TaskChatRunnerActivityGroup } from "./TaskChatRunnerActivityGroup"; import { TaskChatExpansionState } from "./expansion-state"; import type { TaskChatActivityPhaseItem, TaskChatAutoReview } from "./task-chat-model"; const review: TaskChatAutoReview = { decision: "allowed", riskLevel: "low", rationale: "Generated output." }; describe("auto-approved activity rows", () => { let container: HTMLDivElement; let root: Root; beforeEach(() => { container = document.createElement("div"); document.body.appendChild(container); root = createRoot(container); }); afterEach(() => { act(() => root.unmount()); container.remove(); }); function expandOnlyRow(item: TaskChatActivityPhaseItem["items"][number]) { act(() => root.render( , )); const row = container.querySelector('[data-activity-item-id] button'); act(() => row!.click()); } it.each([ ["a plain tool row", { id: "tool", kind: "tool", name: "shell", target: "rm -rf build", status: "completed", autoReview: review }], ["a provider tool execution row", { id: "provider-tool", kind: "protocol", surface: "provider_activity", family: "tool_execution", eventType: "tool.execution.completed", status: "completed", title: "Tool", details: [{ label: "Name", value: "rm -rf build" }], steps: [], links: [], children: [], autoReview: review, }], ] as const)("shows the review once when %s is expanded", (_label, item) => { expandOnlyRow(item as TaskChatActivityPhaseItem["items"][number]); expect(container.querySelectorAll('[data-testid="task-chat-auto-approved-badge"]')).toHaveLength(1); expect(container.querySelectorAll('[data-testid="task-chat-auto-review-detail"]')).toHaveLength(1); }); });