Commit 17fd0e5c724b2001549a049d7db2179cfd1b9a14
Exists in
spb-stable
and in
3 other branches
Merge pull request #6569 from criteo/api_merge_request_comments
Add method to get the comments on a merge request
Showing
3 changed files
with
75 additions
and
0 deletions
Show diff stats
doc/api/merge_requests.md
| @@ -150,6 +150,7 @@ Parameters: | @@ -150,6 +150,7 @@ Parameters: | ||
| 150 | + `target_branch` - The target branch | 150 | + `target_branch` - The target branch |
| 151 | + `assignee_id` - Assignee user ID | 151 | + `assignee_id` - Assignee user ID |
| 152 | + `title` - Title of MR | 152 | + `title` - Title of MR |
| 153 | ++ `state_event` - New state (close|reopen|merge) | ||
| 153 | 154 | ||
| 154 | ```json | 155 | ```json |
| 155 | 156 | ||
| @@ -210,3 +211,44 @@ Parameters: | @@ -210,3 +211,44 @@ Parameters: | ||
| 210 | "note":"text1" | 211 | "note":"text1" |
| 211 | } | 212 | } |
| 212 | ``` | 213 | ``` |
| 214 | + | ||
| 215 | + | ||
| 216 | +## Get the comments on a MR | ||
| 217 | + | ||
| 218 | +Gets all the comments associated with a merge request. | ||
| 219 | + | ||
| 220 | +``` | ||
| 221 | +GET /projects/:id/merge_request/:merge_request_id/comments | ||
| 222 | +``` | ||
| 223 | + | ||
| 224 | +Parameters: | ||
| 225 | + | ||
| 226 | ++ `id` (required) - The ID of a project | ||
| 227 | ++ `merge_request_id` (required) - ID of merge request | ||
| 228 | + | ||
| 229 | +```json | ||
| 230 | +[ | ||
| 231 | + { | ||
| 232 | + "note":"this is the 1st comment on the 2merge merge request", | ||
| 233 | + "author":{ | ||
| 234 | + "id":11, | ||
| 235 | + "username":"admin", | ||
| 236 | + "email":"admin@local.host", | ||
| 237 | + "name":"Administrator", | ||
| 238 | + "state":"active", | ||
| 239 | + "created_at":"2014-03-06T08:17:35.000Z" | ||
| 240 | + } | ||
| 241 | + }, | ||
| 242 | + { | ||
| 243 | + "note":"_Status changed to closed_", | ||
| 244 | + "author":{ | ||
| 245 | + "id":11, | ||
| 246 | + "username":"admin", | ||
| 247 | + "email":"admin@local.host", | ||
| 248 | + "name":"Administrator", | ||
| 249 | + "state":"active", | ||
| 250 | + "created_at":"2014-03-06T08:17:35.000Z" | ||
| 251 | + } | ||
| 252 | + } | ||
| 253 | +] | ||
| 254 | +``` |
lib/api/merge_requests.rb
| @@ -125,6 +125,22 @@ module API | @@ -125,6 +125,22 @@ module API | ||
| 125 | end | 125 | end |
| 126 | end | 126 | end |
| 127 | 127 | ||
| 128 | + # Get a merge request's comments | ||
| 129 | + # | ||
| 130 | + # Parameters: | ||
| 131 | + # id (required) - The ID of a project | ||
| 132 | + # merge_request_id (required) - ID of MR | ||
| 133 | + # Examples: | ||
| 134 | + # GET /projects/:id/merge_request/:merge_request_id/comments | ||
| 135 | + # | ||
| 136 | + get ":id/merge_request/:merge_request_id/comments" do | ||
| 137 | + merge_request = user_project.merge_requests.find(params[:merge_request_id]) | ||
| 138 | + | ||
| 139 | + authorize! :read_merge_request, merge_request | ||
| 140 | + | ||
| 141 | + present paginate(merge_request.notes), with: Entities::MRNote | ||
| 142 | + end | ||
| 143 | + | ||
| 128 | # Post comment to merge request | 144 | # Post comment to merge request |
| 129 | # | 145 | # |
| 130 | # Parameters: | 146 | # Parameters: |
spec/requests/api/merge_requests_spec.rb
| @@ -7,6 +7,7 @@ describe API::API do | @@ -7,6 +7,7 @@ describe API::API do | ||
| 7 | let(:user) { create(:user) } | 7 | let(:user) { create(:user) } |
| 8 | let!(:project) {create(:project, creator_id: user.id, namespace: user.namespace) } | 8 | let!(:project) {create(:project, creator_id: user.id, namespace: user.namespace) } |
| 9 | let!(:merge_request) { create(:merge_request, author: user, assignee: user, source_project: project, target_project: project, title: "Test") } | 9 | let!(:merge_request) { create(:merge_request, author: user, assignee: user, source_project: project, target_project: project, title: "Test") } |
| 10 | + let!(:note) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "a comment on a MR") } | ||
| 10 | before { | 11 | before { |
| 11 | project.team << [user, :reporters] | 12 | project.team << [user, :reporters] |
| 12 | } | 13 | } |
| @@ -205,4 +206,20 @@ describe API::API do | @@ -205,4 +206,20 @@ describe API::API do | ||
| 205 | response.status.should == 404 | 206 | response.status.should == 404 |
| 206 | end | 207 | end |
| 207 | end | 208 | end |
| 209 | + | ||
| 210 | + describe "GET :id/merge_request/:merge_request_id/comments" do | ||
| 211 | + it "should return merge_request comments" do | ||
| 212 | + get api("/projects/#{project.id}/merge_request/#{merge_request.id}/comments", user) | ||
| 213 | + response.status.should == 200 | ||
| 214 | + json_response.should be_an Array | ||
| 215 | + json_response.length.should == 1 | ||
| 216 | + json_response.first['note'].should == "a comment on a MR" | ||
| 217 | + json_response.first['author']['id'].should == user.id | ||
| 218 | + end | ||
| 219 | + | ||
| 220 | + it "should return a 404 error if merge_request_id not found" do | ||
| 221 | + get api("/projects/#{project.id}/merge_request/999/comments", user) | ||
| 222 | + response.status.should == 404 | ||
| 223 | + end | ||
| 224 | + end | ||
| 208 | end | 225 | end |