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