import { fireEvent, render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { Inspector } from "@/components/inspector/Inspector"; import { retrievalActivityItem, retrievalAgentItem } from "@/lib/layout"; import type { RetrievalActivity, RetrievalAgentRun } from "@/lib/types"; const queryActivity: RetrievalActivity = { id: "event:4607", kind: "query", label: "毛驴效应 心理学科普", status: "hit", resultCount: 2, detailRef: "event:4607", }; function agentRun(): RetrievalAgentRun { return { id: "retrieval-agent:4601", kind: "retrieval-agent", eventId: 4601, agentType: "retrieve_data_decode_case", businessLabel: "解构 Case Agent", taskPreview: "查找毛驴效应案例", status: "completed", querySummary: { total: 1, hit: 1, empty: 0, failure: 0, unknown: 0 }, attempts: [], screening: { state: "available", preview: "初筛完成" }, detailRef: "retrieval-agent:4601", }; } describe("retrieval Inspector", () => { it("lists agent queries and delegates same-drawer navigation", () => { const onNavigate = vi.fn(); render(); expect(screen.getByText("查询记录")).toBeInTheDocument(); expect(screen.getByText("2 条")).toBeInTheDocument(); fireEvent.click(screen.getByRole("button", { name: /毛驴效应 心理学科普/ })); expect(onNavigate).toHaveBeenCalledWith(queryActivity); }); it("shows an explicit notice when Pattern Relation Agent has no structured records", () => { render(); expect(screen.getByText("本次运行未保存可下钻的结构化查询记录。")).toBeInTheDocument(); }); it("renders hit cases with expandable complete content", () => { render(); expect(screen.getByText("查询成功,返回 2 条结果。")).toBeInTheDocument(); expect(screen.getByText("毛驴效应")).toBeInTheDocument(); expect(screen.getByText("每天心理学 · Case 1")).toBeInTheDocument(); expect(screen.getByText(/\"完整解构原文\"/)).toBeInTheDocument(); expect(screen.getByRole("button", { name: "返回解构 Case Agent" })).toBeInTheDocument(); }); it("distinguishes successful empty from technical failure", () => { const item = retrievalActivityItem({ ...queryActivity, id: "event:4603", detailRef: "event:4603", status: "empty", resultCount: 0 }, 1, 2); const { rerender } = render(); expect(screen.getByText("查询执行成功,没有匹配数据。")).toBeInTheDocument(); rerender(); expect(screen.getByText("查询执行失败:return_field 仅支持主脉络。")).toBeInTheDocument(); expect(screen.getByText("写法")).toBeInTheDocument(); }); });