84 lines
2.3 KiB
Go
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")
|
|
}
|
|
}
|