Files
Agent-System/internal/docgov/materialize_test.go
T
weichenandCursor b74441fb4f fix(docgov): materialize enabled workflow docs as template records
Activation and list healing need a server-side document row per enabled task, without overwriting documents that already have content.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 05:20:01 +00:00

68 lines
1.8 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)
}
}