Files
Agent-System/internal/ctxmgr/project_dialogue_test.go
T
weichen d6f5e0e28a feat(projectcontext): bizdev 注入项目对话并完成 PG 治理 E2E
新增 ctxmgr 项目对话采集并接入 PM/TE BuildSnapshot;PG 测试统一 TEST_DATABASE_URL 并使用三正式工作流 key。
2026-09-13 02:50:23 +00:00

61 lines
2.1 KiB
Go

package ctxmgr
import (
"context"
"testing"
"chat-agent-system/internal/replyexport"
)
func TestCollectProjectDialogue_ExcludesPrivateAndIncludesShared(t *testing.T) {
ctx := context.Background()
mgr := NewContextManager(nil, nil, DefaultTimeDecayConfig())
projectID := int64(501)
meta := map[string]any{"project_id": projectID}
_, _ = mgr.RecordUserMessageWithID(ctx, "sess-501", 1, "user", "[private] 不应纳入", "", "", meta)
_, _ = mgr.RecordUserMessageWithID(ctx, "sess-501", 1, "user", "项目需要支持多用户协作", "", "", meta)
_, _ = mgr.RecordUserMessageWithID(ctx, "sess-501", 1, "assistant", "好的,我会整理需求要点。", "", "", map[string]any{
"project_id": projectID,
"export_policy": string(replyexport.PolicyFull),
"content_kind": string(replyexport.KindDocumentText),
})
res, err := mgr.CollectProjectDialogue(ctx, projectID, CollectProjectDialogueOptions{})
if err != nil {
t.Fatalf("CollectProjectDialogue: %v", err)
}
if len(res.Lines) != 2 {
t.Fatalf("expected 2 shared lines, got %d: %v", len(res.Lines), res.Lines)
}
if res.ExcludedPrivate < 1 {
t.Fatalf("expected excluded private >= 1, got %d", res.ExcludedPrivate)
}
}
func TestCollectProjectDialogue_StageFilter(t *testing.T) {
ctx := context.Background()
mgr := NewContextManager(nil, nil, DefaultTimeDecayConfig())
projectID := int64(502)
_, _ = mgr.RecordUserMessageWithID(ctx, "sess-502", 1, "user", "立项阶段讨论", "", "", map[string]any{
"project_id": projectID, "stage_key": "biz_intake",
})
_, _ = mgr.RecordUserMessageWithID(ctx, "sess-502", 1, "user", "研发阶段讨论", "", "", map[string]any{
"project_id": projectID, "stage_key": "biz_feasibility",
})
res, err := mgr.CollectProjectDialogue(ctx, projectID, CollectProjectDialogueOptions{
AllowedStageKey: "biz_intake",
})
if err != nil {
t.Fatalf("CollectProjectDialogue: %v", err)
}
if len(res.Lines) != 1 {
t.Fatalf("expected 1 stage-filtered line, got %d: %v", len(res.Lines), res.Lines)
}
if res.ExcludedNoAccess != 1 {
t.Fatalf("expected 1 excluded by stage, got %d", res.ExcludedNoAccess)
}
}