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(nil) 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") } }