package zed import ( "os" "path/filepath" "testing" "github.com/zzet/gortex/internal/agents" "github.com/zzet/gortex/internal/agents/agentstest" ) // TestZedUsesContextServersKey verifies Zed's idiosyncratic schema: // top-level key is "context_servers" (not mcpServers or servers). // A regression here would silently break the integration. func TestZedUsesContextServersKey(t *testing.T) { env, _ := agentstest.NewEnv(t) // Detection: create the per-OS settings dir so Detect() succeeds. p := userSettingsPath(env.Home) if p == "" { t.Skip("unsupported OS for zed test") } if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil { t.Fatal(err) } a := New() res, err := a.Apply(env, agents.ApplyOpts{}) if err != nil { t.Fatalf("apply: %v", err) } // Two creates: Zed's settings.json for the context_servers stanza // plus the project-root .rules file the Agent panel reads on // every turn. agentstest.AssertCountsByAction(t, res, map[agents.ActionKind]int{agents.ActionCreate: 2}) cfg := agentstest.ReadJSON(t, p) if _, ok := cfg["mcpServers"]; ok { t.Fatalf("should not write mcpServers — Zed uses context_servers: %v", cfg) } servers, ok := cfg["context_servers"].(map[string]any) if !ok { t.Fatalf("missing context_servers key: %v", cfg) } gortex, ok := servers["gortex"].(map[string]any) if !ok { t.Fatalf("gortex entry missing: %v", servers) } if gortex["source"] != "custom" { t.Fatalf("expected source=custom, got %v", gortex["source"]) } }