@@ -72,7 +72,7 @@ func TestResult_MCPServers(t *testing.T) {
7272 tests := []struct {
7373 name string
7474 result Result
75- want [ ]mcp.MCPServerConfig
75+ want map [ string ]mcp.MCPServerConfig
7676 }{
7777 {
7878 name : "no MCP servers" ,
@@ -82,19 +82,21 @@ func TestResult_MCPServers(t *testing.T) {
8282 FrontMatter : markdown.TaskFrontMatter {},
8383 },
8484 },
85- want : [ ]mcp.MCPServerConfig {},
85+ want : map [ string ]mcp.MCPServerConfig {},
8686 },
8787 {
88- name : "MCP servers from rules only " ,
88+ name : "MCP servers from rules with IDs " ,
8989 result : Result {
9090 Rules : []markdown.Markdown [markdown.RuleFrontMatter ]{
9191 {
9292 FrontMatter : markdown.RuleFrontMatter {
93+ ID : "jira-server" ,
9394 MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeStdio , Command : "jira" },
9495 },
9596 },
9697 {
9798 FrontMatter : markdown.RuleFrontMatter {
99+ ID : "api-server" ,
98100 MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeHTTP , URL : "https://api.example.com" },
99101 },
100102 },
@@ -103,9 +105,33 @@ func TestResult_MCPServers(t *testing.T) {
103105 FrontMatter : markdown.TaskFrontMatter {},
104106 },
105107 },
106- want : []mcp.MCPServerConfig {
107- {Type : mcp .TransportTypeStdio , Command : "jira" },
108- {Type : mcp .TransportTypeHTTP , URL : "https://api.example.com" },
108+ want : map [string ]mcp.MCPServerConfig {
109+ "jira-server" : {Type : mcp .TransportTypeStdio , Command : "jira" },
110+ "api-server" : {Type : mcp .TransportTypeHTTP , URL : "https://api.example.com" },
111+ },
112+ },
113+ {
114+ name : "MCP servers from rules without IDs" ,
115+ result : Result {
116+ Rules : []markdown.Markdown [markdown.RuleFrontMatter ]{
117+ {
118+ FrontMatter : markdown.RuleFrontMatter {
119+ MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeStdio , Command : "server1" },
120+ },
121+ },
122+ {
123+ FrontMatter : markdown.RuleFrontMatter {
124+ MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeStdio , Command : "server2" },
125+ },
126+ },
127+ },
128+ Task : markdown.Markdown [markdown.TaskFrontMatter ]{
129+ FrontMatter : markdown.TaskFrontMatter {},
130+ },
131+ },
132+ want : map [string ]mcp.MCPServerConfig {
133+ "rule-0" : {Type : mcp .TransportTypeStdio , Command : "server1" },
134+ "rule-1" : {Type : mcp .TransportTypeStdio , Command : "server2" },
109135 },
110136 },
111137 {
@@ -114,25 +140,29 @@ func TestResult_MCPServers(t *testing.T) {
114140 Rules : []markdown.Markdown [markdown.RuleFrontMatter ]{
115141 {
116142 FrontMatter : markdown.RuleFrontMatter {
143+ ID : "server1-id" ,
117144 MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeStdio , Command : "server1" },
118145 },
119146 },
120147 {
121148 FrontMatter : markdown.RuleFrontMatter {
149+ ID : "server2-id" ,
122150 MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeStdio , Command : "server2" },
123151 },
124152 },
125153 {
126- FrontMatter : markdown.RuleFrontMatter {},
154+ FrontMatter : markdown.RuleFrontMatter {
155+ ID : "empty-rule" ,
156+ },
127157 },
128158 },
129159 Task : markdown.Markdown [markdown.TaskFrontMatter ]{
130160 FrontMatter : markdown.TaskFrontMatter {},
131161 },
132162 },
133- want : [ ]mcp.MCPServerConfig {
134- {Type : mcp .TransportTypeStdio , Command : "server1" },
135- {Type : mcp .TransportTypeStdio , Command : "server2" },
163+ want : map [ string ]mcp.MCPServerConfig {
164+ "server1-id" : {Type : mcp .TransportTypeStdio , Command : "server1" },
165+ "server2-id" : {Type : mcp .TransportTypeStdio , Command : "server2" },
136166 // Empty rule MCP server is filtered out
137167 },
138168 },
@@ -141,17 +171,51 @@ func TestResult_MCPServers(t *testing.T) {
141171 result : Result {
142172 Rules : []markdown.Markdown [markdown.RuleFrontMatter ]{
143173 {
144- FrontMatter : markdown.RuleFrontMatter {},
174+ FrontMatter : markdown.RuleFrontMatter {
175+ ID : "no-server-rule" ,
176+ },
145177 },
146178 },
147179 Task : markdown.Markdown [markdown.TaskFrontMatter ]{
148180 FrontMatter : markdown.TaskFrontMatter {},
149181 },
150182 },
151- want : [ ]mcp.MCPServerConfig {
183+ want : map [ string ]mcp.MCPServerConfig {
152184 // Empty rule MCP server is filtered out
153185 },
154186 },
187+ {
188+ name : "mixed rules with and without IDs" ,
189+ result : Result {
190+ Rules : []markdown.Markdown [markdown.RuleFrontMatter ]{
191+ {
192+ FrontMatter : markdown.RuleFrontMatter {
193+ ID : "explicit-id" ,
194+ MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeStdio , Command : "server1" },
195+ },
196+ },
197+ {
198+ FrontMatter : markdown.RuleFrontMatter {
199+ MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeStdio , Command : "server2" },
200+ },
201+ },
202+ {
203+ FrontMatter : markdown.RuleFrontMatter {
204+ ID : "another-id" ,
205+ MCPServer : mcp.MCPServerConfig {Type : mcp .TransportTypeHTTP , URL : "https://example.com" },
206+ },
207+ },
208+ },
209+ Task : markdown.Markdown [markdown.TaskFrontMatter ]{
210+ FrontMatter : markdown.TaskFrontMatter {},
211+ },
212+ },
213+ want : map [string ]mcp.MCPServerConfig {
214+ "explicit-id" : {Type : mcp .TransportTypeStdio , Command : "server1" },
215+ "rule-1" : {Type : mcp .TransportTypeStdio , Command : "server2" },
216+ "another-id" : {Type : mcp .TransportTypeHTTP , URL : "https://example.com" },
217+ },
218+ },
155219 }
156220
157221 for _ , tt := range tests {
@@ -160,22 +224,37 @@ func TestResult_MCPServers(t *testing.T) {
160224
161225 if len (got ) != len (tt .want ) {
162226 t .Errorf ("MCPServers() returned %d servers, want %d" , len (got ), len (tt .want ))
227+ t .Logf ("Got keys: %v" , mapKeys (got ))
228+ t .Logf ("Want keys: %v" , mapKeys (tt .want ))
163229 return
164230 }
165231
166- for i , wantServer := range tt .want {
167- gotServer := got [i ]
232+ for key , wantServer := range tt .want {
233+ gotServer , ok := got [key ]
234+ if ! ok {
235+ t .Errorf ("MCPServers() missing key %q" , key )
236+ continue
237+ }
168238
169239 if gotServer .Type != wantServer .Type {
170- t .Errorf ("MCPServers()[%d ].Type = %v, want %v" , i , gotServer .Type , wantServer .Type )
240+ t .Errorf ("MCPServers()[%q ].Type = %v, want %v" , key , gotServer .Type , wantServer .Type )
171241 }
172242 if gotServer .Command != wantServer .Command {
173- t .Errorf ("MCPServers()[%d ].Command = %q, want %q" , i , gotServer .Command , wantServer .Command )
243+ t .Errorf ("MCPServers()[%q ].Command = %q, want %q" , key , gotServer .Command , wantServer .Command )
174244 }
175245 if gotServer .URL != wantServer .URL {
176- t .Errorf ("MCPServers()[%d ].URL = %q, want %q" , i , gotServer .URL , wantServer .URL )
246+ t .Errorf ("MCPServers()[%q ].URL = %q, want %q" , key , gotServer .URL , wantServer .URL )
177247 }
178248 }
179249 })
180250 }
181251}
252+
253+ // Helper function to get map keys for debugging
254+ func mapKeys (m map [string ]mcp.MCPServerConfig ) []string {
255+ keys := make ([]string , 0 , len (m ))
256+ for k := range m {
257+ keys = append (keys , k )
258+ }
259+ return keys
260+ }
0 commit comments