From 907fffa94ab60adc5b23637f5910acd747988845 Mon Sep 17 00:00:00 2001 From: Joren De Groof Date: Fri, 24 Mar 2017 13:46:33 +0100 Subject: [PATCH] Add v4-endpoint to fetch all merge_requests for a milestone --- CHANGELOG.md | 1 + lib/gitlab/client/milestones.rb | 14 ++++++++++++++ spec/fixtures/milestone_merge_requests.json | 1 + spec/gitlab/client/milestones_spec.rb | 16 ++++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 spec/fixtures/milestone_merge_requests.json diff --git a/CHANGELOG.md b/CHANGELOG.md index b1bd9323e..79f6fd753 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Add issues subscribe/unsubscribe (@newellista) - Add merge_requests subscribe/unsubscribe (@newellista) - Updated `deploy_key` endpoints (@epintozzi) +- Add milestone/merge_requests (API V4 only) (@joren) ### 3.7.0 (16/08/2016) diff --git a/lib/gitlab/client/milestones.rb b/lib/gitlab/client/milestones.rb index 793bb4393..ab8a4dd0a 100644 --- a/lib/gitlab/client/milestones.rb +++ b/lib/gitlab/client/milestones.rb @@ -42,6 +42,20 @@ def milestone_issues(project, milestone, options={}) get("/projects/#{url_encode project}/milestones/#{milestone}/issues", query: options) end + # Gets the merge_requests of a given milestone. + # + # @example + # Gitlab.milestone_merge_requests(5, 2) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer, String] milestone The ID of a milestone. + # @option options [Integer] :page The page number. + # @option options [Integer] :per_page The number of results per page. + # @return [Array] + def milestone_merge_requests(project, milestone, options={}) + get("/projects/#{url_encode project}/milestones/#{milestone}/merge_requests", query: options) + end + # Creates a new milestone. # # @example diff --git a/spec/fixtures/milestone_merge_requests.json b/spec/fixtures/milestone_merge_requests.json new file mode 100644 index 000000000..aa01a29ac --- /dev/null +++ b/spec/fixtures/milestone_merge_requests.json @@ -0,0 +1 @@ +[{"id":1,"iid":1,"project_id":1,"title":"lorem ipsum","description":"","state":"opened","created_at":"2017-03-24T12:23:53.918Z","updated_at":"2017-03-24T12:23:53.918Z","target_branch":"master","source_branch":"def","upvotes":0,"downvotes":0,"author":{"name":"John Doe","username":"jdoe","id":1,"state":"active","avatar_url":"","web_url":"https://gitlab.com/jdoen"},"assignee":null,"source_project_id":1,"target_project_id":1,"labels":[],"work_in_progress":false,"milestone":{"id":1,"iid":1,"project_id":1,"title":"Test","description":"","state":"active","created_at":"2017-03-24T12:23:00.560Z","updated_at":"2017-03-24T12:23:00.560Z","due_date":null,"start_date":null},"merge_when_pipeline_succeeds":false,"merge_status":"can_be_merged","sha":"aec123d1775790b2347fdd684b5ba613fdeb994b","merge_commit_sha":null,"user_notes_count":0,"approvals_before_merge":null,"should_remove_source_branch":null,"force_remove_source_branch":false,"squash":false,"web_url":"https://gitlab.com/jdoe/milestone_merge_requests_test/merge_requests/2"},{"id":2,"iid":2,"project_id":1,"title":"ipsum lorem","description":"","state":"opened","created_at":"2017-03-24T12:23:24.662Z","updated_at":"2017-03-24T12:23:33.522Z","target_branch":"master","source_branch":"test1","upvotes":0,"downvotes":0,"author":{"name":"Joren","username":"jdoe","id":1,"state":"active","":"","web_url":"https://gitlab.com/jdoe"},"assignee":null,"source_project_id":1,"target_project_id":1,"labels":[],"work_in_progress":false,"milestone":{"id":1,"iid":1,"project_id":1,"title":"Test","description":"","state":"active","created_at":"2017-03-24T12:23:00.560Z","updated_at":"2017-03-24T12:23:00.560Z","due_date":null,"start_date":null},"merge_when_pipeline_succeeds":false,"merge_status":"can_be_merged","sha":"3ee44c9b40deddae596f838b97523c6f010fd80d","merge_commit_sha":null,"user_notes_count":0,"approvals_before_merge":null,"should_remove_source_branch":null,"force_remove_source_branch":true,"squash":false,"web_url":"https://gitlab.com/jdoe/milestone_merge_requests_test/merge_requests/1"}] diff --git a/spec/gitlab/client/milestones_spec.rb b/spec/gitlab/client/milestones_spec.rb index a1de4908f..fdc78c96b 100644 --- a/spec/gitlab/client/milestones_spec.rb +++ b/spec/gitlab/client/milestones_spec.rb @@ -48,6 +48,22 @@ end end + describe ".milestone_merge_requests" do + before do + stub_get("/projects/3/milestones/1/merge_requests", "milestone_merge_requests") + @milestone_merge_requests = Gitlab.milestone_merge_requests(3, 1) + end + + it "should get the correct resource" do + expect(a_get("/projects/3/milestones/1/merge_requests")).to have_been_made + end + + it "should return a paginated response of milestone's merge_requests" do + expect(@milestone_merge_requests).to be_a Gitlab::PaginatedResponse + expect(@milestone_merge_requests.first.milestone.id).to eq(1) + end + end + describe ".create_milestone" do before do stub_post("/projects/3/milestones", "milestone")