锁定「7 份旧键本地克隆加 8 行服务端」收成 7 条 bd_*,以及列表与物化不再留下 intake 兄弟行。 Co-authored-by: Cursor <cursoragent@cursor.com>
94 lines
2.6 KiB
Go
94 lines
2.6 KiB
Go
package docgov_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"chat-agent-system/internal/docgov"
|
|
)
|
|
|
|
func TestMaterializeTemplateDocsIdempotentAndSkipsRealContent(t *testing.T) {
|
|
ctx := context.Background()
|
|
engine := docgov.NewGovernanceEngine(nil)
|
|
specs := []docgov.TemplateDocSpec{{
|
|
TaskKey: "bd_intake",
|
|
Title: "用户初始需求收集表",
|
|
StageKey: "V0.1_triage",
|
|
Enabled: true,
|
|
DutyPolicy: "author_only",
|
|
AuthorUserID: 398,
|
|
AuthorName: "陈威",
|
|
ReviewerUserID: 398,
|
|
ApproverUserID: 398,
|
|
}, {
|
|
TaskKey: "bd_research",
|
|
Title: "调研报告",
|
|
Enabled: false,
|
|
}}
|
|
if err := engine.MaterializeTemplateDocs(ctx, 6579, specs); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
specs[0].AuthorName = "陈威"
|
|
if err := engine.MaterializeTemplateDocs(ctx, 6579, specs); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
docs, err := engine.ListWorkflowDocumentsByProject(ctx, 6579)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(docs) != 1 {
|
|
t.Fatalf("documents=%d, want 1 enabled template", len(docs))
|
|
}
|
|
if docs[0].DocID != "doc_proj6579_bd_intake" || !docs[0].IsTemplateOnly || docs[0].AuthorID != 398 {
|
|
t.Fatalf("unexpected template doc: %+v", docs[0])
|
|
}
|
|
if docs[0].DutyPolicy != "author_only" {
|
|
t.Fatalf("duty policy=%q", docs[0].DutyPolicy)
|
|
}
|
|
|
|
const realID = "doc_proj6579_bd_intake"
|
|
if err := engine.MarkDocumentContentUpdated(ctx, realID, "abc", false); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
specs[0].AuthorUserID = 9
|
|
specs[0].AuthorName = "系统管理员"
|
|
specs[0].Title = "不应覆盖正文标题"
|
|
if err := engine.MaterializeTemplateDocs(ctx, 6579, specs); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
got, err := engine.GetDocument(ctx, realID)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got.IsTemplateOnly || got.AuthorID != 398 || got.Title != "用户初始需求收集表" {
|
|
t.Fatalf("real document was overwritten: %+v", got)
|
|
}
|
|
}
|
|
|
|
func TestMaterializeTemplateDocsSkipsCanonicalSibling(t *testing.T) {
|
|
ctx := context.Background()
|
|
engine := docgov.NewGovernanceEngine(nil)
|
|
if _, err := engine.CreateOrGetDocument(
|
|
ctx, "doc_proj70_intake", 70, "intake", "用户初始需求收集表", "V0.1", "",
|
|
1, "编制人", 0, "", 0, "",
|
|
); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := engine.MaterializeTemplateDocs(ctx, 70, []docgov.TemplateDocSpec{{
|
|
TaskKey: "bd_intake",
|
|
Title: "用户初始需求收集表",
|
|
StageKey: "V0.1_triage",
|
|
Enabled: true,
|
|
}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
docs, err := engine.ListWorkflowDocumentsByProject(ctx, 70)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(docs) != 1 || docs[0].DocID != "doc_proj70_intake" || docs[0].TaskKey != "intake" {
|
|
t.Fatalf("sibling bd_intake was inserted: %+v", docs)
|
|
}
|
|
}
|