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