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