64 lines
2.1 KiB
Go
64 lines
2.1 KiB
Go
package ctxmgr_test
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
"chat-agent-system/internal/ctxmgr"
|
|
)
|
|
|
|
func TestContextManager_ChatHistoryAndSessionRestoration(t *testing.T) {
|
|
mgr := ctxmgr.NewContextManager(nil, nil, ctxmgr.DefaultTimeDecayConfig())
|
|
ctx := context.Background()
|
|
|
|
sessID := "sess_history_test_001"
|
|
userID := int64(101)
|
|
|
|
// 1. 模拟记录多轮会话
|
|
_ = mgr.RecordUserMessage(ctx, sessID, userID, "user", "我想了解超声手术刀注册审批要求", "QUERY_PROGRESS", "PREEMPT", nil)
|
|
time.Sleep(10 * time.Millisecond)
|
|
_ = mgr.RecordUserMessage(ctx, sessID, 0, "assistant", "超声软组织切割设备通常按二类或三类申报,需执行GB 9706.1-2020", "ADVISOR_BRIEF", "EXPECTATION_HIT", nil)
|
|
time.Sleep(10 * time.Millisecond)
|
|
_ = mgr.RecordUserMessage(ctx, sessID, userID, "user", "帮我查查大致工期和报价", "SUPPLEMENT_INFO", "EXPECTATION_HIT", nil)
|
|
|
|
// 2. 分页查询历史消息
|
|
msgs, err := mgr.GetChatHistory(ctx, sessID, 10, 0)
|
|
if err != nil {
|
|
t.Fatalf("GetChatHistory failed: %v", err)
|
|
}
|
|
if len(msgs) != 3 {
|
|
t.Fatalf("expected 3 messages, got %d", len(msgs))
|
|
}
|
|
if msgs[0].Content != "我想了解超声手术刀注册审批要求" {
|
|
t.Errorf("unexpected first message: %s", msgs[0].Content)
|
|
}
|
|
|
|
// 3. 查询会话列表
|
|
sessions, err := mgr.ListChatSessions(ctx, ctxmgr.SessionFilter{UserID: userID, Limit: 10})
|
|
if err != nil {
|
|
t.Fatalf("ListChatSessions failed: %v", err)
|
|
}
|
|
if len(sessions) != 1 {
|
|
t.Fatalf("expected 1 session, got %d", len(sessions))
|
|
}
|
|
if sessions[0].SessionID != sessID || sessions[0].MessageCount != 3 {
|
|
t.Errorf("session summary mismatch: %+v", sessions[0])
|
|
}
|
|
|
|
// 4. 从历史中恢复上下文与消息队列
|
|
restored, err := mgr.RestoreSessionContext(ctx, sessID)
|
|
if err != nil {
|
|
t.Fatalf("RestoreSessionContext failed: %v", err)
|
|
}
|
|
if restored == nil {
|
|
t.Fatalf("restored context is nil")
|
|
}
|
|
if len(restored.Messages) != 3 {
|
|
t.Fatalf("restored chat messages expected 3, got %d", len(restored.Messages))
|
|
}
|
|
if restored.Messages[2].Content != "帮我查查大致工期和报价" {
|
|
t.Errorf("unexpected last message: %s", restored.Messages[2].Content)
|
|
}
|
|
}
|