@@ -260,20 +260,62 @@ func TestSessionResourcesWithGlobalResources(t *testing.T) {
260260 )
261261 require .NoError (t , err )
262262
263- // Get effective resources (global + session)
264- sessionResources := session . GetSessionResources ( )
263+ // Create a context with the session for server operations
264+ sessionCtx := server . WithContext ( ctx , session )
265265
266- // Session should have 2 session-specific resources
267- assert .Len (t , sessionResources , 2 )
266+ // Test ListResources to verify merge behavior
267+ listResult , rerr := server .handleListResources (sessionCtx , "test-id" , mcp.ListResourcesRequest {})
268+ require .Nil (t , rerr )
269+ require .NotNil (t , listResult )
268270
269- // Verify that session resource overrides work correctly
270- overriddenResource := sessionResources ["test://global1" ]
271- assert .Equal (t , "Session Override Resource" , overriddenResource .Resource .Name )
271+ // Should have 3 resources: global2, session-overridden global1, and session1
272+ assert .Len (t , listResult .Resources , 3 )
272273
273- // Test read operations use correct handlers
274- contents , err := sessionResources ["test://global1" ].Handler (ctx , mcp.ReadResourceRequest {Params : mcp.ReadResourceParams {URI : "test://global1" }})
275- require .NoError (t , err )
276- assert .Equal (t , "session override content" , contents [0 ].(mcp.TextResourceContents ).Text )
274+ // Verify all expected resources are present
275+ resourceMap := make (map [string ]mcp.Resource )
276+ for _ , r := range listResult .Resources {
277+ resourceMap [r .URI ] = r
278+ }
279+
280+ // Global resource 2 should appear unchanged
281+ assert .Contains (t , resourceMap , "test://global2" )
282+ assert .Equal (t , "Global Resource 2" , resourceMap ["test://global2" ].Name )
283+
284+ // Global resource 1 should be overridden by session resource
285+ assert .Contains (t , resourceMap , "test://global1" )
286+ assert .Equal (t , "Session Override Resource" , resourceMap ["test://global1" ].Name )
287+
288+ // Session-only resource should appear
289+ assert .Contains (t , resourceMap , "test://session1" )
290+ assert .Equal (t , "Session Resource 1" , resourceMap ["test://session1" ].Name )
291+
292+ // Test ReadResource to verify handlers are correctly resolved
293+ // Test reading the overridden resource - should use session handler
294+ readResult1 , rerr := server .handleReadResource (sessionCtx , "test-id" , mcp.ReadResourceRequest {
295+ Params : mcp.ReadResourceParams {URI : "test://global1" },
296+ })
297+ require .Nil (t , rerr )
298+ require .NotNil (t , readResult1 )
299+ assert .Len (t , readResult1 .Contents , 1 )
300+ assert .Equal (t , "session override content" , readResult1 .Contents [0 ].(mcp.TextResourceContents ).Text )
301+
302+ // Test reading global resource that wasn't overridden
303+ readResult2 , rerr := server .handleReadResource (sessionCtx , "test-id" , mcp.ReadResourceRequest {
304+ Params : mcp.ReadResourceParams {URI : "test://global2" },
305+ })
306+ require .Nil (t , rerr )
307+ require .NotNil (t , readResult2 )
308+ assert .Len (t , readResult2 .Contents , 1 )
309+ assert .Equal (t , "global content 2" , readResult2 .Contents [0 ].(mcp.TextResourceContents ).Text )
310+
311+ // Test reading session-only resource
312+ readResult3 , rerr := server .handleReadResource (sessionCtx , "test-id" , mcp.ReadResourceRequest {
313+ Params : mcp.ReadResourceParams {URI : "test://session1" },
314+ })
315+ require .Nil (t , rerr )
316+ require .NotNil (t , readResult3 )
317+ assert .Len (t , readResult3 .Contents , 1 )
318+ assert .Equal (t , "session content 1" , readResult3 .Contents [0 ].(mcp.TextResourceContents ).Text )
277319}
278320
279321// TestAddSessionResourcesUninitialized tests adding resources to uninitialized session
0 commit comments