90 lines
2.5 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|