import { render, screen } from "@testing-library/react";
import { describe, expect, it } from "vitest";
import { Ui文学报告, Ui诊断报告 } from "../../src/功能/审校修订/问题清单";
import type { 文学结果, 诊断结果 } from "../../src/功能/审校修订/数据";
describe("审校报告的覆盖、过期与修留问", () => {
// @muse-case {"case_id":"NC-review-report-partial","environment":"离线组件","given":"NC-review-report-partial:未审与零问题分开显示","when":"作者页面操作","then":["NC-review-report-partial:未审与零问题分开显示"],"contract":"docs/系统架构/新版设计/模块设计/B06-审校修订.md"}
it("NC-review-report-partial:未审与零问题分开显示", () => {
const result: 文学结果 = {
task_id: "t",
task_state: "failed",
report_id: null,
current_status: "SOURCE_STALE",
stale_reasons: ["正文已更新"],
report: {
findings: [],
dimension_status: {
continuity: "partial",
craft: "insufficient_evidence",
voice: "uncalibrated",
},
unreviewed_shards: ["tail"],
counts: {},
coverage: { 范围完整: false, 未审区间: [[10, 20]] },
model_verified: false,
},
};
render();
expect(screen.getByText(/尚有 1 片未审/)).toBeTruthy();
expect(screen.getByText(/声音:未标定/)).toBeTruthy();
expect(screen.getByText(/创作质量:依据不足/)).toBeTruthy();
expect(screen.getByRole("alert").textContent).toContain("正文已更新");
expect(screen.queryByText("完整文学报告")).toBeNull();
});
// @muse-case {"case_id":"NC-review-diagnosis-retain","environment":"离线组件","given":"NC-review-diagnosis-retain:候选预览及有意表达不显示强改","when":"作者页面操作","then":["NC-review-diagnosis-retain:候选预览及有意表达不显示强改"],"contract":"docs/系统架构/新版设计/模块设计/B06-审校修订.md"}
it("NC-review-diagnosis-retain:候选预览及有意表达不显示强改", () => {
const result: 诊断结果 = {
diagnosis_id: "d",
report: {
mode: "candidate_preview",
findings: [
{
start: 20,
end: 25,
quote: "值得注意的是",
decision_proposal: "retain",
},
],
executed_rules: ["l002"],
unreviewed_rules: [{ rule_id: "sem001", reason: "未审" }],
text_hash: "a",
calibration: "uncalibrated",
target: {
work_id: "w",
chapter_id: "c",
revision: 2,
document_hash: "a",
branch_id: "main",
},
},
};
render();
expect(screen.getByText(/候选规则预览 · 未标定/)).toBeTruthy();
expect(screen.getByText("保留")).toBeTruthy();
expect(screen.queryByText("建议修改")).toBeNull();
expect(screen.getByText(/语义规则未审 1 条/)).toBeTruthy();
});
});