@@ -1008,7 +1008,7 @@ func TestPullRequestReviewCommentSubmit(t *testing.T) {
10081008"owner" :currentOwner ,
10091009"repo" :repoName ,
10101010"path" :"test-file.txt" ,
1011- "content" :fmt .Sprintf ("Created by e2e test %s" ,t .Name ()),
1011+ "content" :fmt .Sprintf ("Created by e2e test %s\n with multiple lines " ,t .Name ()),
10121012"message" :"Add test file" ,
10131013"branch" :"test-branch" ,
10141014}
@@ -1065,21 +1065,62 @@ func TestPullRequestReviewCommentSubmit(t *testing.T) {
10651065require .True (t ,ok ,"expected content to be of type TextContent" )
10661066require .Equal (t ,"" ,textContent .Text ,"expected content to be empty" )
10671067
1068- // Add a review comment
1069- addReviewCommentRequest := mcp.CallToolRequest {}
1070- addReviewCommentRequest .Params .Name = "add_pull_request_review_comment_to_pending_review"
1071- addReviewCommentRequest .Params .Arguments = map [string ]any {
1068+ // Add a file review comment
1069+ addFileReviewCommentRequest := mcp.CallToolRequest {}
1070+ addFileReviewCommentRequest .Params .Name = "add_pull_request_review_comment_to_pending_review"
1071+ addFileReviewCommentRequest .Params .Arguments = map [string ]any {
1072+ "owner" :currentOwner ,
1073+ "repo" :repoName ,
1074+ "pullNumber" :1 ,
1075+ "path" :"test-file.txt" ,
1076+ "subjectType" :"FILE" ,
1077+ "body" :"File review comment" ,
1078+ }
1079+
1080+ t .Logf ("Adding file review comment to pull request in %s/%s..." ,currentOwner ,repoName )
1081+ resp ,err = mcpClient .CallTool (ctx ,addFileReviewCommentRequest )
1082+ require .NoError (t ,err ,"expected to call 'add_pull_request_review_comment_to_pending_review' tool successfully" )
1083+ require .False (t ,resp .IsError ,fmt .Sprintf ("expected result not to be an error: %+v" ,resp ))
1084+
1085+ // Add a single line review comment
1086+ addSingleLineReviewCommentRequest := mcp.CallToolRequest {}
1087+ addSingleLineReviewCommentRequest .Params .Name = "add_pull_request_review_comment_to_pending_review"
1088+ addSingleLineReviewCommentRequest .Params .Arguments = map [string ]any {
10721089"owner" :currentOwner ,
10731090"repo" :repoName ,
10741091"pullNumber" :1 ,
10751092"path" :"test-file.txt" ,
10761093"subjectType" :"LINE" ,
1077- "body" :"Very nice! " ,
1094+ "body" :"Single line review comment " ,
10781095"line" :1 ,
1096+ "side" :"RIGHT" ,
1097+ "commitId" :commitId ,
10791098}
10801099
1081- t .Logf ("Adding review comment to pull request in %s/%s..." ,currentOwner ,repoName )
1082- resp ,err = mcpClient .CallTool (ctx ,addReviewCommentRequest )
1100+ t .Logf ("Adding single line review comment to pull request in %s/%s..." ,currentOwner ,repoName )
1101+ resp ,err = mcpClient .CallTool (ctx ,addSingleLineReviewCommentRequest )
1102+ require .NoError (t ,err ,"expected to call 'add_pull_request_review_comment_to_pending_review' tool successfully" )
1103+ require .False (t ,resp .IsError ,fmt .Sprintf ("expected result not to be an error: %+v" ,resp ))
1104+
1105+ // Add a multiline review comment
1106+ addMultilineReviewCommentRequest := mcp.CallToolRequest {}
1107+ addMultilineReviewCommentRequest .Params .Name = "add_pull_request_review_comment_to_pending_review"
1108+ addMultilineReviewCommentRequest .Params .Arguments = map [string ]any {
1109+ "owner" :currentOwner ,
1110+ "repo" :repoName ,
1111+ "pullNumber" :1 ,
1112+ "path" :"test-file.txt" ,
1113+ "subjectType" :"LINE" ,
1114+ "body" :"Multiline review comment" ,
1115+ "startLine" :1 ,
1116+ "line" :2 ,
1117+ "startSide" :"RIGHT" ,
1118+ "side" :"RIGHT" ,
1119+ "commitId" :commitId ,
1120+ }
1121+
1122+ t .Logf ("Adding multi line review comment to pull request in %s/%s..." ,currentOwner ,repoName )
1123+ resp ,err = mcpClient .CallTool (ctx ,addMultilineReviewCommentRequest )
10831124require .NoError (t ,err ,"expected to call 'add_pull_request_review_comment_to_pending_review' tool successfully" )
10841125require .False (t ,resp .IsError ,fmt .Sprintf ("expected result not to be an error: %+v" ,resp ))
10851126
@@ -1117,6 +1158,7 @@ func TestPullRequestReviewCommentSubmit(t *testing.T) {
11171158require .True (t ,ok ,"expected content to be of type TextContent" )
11181159
11191160var reviews []struct {
1161+ ID int `json:"id"`
11201162State string `json:"state"`
11211163}
11221164err = json .Unmarshal ([]byte (textContent .Text ),& reviews )
@@ -1125,6 +1167,13 @@ func TestPullRequestReviewCommentSubmit(t *testing.T) {
11251167// Check that there is one review
11261168require .Len (t ,reviews ,1 ,"expected to find one review" )
11271169require .Equal (t ,"COMMENTED" ,reviews [0 ].State ,"expected review state to be COMMENTED" )
1170+
1171+ // Check that there are three review comments
1172+ // MCP Server doesn't support this, but we can use the GitHub Client
1173+ ghClient := gogithub .NewClient (nil ).WithAuthToken (getE2EToken (t ))
1174+ comments ,_ ,err := ghClient .PullRequests .ListReviewComments (context .Background (),currentOwner ,repoName ,1 ,int64 (reviews [0 ].ID ),nil )
1175+ require .NoError (t ,err ,"expected to list review comments successfully" )
1176+ require .Equal (t ,3 ,len (comments ),"expected to find three review comments" )
11281177}
11291178
11301179func TestPullRequestReviewDeletion (t * testing.T ) {
@@ -1314,5 +1363,4 @@ func TestPullRequestReviewDeletion(t *testing.T) {
13141363err = json .Unmarshal ([]byte (textContent .Text ),& noReviews )
13151364require .NoError (t ,err ,"expected to unmarshal text content successfully" )
13161365require .Len (t ,noReviews ,0 ,"expected to find no reviews" )
1317-
13181366}