Files

90 lines
2.5 KiB
Go

package ctxmgr
import (
"context"
"testing"
"time"
)
func TestChatDigest_MemoryMode(t *testing.T) {
mgr := NewContextManager(nil, nil, DefaultTimeDecayConfig())
ctx := context.Background()
sessionID := "sess_test_digest_001"
dayKey := "2026-09-09"
now := time.Now()
mgr.messages[sessionID] = []ChatMessageRecord{
{
ID: 101,
SessionID: sessionID,
Role: "user",
Content: "我们今天需要审议4K荧光内窥镜的光学系统设计规格,并决定是否启动二期试产",
DayKey: dayKey,
Category: "review",
CreatedAt: now.Add(-6 * time.Hour),
},
{
ID: 102,
SessionID: sessionID,
Role: "assistant",
Content: "已为您调出设计规格书V0.5。经与审核人确认,同意进入小批量试产阶段",
Intent: "DOCGOV_PASS",
DayKey: dayKey,
Category: "milestone",
Metadata: map[string]any{
"milestone": true,
"doc_title": "4K内窥镜试产规格书",
"doc_id": "doc-trial-001",
},
CreatedAt: now.Add(-5 * time.Hour),
},
{
ID: 103,
SessionID: sessionID,
Role: "user",
Content: "关于灭菌验证的标准参数待确认?下周是否有检验所排期?",
DayKey: dayKey,
Category: "consult",
CreatedAt: now.Add(-4 * time.Hour),
},
}
t.Run("生成单日摘要", func(t *testing.T) {
digest, err := mgr.GenerateDailyDigest(ctx, sessionID, dayKey)
if err != nil {
t.Fatalf("GenerateDailyDigest failed: %v", err)
}
if digest == nil {
t.Fatalf("expected non-nil digest")
}
if digest.DayKey != dayKey {
t.Errorf("expected dayKey %s, got %s", dayKey, digest.DayKey)
}
if digest.FirstMessageID != 101 || digest.LastMessageID != 103 {
t.Errorf("expected msg range [101, 103], got [%d, %d]", digest.FirstMessageID, digest.LastMessageID)
}
if len(digest.Decisions) == 0 {
t.Errorf("expected decisions to be extracted from milestone message")
}
if len(digest.Deliverables) == 0 {
t.Errorf("expected deliverables to be extracted from metadata")
}
if len(digest.OpenQuestions) == 0 {
t.Errorf("expected open questions to be extracted from question message")
}
})
t.Run("查询每日摘要列表", func(t *testing.T) {
digests, err := mgr.ListDailyDigests(ctx, sessionID, "", "")
if err != nil {
t.Fatalf("ListDailyDigests failed: %v", err)
}
if len(digests) != 1 {
t.Fatalf("expected 1 digest in memory, got %d", len(digests))
}
if digests[0].DayKey != dayKey {
t.Errorf("expected dayKey %s, got %s", dayKey, digests[0].DayKey)
}
})
}