@@ -772,22 +772,118 @@ func TestGranularUpdatePullRequestState(t *testing.T) {
772772}
773773
774774func TestGranularRequestPullRequestReviewers (t * testing.T ) {
775- client := mustNewGHClient (t , MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
776- PostReposPullsRequestedReviewersByOwnerByRepoByPullNumber : mockResponse (t , http .StatusOK , & gogithub.PullRequest {Number : gogithub .Ptr (1 )}),
777- }))
778- deps := BaseDeps {Client : client }
779775 serverTool := GranularRequestPullRequestReviewers (translations .NullTranslationHelper )
780- handler := serverTool .Handler (deps )
781776
782- request := createMCPRequest (map [string ]any {
783- "owner" : "owner" ,
784- "repo" : "repo" ,
785- "pullNumber" : float64 (1 ),
786- "reviewers" : []string {"user1" , "user2" },
787- })
788- result , err := handler (ContextWithDeps (context .Background (), deps ), & request )
789- require .NoError (t , err )
790- assert .False (t , result .IsError )
777+ tests := []struct {
778+ name string
779+ requestArgs map [string ]any
780+ expectedBody map [string ]any
781+ expectedErrMsg string
782+ }{
783+ {
784+ name : "user reviewers" ,
785+ requestArgs : map [string ]any {
786+ "owner" : "owner" ,
787+ "repo" : "repo" ,
788+ "pullNumber" : float64 (1 ),
789+ "reviewers" : []string {"user1" , "user2" },
790+ },
791+ expectedBody : map [string ]any {
792+ "reviewers" : []any {"user1" , "user2" },
793+ },
794+ },
795+ {
796+ name : "team reviewers" ,
797+ requestArgs : map [string ]any {
798+ "owner" : "owner" ,
799+ "repo" : "repo" ,
800+ "pullNumber" : float64 (1 ),
801+ "reviewers" : []string {"user1" },
802+ "team_reviewers" : []string {"team-slug" , "platform" },
803+ },
804+ expectedBody : map [string ]any {
805+ "reviewers" : []any {"user1" },
806+ "team_reviewers" : []any {"team-slug" , "platform" },
807+ },
808+ },
809+ {
810+ name : "team reviewers only" ,
811+ requestArgs : map [string ]any {
812+ "owner" : "owner" ,
813+ "repo" : "repo" ,
814+ "pullNumber" : float64 (1 ),
815+ "team_reviewers" : []string {"platform" },
816+ },
817+ expectedBody : map [string ]any {
818+ "team_reviewers" : []any {"platform" },
819+ },
820+ },
821+ {
822+ name : "missing reviewers" ,
823+ requestArgs : map [string ]any {
824+ "owner" : "owner" ,
825+ "repo" : "repo" ,
826+ "pullNumber" : float64 (1 ),
827+ },
828+ expectedErrMsg : "missing required parameter: reviewers or team_reviewers" ,
829+ },
830+ {
831+ name : "team reviewer in reviewers" ,
832+ requestArgs : map [string ]any {
833+ "owner" : "owner" ,
834+ "repo" : "repo" ,
835+ "pullNumber" : float64 (1 ),
836+ "reviewers" : []string {"owner/team-slug" },
837+ },
838+ expectedErrMsg : `invalid reviewer "owner/team-slug": expected GitHub username; use team_reviewers for team slugs` ,
839+ },
840+ {
841+ name : "malformed reviewer" ,
842+ requestArgs : map [string ]any {
843+ "owner" : "owner" ,
844+ "repo" : "repo" ,
845+ "pullNumber" : float64 (1 ),
846+ "reviewers" : []string {"owner/team-slug/extra" },
847+ },
848+ expectedErrMsg : `invalid reviewer "owner/team-slug/extra": expected GitHub username; use team_reviewers for team slugs` ,
849+ },
850+ {
851+ name : "invalid team reviewers slug" ,
852+ requestArgs : map [string ]any {
853+ "owner" : "owner" ,
854+ "repo" : "repo" ,
855+ "pullNumber" : float64 (1 ),
856+ "team_reviewers" : []string {"owner/team-slug" },
857+ },
858+ expectedErrMsg : `invalid team reviewer "owner/team-slug": expected team slug` ,
859+ },
860+ }
861+
862+ for _ , tc := range tests {
863+ t .Run (tc .name , func (t * testing.T ) {
864+ mockedClient := MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {})
865+ if tc .expectedBody != nil {
866+ mockedClient = MockHTTPClientWithHandlers (map [string ]http.HandlerFunc {
867+ PostReposPullsRequestedReviewersByOwnerByRepoByPullNumber : expectRequestBody (t , tc .expectedBody ).andThen (
868+ mockResponse (t , http .StatusOK , & gogithub.PullRequest {Number : gogithub .Ptr (1 )}),
869+ ),
870+ })
871+ }
872+ client := mustNewGHClient (t , mockedClient )
873+ deps := BaseDeps {Client : client }
874+ handler := serverTool .Handler (deps )
875+
876+ request := createMCPRequest (tc .requestArgs )
877+ result , err := handler (ContextWithDeps (context .Background (), deps ), & request )
878+ require .NoError (t , err )
879+ if tc .expectedErrMsg != "" {
880+ require .True (t , result .IsError )
881+ assert .Contains (t , getErrorResult (t , result ).Text , tc .expectedErrMsg )
882+ return
883+ }
884+ assert .False (t , result .IsError )
885+ })
886+ }
791887}
792888
793889func TestGranularCreatePullRequestReview (t * testing.T ) {
0 commit comments