Pin Agent-Native as a submodule so the module builds without the multi-repo sibling path. Co-authored-by: Cursor <cursoragent@cursor.com>
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package store
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"agent-squad/squad"
|
|
)
|
|
|
|
func TestRolesPersistAcrossReload(t *testing.T) {
|
|
dir := t.TempDir()
|
|
st, err := New(dir)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
reg1 := squad.NewRoleRegistry()
|
|
if err := st.LoadRoles(reg1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := reg1.Register(squad.RoleSpec{Role: "researcher", Backend: "stub", Keywords: []string{"调研"}}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// OnChange 落盘。
|
|
if _, err := os.Stat(filepath.Join(dir, "roles.d", "researcher.json")); err != nil {
|
|
t.Fatalf("role file missing: %v", err)
|
|
}
|
|
// 新注册表重载:角色可恢复。
|
|
reg2 := squad.NewRoleRegistry()
|
|
st2, _ := New(dir)
|
|
if err := st2.LoadRoles(reg2); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if spec, ok := reg2.Get("researcher"); !ok || spec.Backend != "stub" {
|
|
t.Fatalf("role not reloaded: %+v ok=%v", spec, ok)
|
|
}
|
|
}
|
|
|
|
func TestBlueprintsPersistAcrossReload(t *testing.T) {
|
|
dir := t.TempDir()
|
|
st, _ := New(dir)
|
|
bps1 := squad.NewBlueprintRegistry()
|
|
if err := st.LoadBlueprints(bps1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := bps1.Register(squad.Blueprint{
|
|
Key: "report", Title: "报告",
|
|
Steps: []squad.StepSpec{{ID: "s1", Role: "writer", Title: "成文"}},
|
|
}); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
st2, _ := New(dir)
|
|
bps2 := squad.NewBlueprintRegistry()
|
|
if err := st2.LoadBlueprints(bps2); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if bp, ok := bps2.Get("report"); !ok || len(bp.Steps) != 1 {
|
|
t.Fatalf("blueprint not reloaded: %+v ok=%v", bp, ok)
|
|
}
|
|
}
|
|
|
|
func TestLoadRolesRejectsInvalidFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
st, _ := New(dir)
|
|
if err := os.WriteFile(filepath.Join(dir, "roles.d", "bad.json"), []byte(`{"role":""}`), 0o644); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
reg := squad.NewRoleRegistry()
|
|
if err := st.LoadRoles(reg); err == nil {
|
|
t.Fatal("invalid role file must fail load")
|
|
}
|
|
}
|