Files
Agent-System/internal/bizdev/task_result_status_test.go
T
weichenandCursor 0c6fb090ff fix(chat): show pending confirmation instead of completed for high-risk
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>
2026-09-13 09:51:15 +00:00

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)
}
}