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 |