Files
Agent-System/internal/squad/rdev_leader_prompt_test.go
T
agent-bot 2c75dcaf69
CI / go-vet (pull_request) Successful in 13s
CI / short-tests-report (pull_request) Failing after 35s
CI / backup-restore-drill (pull_request) Successful in 36s
CI / web (pull_request) Successful in 32s
refactor(squad): AssetProvider port replaces direct template dependency
KTD1 fifth step (behavior preserved):
- squad.AssetProvider{DocTemplate,RenderDoc,AgentInstruction,
  AgentInstructionFile} injected via Options.Assets into Service,
  WorkspaceEngine and AdaptivePlanner
- bizdev templateAssetProvider maps port to internal/template (assembly side)
- nil-provider paths degrade to the same fallbacks the old error branches
  used (placeholder template, role header) — fail-visible, no guessing
- squad -> template import eliminated; arch edge moved bizdev->template
- verified: build/vet/arch green, squad+bizdev short tests pass
2026-09-29 06:29:51 +00:00

74 lines
2.0 KiB
Go

package squad_test
import (
"os"
"path/filepath"
"strings"
"testing"
"chat-agent-system/internal/squad"
)
func TestRDevLeaderPrompt_UsesDesignControlNotBusiness(t *testing.T) {
tmpDir := t.TempDir()
engine := squad.NewWorkspaceEngine(nil)
ws, err := engine.PrepareWorkspace(squad.WorkspacePrepareRequest{
WorkDir: filepath.Join(tmpDir, "rd_design_input_spec"),
TaskKey: "rd_design_input_spec",
StageTitle: "设计输入规格书",
ProjectName: "rdev-s0-prompt",
Backend: "stub",
})
if err != nil {
t.Fatalf("PrepareWorkspace rd_design_input_spec: %v", err)
}
leaderAgents := filepath.Join(ws.WorkDir, "tasks", "04_review", "AGENTS.md")
body, err := os.ReadFile(leaderAgents)
if err != nil {
t.Fatalf("read leader AGENTS.md: %v", err)
}
text := string(body)
if !strings.Contains(text, "设计控制") {
t.Fatalf("rdev leader AGENTS.md must mention 设计控制; got snippet:\n%s", truncate(text, 400))
}
for _, banned := range []string{"商务对接负责人", "CDO"} {
if strings.Contains(text, banned) {
t.Fatalf("rdev leader AGENTS.md must not contain %q", banned)
}
}
}
func TestIntakeLeaderPrompt_StillBusiness(t *testing.T) {
tmpDir := t.TempDir()
engine := squad.NewWorkspaceEngine(nil)
ws, err := engine.PrepareWorkspace(squad.WorkspacePrepareRequest{
WorkDir: filepath.Join(tmpDir, "intake"),
TaskKey: "intake",
StageTitle: "用户初始需求收集表",
ProjectName: "intake-prompt-regression",
Backend: "stub",
})
if err != nil {
t.Fatalf("PrepareWorkspace intake: %v", err)
}
leaderAgents := filepath.Join(ws.WorkDir, "tasks", "03_review", "AGENTS.md")
body, err := os.ReadFile(leaderAgents)
if err != nil {
t.Fatalf("read intake leader AGENTS.md: %v", err)
}
if !strings.Contains(string(body), "商务对接负责人") {
t.Fatalf("intake leader AGENTS.md must retain 商务对接负责人")
}
}
func truncate(s string, n int) string {
if len(s) <= n {
return s
}
return s[:n] + "..."
}