Approve and index only ledger blobs; task success now completes the chat turn and recomputes export columns. Co-authored-by: Cursor <cursoragent@cursor.com>
47 lines
1.5 KiB
Go
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)
|
|
}
|
|
}
|