@@ -376,3 +376,131 @@ func Test_GetTeams(t *testing.T) {
376376 })
377377 }
378378}
379+
380+ func Test_GetTeamMembers (t * testing.T ) {
381+ t .Parallel ()
382+
383+ tool , _ := GetTeamMembers (nil , translations .NullTranslationHelper )
384+ require .NoError (t , toolsnaps .Test (tool .Name , tool ))
385+
386+ assert .Equal (t , "get_team_members" , tool .Name )
387+ assert .True (t , * tool .Annotations .ReadOnlyHint , "get_team_members tool should be read-only" )
388+
389+ mockTeamMembersResponse := githubv4mock .DataResponse (map [string ]any {
390+ "organization" : map [string ]any {
391+ "team" : map [string ]any {
392+ "members" : map [string ]any {
393+ "nodes" : []map [string ]any {
394+ {
395+ "login" : "user1" ,
396+ },
397+ {
398+ "login" : "user2" ,
399+ },
400+ },
401+ },
402+ },
403+ },
404+ })
405+
406+ mockNoMembersResponse := githubv4mock .DataResponse (map [string ]any {
407+ "organization" : map [string ]any {
408+ "team" : map [string ]any {
409+ "members" : map [string ]any {
410+ "nodes" : []map [string ]any {},
411+ },
412+ },
413+ },
414+ })
415+
416+ tests := []struct {
417+ name string
418+ stubbedGetGQLClientFn GetGQLClientFn
419+ requestArgs map [string ]any
420+ expectToolError bool
421+ expectedToolErrMsg string
422+ expectedMembersCount int
423+ }{
424+ {
425+ name : "successful get team members" ,
426+ stubbedGetGQLClientFn : func (_ context.Context ) (* githubv4.Client , error ) {
427+ queryStr := "query($org:String!$teamSlug:String!){organization(login: $org){team(slug: $teamSlug){members(first: 100){nodes{login}}}}}"
428+ vars := map [string ]interface {}{
429+ "org" : "testorg" ,
430+ "teamSlug" : "testteam" ,
431+ }
432+ matcher := githubv4mock .NewQueryMatcher (queryStr , vars , mockTeamMembersResponse )
433+ httpClient := githubv4mock .NewMockedHTTPClient (matcher )
434+ return githubv4 .NewClient (httpClient ), nil
435+ },
436+ requestArgs : map [string ]any {
437+ "org" : "testorg" ,
438+ "team_slug" : "testteam" ,
439+ },
440+ expectToolError : false ,
441+ expectedMembersCount : 2 ,
442+ },
443+ {
444+ name : "team with no members" ,
445+ stubbedGetGQLClientFn : func (_ context.Context ) (* githubv4.Client , error ) {
446+ queryStr := "query($org:String!$teamSlug:String!){organization(login: $org){team(slug: $teamSlug){members(first: 100){nodes{login}}}}}"
447+ vars := map [string ]interface {}{
448+ "org" : "testorg" ,
449+ "teamSlug" : "emptyteam" ,
450+ }
451+ matcher := githubv4mock .NewQueryMatcher (queryStr , vars , mockNoMembersResponse )
452+ httpClient := githubv4mock .NewMockedHTTPClient (matcher )
453+ return githubv4 .NewClient (httpClient ), nil
454+ },
455+ requestArgs : map [string ]any {
456+ "org" : "testorg" ,
457+ "team_slug" : "emptyteam" ,
458+ },
459+ expectToolError : false ,
460+ expectedMembersCount : 0 ,
461+ },
462+ {
463+ name : "getting GraphQL client fails" ,
464+ stubbedGetGQLClientFn : func (_ context.Context ) (* githubv4.Client , error ) {
465+ return nil , fmt .Errorf ("GraphQL client error" )
466+ },
467+ requestArgs : map [string ]any {
468+ "org" : "testorg" ,
469+ "team_slug" : "testteam" ,
470+ },
471+ expectToolError : true ,
472+ expectedToolErrMsg : "failed to get GitHub GQL client: GraphQL client error" ,
473+ },
474+ }
475+
476+ for _ , tc := range tests {
477+ t .Run (tc .name , func (t * testing.T ) {
478+ _ , handler := GetTeamMembers (tc .stubbedGetGQLClientFn , translations .NullTranslationHelper )
479+
480+ request := createMCPRequest (tc .requestArgs )
481+ result , err := handler (context .Background (), request )
482+ require .NoError (t , err )
483+ textContent := getTextResult (t , result )
484+
485+ if tc .expectToolError {
486+ assert .True (t , result .IsError , "expected tool call result to be an error" )
487+ assert .Contains (t , textContent .Text , tc .expectedToolErrMsg )
488+ return
489+ }
490+
491+ var members []string
492+ err = json .Unmarshal ([]byte (textContent .Text ), & members )
493+ require .NoError (t , err )
494+
495+ assert .Len (t , members , tc .expectedMembersCount )
496+
497+ if tc .expectedMembersCount > 0 {
498+ assert .Equal (t , "user1" , members [0 ])
499+
500+ if tc .expectedMembersCount > 1 {
501+ assert .Equal (t , "user2" , members [1 ])
502+ }
503+ }
504+ })
505+ }
506+ }
0 commit comments