Commit 66209fbc7668b5b64b34c2997185223891211829
1 parent
650d0bc6
Exists in
spb-stable
and in
3 other branches
Add optional parameter to list merge requests
Add an optional parameter to list merge requests to restrict the returned merge requests to those that are "opened", "merged" or "closed". By default all merge requests are returned. Note that "all" can be given to explicitly request all merge requests.
Showing
3 changed files
with
52 additions
and
4 deletions
Show diff stats
doc/api/merge_requests.md
1 | ## List merge requests | 1 | ## List merge requests |
2 | 2 | ||
3 | -Get all merge requests for this project. This function takes pagination parameters | ||
4 | -`page` and `per_page` to restrict the list of merge requests. | 3 | +Get all merge requests for this project. |
4 | +The `state` parameter can be used to get only merge requests with a | ||
5 | +given state (`opened`, `closed`, or `merged`) or all of them (`all`). | ||
6 | +The pagination parameters `page` and `per_page` can be used to restrict the | ||
7 | +list of merge requests. | ||
5 | 8 | ||
6 | ``` | 9 | ``` |
7 | GET /projects/:id/merge_requests | 10 | GET /projects/:id/merge_requests |
11 | +GET /projects/:id/merge_requests?state=opened | ||
12 | +GET /projects/:id/merge_requests?state=all | ||
8 | ``` | 13 | ``` |
9 | 14 | ||
10 | Parameters: | 15 | Parameters: |
11 | 16 | ||
12 | + `id` (required) - The ID of a project | 17 | + `id` (required) - The ID of a project |
18 | ++ `state` (optional) - Return `all` requests or just those that are `merged`, `opened` or `closed` | ||
13 | 19 | ||
14 | ```json | 20 | ```json |
15 | [ | 21 | [ |
lib/api/merge_requests.rb
@@ -19,14 +19,24 @@ module API | @@ -19,14 +19,24 @@ module API | ||
19 | # | 19 | # |
20 | # Parameters: | 20 | # Parameters: |
21 | # id (required) - The ID of a project | 21 | # id (required) - The ID of a project |
22 | + # state (optional) - Return requests "merged", "opened" or "closed" | ||
22 | # | 23 | # |
23 | # Example: | 24 | # Example: |
24 | # GET /projects/:id/merge_requests | 25 | # GET /projects/:id/merge_requests |
26 | + # GET /projects/:id/merge_requests?state=opened | ||
27 | + # GET /projects/:id/merge_requests?state=closed | ||
25 | # | 28 | # |
26 | get ":id/merge_requests" do | 29 | get ":id/merge_requests" do |
27 | authorize! :read_merge_request, user_project | 30 | authorize! :read_merge_request, user_project |
28 | 31 | ||
29 | - present paginate(user_project.merge_requests), with: Entities::MergeRequest | 32 | + mrs = case params["state"] |
33 | + when "opened" then user_project.merge_requests.opened | ||
34 | + when "closed" then user_project.merge_requests.closed | ||
35 | + when "merged" then user_project.merge_requests.merged | ||
36 | + else user_project.merge_requests | ||
37 | + end | ||
38 | + | ||
39 | + present paginate(mrs), with: Entities::MergeRequest | ||
30 | end | 40 | end |
31 | 41 | ||
32 | # Show MR | 42 | # Show MR |
spec/requests/api/merge_requests_spec.rb
@@ -7,6 +7,8 @@ describe API::API do | @@ -7,6 +7,8 @@ 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, :simple, author: user, assignee: user, source_project: project, target_project: project, title: "Test") } | 9 | let!(:merge_request) { create(:merge_request, :simple, author: user, assignee: user, source_project: project, target_project: project, title: "Test") } |
10 | + let!(:merge_request_closed) { create(:merge_request, state: "closed", author: user, assignee: user, source_project: project, target_project: project, title: "Closed test") } | ||
11 | + let!(:merge_request_merged) { create(:merge_request, state: "merged", author: user, assignee: user, source_project: project, target_project: project, title: "Merged test") } | ||
10 | let!(:note) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "a comment on a MR") } | 12 | let!(:note) { create(:note_on_merge_request, author: user, project: project, noteable: merge_request, note: "a comment on a MR") } |
11 | before { | 13 | before { |
12 | project.team << [user, :reporters] | 14 | project.team << [user, :reporters] |
@@ -21,12 +23,42 @@ describe API::API do | @@ -21,12 +23,42 @@ describe API::API do | ||
21 | end | 23 | end |
22 | 24 | ||
23 | context "when authenticated" do | 25 | context "when authenticated" do |
24 | - it "should return an array of merge_requests" do | 26 | + it "should return an array of all merge_requests" do |
25 | get api("/projects/#{project.id}/merge_requests", user) | 27 | get api("/projects/#{project.id}/merge_requests", user) |
26 | response.status.should == 200 | 28 | response.status.should == 200 |
27 | json_response.should be_an Array | 29 | json_response.should be_an Array |
30 | + json_response.length.should == 3 | ||
28 | json_response.first['title'].should == merge_request.title | 31 | json_response.first['title'].should == merge_request.title |
29 | end | 32 | end |
33 | + it "should return an array of all merge_requests" do | ||
34 | + get api("/projects/#{project.id}/merge_requests?state", user) | ||
35 | + response.status.should == 200 | ||
36 | + json_response.should be_an Array | ||
37 | + json_response.length.should == 3 | ||
38 | + json_response.first['title'].should == merge_request.title | ||
39 | + end | ||
40 | + it "should return an array of open merge_requests" do | ||
41 | + get api("/projects/#{project.id}/merge_requests?state=opened", user) | ||
42 | + response.status.should == 200 | ||
43 | + json_response.should be_an Array | ||
44 | + json_response.length.should == 1 | ||
45 | + json_response.first['title'].should == merge_request.title | ||
46 | + end | ||
47 | + it "should return an array of closed merge_requests" do | ||
48 | + get api("/projects/#{project.id}/merge_requests?state=closed", user) | ||
49 | + response.status.should == 200 | ||
50 | + json_response.should be_an Array | ||
51 | + json_response.length.should == 2 | ||
52 | + json_response.first['title'].should == merge_request_closed.title | ||
53 | + json_response.second['title'].should == merge_request_merged.title | ||
54 | + end | ||
55 | + it "should return an array of merged merge_requests" do | ||
56 | + get api("/projects/#{project.id}/merge_requests?state=merged", user) | ||
57 | + response.status.should == 200 | ||
58 | + json_response.should be_an Array | ||
59 | + json_response.length.should == 1 | ||
60 | + json_response.first['title'].should == merge_request_merged.title | ||
61 | + end | ||
30 | end | 62 | end |
31 | end | 63 | end |
32 | 64 |