Files
Agent-System/internal/squad/context_test.go
T

84 lines
2.3 KiB
Go

package squad_test
import (
"os"
"path/filepath"
"strings"
"testing"
"chat-agent-system/internal/squad"
)
func TestContextManager_InjectAndFormat(t *testing.T) {
tmpDir := t.TempDir()
engine := squad.NewWorkspaceEngine()
ws, err := engine.PrepareWorkspace(squad.WorkspacePrepareRequest{
WorkDir: tmpDir,
TaskKey: "research",
StageTitle: "技术与市场调研报告",
ProjectName: "微创吻合器",
CustomerName: "水木测试医疗",
Materials: []squad.MaterialItem{
{Filename: "PIR.docx.txt", Content: []byte("客户要求符合YY 9706.210标准,具备双通道输出。")},
},
KnowledgeHits: []squad.KnowledgeHit{
{
DocCode: "GB 9706.1-2020",
Category: "standards",
Title: "医用电气设备",
Content: "防电击与基本性能通用要求",
Source: "法规知识库",
},
},
PriorDocs: []squad.PriorDocItem{
{
DocKey: "BD-INTAKE",
Title: "用户初始需求收集表",
Filename: "BD-INTAKE.md",
Content: "# 用户初始需求收集表\n\n已锁定客户为水木测试医疗。\n",
Stage: "intake",
},
},
})
if err != nil {
t.Fatalf("PrepareWorkspace failed: %v", err)
}
cm := squad.NewContextManager()
// 1. 验证 LoadContextIndex
idx, err := cm.LoadContextIndex(ws.WorkDir)
if err != nil {
t.Fatalf("LoadContextIndex failed: %v", err)
}
if len(idx.Items) < 4 {
t.Errorf("expected at least 4 context items, got %d", len(idx.Items))
}
// 2. 验证 context/README.md 包含权威度说明
readmePath := filepath.Join(ws.WorkDir, "context", "README.md")
readmeContent, err := os.ReadFile(readmePath)
if err != nil {
t.Fatalf("read context/README.md failed: %v", err)
}
if !strings.Contains(string(readmeContent), "authoritative") {
t.Errorf("README.md missing 'authoritative' level")
}
// 3. 验证 FormatPromptContext 能为专员生成清晰的上下文导引
navPrompt, err := cm.FormatPromptContext(ws.WorkDir, "writer")
if err != nil {
t.Fatalf("FormatPromptContext failed: %v", err)
}
if !strings.Contains(navPrompt, "微创吻合器") {
t.Errorf("navPrompt missing ProjectName")
}
if !strings.Contains(navPrompt, "PIR.docx.txt") {
t.Errorf("navPrompt missing material reference PIR.docx.txt")
}
if !strings.Contains(navPrompt, "GB 9706.1-2020") {
t.Errorf("navPrompt missing standard reference GB 9706.1-2020")
}
}