Files
knowledge-governance/internal/httpapi/library_wiki_diff_test.go
T
姚章浩 1f482e4b49
build / build (push) Successful in 1m18s
feat(library): Wiki 撤销按贡献比对,维护窗口在页面如实呈现
为什么:删除一篇与别人共同贡献同一 Wiki 页的文档后,页面还在、名字也在,
只有那篇文档的正文与引用被摘掉。原来的页面级差异会把这种语义重算显示成
"无变化",操作员据此会误判撤销没有生效。

怎么改:librarydiff 新增 CompareWiki,以 slug 为身份把正文/来源文档/引用分块/
出入边/目录分别取集合比较,输出 sources_removed、citations 变化与具体类别;
overview 的 diff.wiki 增加逐页明细(最多 50 页,超出置 pages_truncated),
说明文字明确"重算发生在源侧,本平台只如实比对与保留结果"。

页面:新增目标维护面板(实例级/库级、持有、入口开关、阶段、进度、恢复错误),
只有窗口仍持有且作业失败时才给"按预备份恢复";没有维护记录时写未接入 + fail closed。
变更页把 Wiki 逐页差异列出来源/引用怎么变。kind 补上 restore。

验过:go test ./internal/librarydiff ./internal/httpapi;web vitest 453 项;
make verify 全绿(15 项,无未运行项)。真实撤销语义验收见交付报告。
2026-10-29 04:45:34 +08:00

52 lines
1.8 KiB
Go

package httpapi
import (
"strings"
"testing"
"knowledge-governance/internal/librarydiff"
)
func TestWikiViewFromKeepsContributionDetail(t *testing.T) {
result := librarydiff.WikiResult{
State: "computed", Added: 0, Updated: 1, Removed: 1, SourcesAdded: 0, SourcesRemoved: 2,
BaseCount: 2, TargetCount: 1,
Pages: []librarydiff.WikiContribution{
{Slug: "entity/gate", Title: "发布闸门", PageType: "entity", Status: "updated",
Changed: []string{"content", "sources", "citations"}, SourcesRemoved: []string{"doc-a"},
CitationsBefore: 2, CitationsAfter: 1},
{Slug: "entity/only-a", Title: "只属于 A", PageType: "entity", Status: "removed",
Changed: []string{"removed"}, SourcesRemoved: []string{"doc-a"}},
},
}
view := wikiViewFrom(result, 0)
if view.State != "computed" || view.Updated != 1 || view.Removed != 1 || view.SourcesRemoved != 2 {
t.Fatalf("view: %+v", view)
}
if len(view.Pages) != 2 {
t.Fatalf("pages: %+v", view.Pages)
}
kept := view.Pages[0]
if kept.Status != "updated" || len(kept.Changed) != 3 || kept.Changed[0] != "正文" {
t.Fatalf("changed labels: %+v", kept)
}
if len(kept.SourcesRemoved) != 1 || kept.SourcesRemoved[0] != "doc-a" {
t.Fatalf("sources: %+v", kept)
}
if !strings.Contains(view.Note, "来源") {
t.Fatalf("note should explain what is compared: %q", view.Note)
}
}
func TestWikiViewFromCapsPagesAndSaysSo(t *testing.T) {
result := librarydiff.WikiResult{State: "computed", BaseCount: 0}
for _, slug := range []string{"a", "b", "c"} {
result.Pages = append(result.Pages, librarydiff.WikiContribution{Slug: slug, Status: "added"})
result.Added++
}
view := wikiViewFrom(result, 2)
if len(view.Pages) != 2 || !view.PagesTruncated {
t.Fatalf("cap: pages=%d truncated=%v", len(view.Pages), view.PagesTruncated)
}
}