From d0ba853c5965ca1f717ab1c2a41aa1917e0184ea Mon Sep 17 00:00:00 2001 From: Suhr Gregor z0001ffq Date: Tue, 9 Jun 2020 14:33:48 +0200 Subject: [PATCH 1/5] - add function merge_request_approval_state to merge_request_approvals.rb --- bin/console | 12 +----------- lib/gitlab/client/merge_request_approvals.rb | 13 +++++++++++++ .../client/merge_request_approvals_spec.rb | 17 +++++++++++++++++ 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/bin/console b/bin/console index 282a073df..939345aef 100755 --- a/bin/console +++ b/bin/console @@ -1,11 +1 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -# ENV['GITLAB_API_ENDPOINT'] = '' -# ENV['GITLAB_API_PRIVATE_TOKEN'] = '' - -require 'bundler/setup' -require 'gitlab' -require 'pry' - -Pry.start +#!/usr/bin/env ruby # frozen_string_literal: true # ENV['GITLAB_API_ENDPOINT'] = '' # ENV['GITLAB_API_PRIVATE_TOKEN'] = '' require 'bundler/setup' require 'gitlab' require 'pry' Pry.start \ No newline at end of file diff --git a/lib/gitlab/client/merge_request_approvals.rb b/lib/gitlab/client/merge_request_approvals.rb index d00aca1b1..ec4c8d07b 100644 --- a/lib/gitlab/client/merge_request_approvals.rb +++ b/lib/gitlab/client/merge_request_approvals.rb @@ -139,6 +139,7 @@ def edit_merge_request_approvers(project, merge_request, options = {}) put("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvers", body: options) end + # Approve a merge request # # @example @@ -165,5 +166,17 @@ def approve_merge_request(project, merge_request, options = {}) def unapprove_merge_request(project, merge_request, options = {}) post("/projects/#{url_encode project}/merge_requests/#{merge_request}/unapprove", body: options) end + + # Get the approval state of merge requests + # + # @example + # Gitlab.merge_request_approval_state(5, 36) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] id The ID of a merge request. + # @return [Array] + def merge_request_approval_state(project, id) + get("/projects/#{url_encode project}/merge_requests/#{id}/approval_state") + end end end diff --git a/spec/gitlab/client/merge_request_approvals_spec.rb b/spec/gitlab/client/merge_request_approvals_spec.rb index e7ec50fad..a4547ae66 100644 --- a/spec/gitlab/client/merge_request_approvals_spec.rb +++ b/spec/gitlab/client/merge_request_approvals_spec.rb @@ -202,4 +202,21 @@ expect(a_post('/projects/1/merge_requests/5/unapprove')).to have_been_made end end + + describe '.merge_request_approval_state' do + before do + stub_get('/projects/3/merge_requests/1/approval_state', 'pipelines') + @pipelines = Gitlab.merge_request_pipelines(3, 1) + end + + it 'gets the correct resource' do + expect(a_get('/projects/3/merge_requests/1/approval_state')).to have_been_made + end + + it 'returns information about all pipelines in merge request' do + expect(@pipelines.first.id).to eq(47) + expect(@pipelines.first.status).to eq('pending') + end + end + end From a3efd9b5a68e508b17c1106fbad0a3ce9489e4a5 Mon Sep 17 00:00:00 2001 From: Gregor Suhr Date: Tue, 9 Jun 2020 17:24:27 +0200 Subject: [PATCH 2/5] - implement test for merge_request_approval_state --- .../merge_request_approval_state.json | 46 +++++++++++++++++++ .../client/merge_request_approvals_spec.rb | 11 +++-- 2 files changed, 52 insertions(+), 5 deletions(-) create mode 100644 spec/fixtures/merge_request_approval_state.json diff --git a/spec/fixtures/merge_request_approval_state.json b/spec/fixtures/merge_request_approval_state.json new file mode 100644 index 000000000..3b4f75097 --- /dev/null +++ b/spec/fixtures/merge_request_approval_state.json @@ -0,0 +1,46 @@ +{ + "id": 1, + "iid": 1, + "project_id": 3, + "title": "Approvals API", + "description": "Test", + "state": "opened", + "created_at": "2016-06-08T00:19:52.638Z", + "updated_at": "2016-06-08T21:20:42.470Z", + "merge_status": "cannot_be_merged", + "approvals_required": 2, + "approvals_left": 2, + "approved_by": [], + "approvers": [ + { + "user": { + "name": "Administrator", + "username": "root", + "id": 1, + "state": "active", + "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80\u0026d=identicon", + "web_url": "http://localhost:3000/root" + } + } + ], + "approver_groups": [ + { + "group": { + "id": 5, + "name": "group1", + "path": "group1", + "description": "", + "visibility": "public", + "lfs_enabled": false, + "avatar_url": null, + "web_url": "http://localhost/groups/group1", + "request_access_enabled": false, + "full_name": "group1", + "full_path": "group1", + "parent_id": null, + "ldap_cn": null, + "ldap_access": null + } + } + ] +} \ No newline at end of file diff --git a/spec/gitlab/client/merge_request_approvals_spec.rb b/spec/gitlab/client/merge_request_approvals_spec.rb index a4547ae66..7ebd5cc99 100644 --- a/spec/gitlab/client/merge_request_approvals_spec.rb +++ b/spec/gitlab/client/merge_request_approvals_spec.rb @@ -205,17 +205,18 @@ describe '.merge_request_approval_state' do before do - stub_get('/projects/3/merge_requests/1/approval_state', 'pipelines') - @pipelines = Gitlab.merge_request_pipelines(3, 1) + stub_get('/projects/3/merge_requests/1/approval_state', 'merge_request_approval_state') + @approval_state = Gitlab.merge_request_approval_state(3, 1) end it 'gets the correct resource' do expect(a_get('/projects/3/merge_requests/1/approval_state')).to have_been_made end - it 'returns information about all pipelines in merge request' do - expect(@pipelines.first.id).to eq(47) - expect(@pipelines.first.status).to eq('pending') + it 'returns information about all approval states of merge request' do + expect(@approval_state.approvals_required).to eq(2) + expect(@approval_state.approvals_left).to eq(2) + expect(@approval_state.approved_by).to be_empty end end From 5d56032ecc75c05614be9402d1d1389d30e1a6f6 Mon Sep 17 00:00:00 2001 From: Gregor Suhr Date: Tue, 9 Jun 2020 17:34:14 +0200 Subject: [PATCH 3/5] - implement test for merge_request_approval_state --- bin/console | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/bin/console b/bin/console index 939345aef..282a073df 100755 --- a/bin/console +++ b/bin/console @@ -1 +1,11 @@ -#!/usr/bin/env ruby # frozen_string_literal: true # ENV['GITLAB_API_ENDPOINT'] = '' # ENV['GITLAB_API_PRIVATE_TOKEN'] = '' require 'bundler/setup' require 'gitlab' require 'pry' Pry.start \ No newline at end of file +#!/usr/bin/env ruby +# frozen_string_literal: true + +# ENV['GITLAB_API_ENDPOINT'] = '' +# ENV['GITLAB_API_PRIVATE_TOKEN'] = '' + +require 'bundler/setup' +require 'gitlab' +require 'pry' + +Pry.start From 5b86143487cad69b3966d5df529006af5642d91b Mon Sep 17 00:00:00 2001 From: Gregor Suhr Date: Tue, 9 Jun 2020 17:35:36 +0200 Subject: [PATCH 4/5] - implement test for merge_request_approval_state --- lib/gitlab/client/merge_request_approvals.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/gitlab/client/merge_request_approvals.rb b/lib/gitlab/client/merge_request_approvals.rb index ec4c8d07b..949aefca6 100644 --- a/lib/gitlab/client/merge_request_approvals.rb +++ b/lib/gitlab/client/merge_request_approvals.rb @@ -139,7 +139,6 @@ def edit_merge_request_approvers(project, merge_request, options = {}) put("/projects/#{url_encode project}/merge_requests/#{merge_request}/approvers", body: options) end - # Approve a merge request # # @example From 2af3e447377eba30b7f0cf5c590b30f2eee870e0 Mon Sep 17 00:00:00 2001 From: Gregor Suhr Date: Tue, 9 Jun 2020 17:55:04 +0200 Subject: [PATCH 5/5] fix rubocop warning --- spec/gitlab/client/merge_request_approvals_spec.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/gitlab/client/merge_request_approvals_spec.rb b/spec/gitlab/client/merge_request_approvals_spec.rb index 7ebd5cc99..c2ce345a2 100644 --- a/spec/gitlab/client/merge_request_approvals_spec.rb +++ b/spec/gitlab/client/merge_request_approvals_spec.rb @@ -219,5 +219,4 @@ expect(@approval_state.approved_by).to be_empty end end - end