Files
weichenandCursor 8a82f789d1 feat(docgov): freeze review snapshots and terminal-finalize assistant turns
Approve and index only ledger blobs; task success now completes the chat turn and recomputes export columns.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-14 10:51:33 +00:00

47 lines
1.5 KiB
Go

package ctxmgr
import (
"context"
"testing"
"chat-agent-system/internal/replyexport"
)
func TestFinalizeAssistantTaskMessageRecalculatesExportColumns(t *testing.T) {
m := NewContextManager(nil, nil, TimeDecayConfig{})
ctx := context.Background()
id, err := m.RecordUserMessageWithID(ctx, "sess-fav", 1, "assistant", "占位", "", "", map[string]any{"task_status": "pending"})
if err != nil || id <= 0 {
t.Fatalf("record: %v %d", err, id)
}
body := "# 完整助手终态正文\n\n这是一段足够长的结构化说明,用于重算 export_policy。"
if err := m.FinalizeAssistantTaskMessage(ctx, id, body, map[string]any{}, "completed"); err != nil {
t.Fatal(err)
}
msg, err := m.GetMessageByID(ctx, id)
if err != nil {
t.Fatal(err)
}
if msg.ExportPolicy != string(replyexport.PolicyFull) {
t.Fatalf("export_policy=%q", msg.ExportPolicy)
}
if msg.ContentSha256 == "" || msg.Content != body {
t.Fatalf("sha/body missing: %+v", msg)
}
}
func TestCompleteChatTurnAfterFinalize(t *testing.T) {
m := NewContextManager(nil, nil, TimeDecayConfig{})
ctx := context.Background()
if _, err := m.AcquireChatTurn(ctx, "sess-fav", "turn-1", "abc", "req-1", 1, 9); err != nil {
t.Fatal(err)
}
if err := m.CompleteChatTurn(ctx, "sess-fav", "turn-1", 42); err != nil {
t.Fatal(err)
}
rec, err := m.GetChatTurn(ctx, "sess-fav", "turn-1")
if err != nil || rec.Status != TurnStatusCompleted || rec.AssistantMessageID != 42 || rec.CompletedAt == nil {
t.Fatalf("turn not completed: %+v %v", rec, err)
}
}