feat(ux): R3 验收前清单 — AcceptPanel「本次将更新」预览
新 lib/review/accept-preview.ts (buildAcceptPreview):据现有 client state 列验收前预期项——晋升版次/提炼摘要/写回裁决/伏笔到期扫描/伏笔建议待登记。仅列后端 accept 事务确实做的事(核对 projects.py accept 端点),不声称改人物 latest_state,带「以验收回执为准」免责。 AcceptPanel 加 foreshadowCount prop + 未阻断时渲染清单;ReviewReport 传 foreshadow.length。 TDD: 4 测。前端门禁绿: lint/tsc/vitest 205/build。
This commit is contained in:
48
apps/web/lib/review/accept-preview.test.ts
Normal file
48
apps/web/lib/review/accept-preview.test.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { buildAcceptPreview } from "./accept-preview";
|
||||
|
||||
describe("buildAcceptPreview", () => {
|
||||
it("always previews version promotion, digest, and overdue scan", () => {
|
||||
const items = buildAcceptPreview({
|
||||
conflictCount: 0,
|
||||
foreshadowSuggestions: 0,
|
||||
});
|
||||
const labels = items.map((it) => it.label);
|
||||
expect(labels).toContain("晋升章节版次");
|
||||
expect(labels).toContain("提炼章节摘要");
|
||||
expect(labels).toContain("扫描伏笔到期");
|
||||
});
|
||||
|
||||
it("omits the decisions line when there are no conflicts", () => {
|
||||
const items = buildAcceptPreview({
|
||||
conflictCount: 0,
|
||||
foreshadowSuggestions: 0,
|
||||
});
|
||||
expect(items.some((it) => it.label === "写回冲突裁决")).toBe(false);
|
||||
});
|
||||
|
||||
it("includes the decisions line with the conflict count", () => {
|
||||
const items = buildAcceptPreview({
|
||||
conflictCount: 3,
|
||||
foreshadowSuggestions: 0,
|
||||
});
|
||||
const decisions = items.find((it) => it.label === "写回冲突裁决");
|
||||
expect(decisions?.detail).toContain("3");
|
||||
});
|
||||
|
||||
it("reminds about pending foreshadow suggestions only when present", () => {
|
||||
expect(
|
||||
buildAcceptPreview({
|
||||
conflictCount: 0,
|
||||
foreshadowSuggestions: 0,
|
||||
}).some((it) => it.label === "伏笔建议待登记"),
|
||||
).toBe(false);
|
||||
const items = buildAcceptPreview({
|
||||
conflictCount: 0,
|
||||
foreshadowSuggestions: 2,
|
||||
});
|
||||
const foreshadow = items.find((it) => it.label === "伏笔建议待登记");
|
||||
expect(foreshadow?.detail).toContain("2");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user