Sync coordinator and async CompletionSummary use pending_author_confirmation with artifact metadata for document entry; completed only after commit. Co-authored-by: Cursor <cursoragent@cursor.com>
82 lines
2.6 KiB
Go
82 lines
2.6 KiB
Go
package bizdev_test
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"chat-agent-system/internal/bizdev"
|
|
"chat-agent-system/internal/docgov"
|
|
)
|
|
|
|
func TestTaskRunResult_PendingConfirmation_NotCompleted(t *testing.T) {
|
|
res := &bizdev.TaskRunResult{
|
|
Success: true,
|
|
ArtifactTitle: "用户初始需求收集表",
|
|
TaskKey: "intake",
|
|
RequiresAuthorApproval: true,
|
|
PendingAgentCandidateID: 42,
|
|
PendingChangeReportID: 7,
|
|
PendingRiskLevel: "high",
|
|
PendingConfirmationNote: "高风险变更待编制人确认",
|
|
DocRecord: &docgov.DocumentRecord{DocID: "doc_proj1_intake", ContentSHA256: "abc"},
|
|
}
|
|
if res.TerminalStatus() != bizdev.TaskStatusPendingAuthorConfirmation {
|
|
t.Fatalf("status=%q", res.TerminalStatus())
|
|
}
|
|
if res.IsProposalIntercept() {
|
|
t.Fatal("pending agent must not look like DocGov proposal intercept")
|
|
}
|
|
sum := res.CompletionSummary()
|
|
if strings.Contains(sum, "已完成") || strings.Contains(sum, "正文已保存") {
|
|
t.Fatalf("pending summary must not claim completed/saved: %s", sum)
|
|
}
|
|
if !strings.Contains(sum, "文档候选已生成") || !strings.Contains(sum, "待编制人确认") {
|
|
t.Fatalf("pending summary missing confirmation wording: %s", sum)
|
|
}
|
|
art := res.ArtifactMetadata()
|
|
if art["doc_id"] != "doc_proj1_intake" {
|
|
t.Fatalf("artifact doc_id=%v", art["doc_id"])
|
|
}
|
|
if art["pending_agent_candidate_id"] != int64(42) {
|
|
t.Fatalf("pending candidate meta=%v", art["pending_agent_candidate_id"])
|
|
}
|
|
if art["awaiting_author_confirmation"] != true {
|
|
t.Fatal("expected awaiting_author_confirmation")
|
|
}
|
|
}
|
|
|
|
func TestTaskRunResult_ProposalIntercept_DistinctFromPendingAgent(t *testing.T) {
|
|
res := &bizdev.TaskRunResult{
|
|
Success: false,
|
|
RequiresAuthorApproval: true,
|
|
PendingProposal: &docgov.ChangeProposal{ProposalID: "prop_1"},
|
|
ErrorReason: "认领拦截",
|
|
}
|
|
if !res.IsProposalIntercept() {
|
|
t.Fatal("expected proposal intercept")
|
|
}
|
|
if res.AwaitsAgentConfirmation() {
|
|
t.Fatal("proposal must not look like agent pending confirmation")
|
|
}
|
|
if res.TerminalStatus() != bizdev.TaskStatusFailed {
|
|
t.Fatalf("status=%q", res.TerminalStatus())
|
|
}
|
|
}
|
|
|
|
func TestTaskRunResult_CompletedOnlyWhenCommitted(t *testing.T) {
|
|
res := &bizdev.TaskRunResult{
|
|
Success: true,
|
|
ArtifactTitle: "报价核算表",
|
|
TaskKey: "quote",
|
|
QualityReport: nil,
|
|
DocRecord: &docgov.DocumentRecord{DocID: "doc_proj1_quote"},
|
|
}
|
|
if res.TerminalStatus() != bizdev.TaskStatusCompleted {
|
|
t.Fatalf("status=%q", res.TerminalStatus())
|
|
}
|
|
sum := res.CompletionSummary()
|
|
if !strings.Contains(sum, "已完成") {
|
|
t.Fatalf("completed summary: %s", sum)
|
|
}
|
|
}
|