From 715b81c6fe791f04dcbc30a68c38fa1ff19e117c Mon Sep 17 00:00:00 2001 From: Dinesh Shanmugam C Date: Mon, 31 Aug 2020 15:30:08 +0530 Subject: [PATCH 1/6] Feature : Resource State Events 1. Resource state events api's added 2. Linking resoruce state event module into client.rb Resource state event api added in Gitlab 3.2 --- lib/gitlab/client.rb | 1 + lib/gitlab/client/resource_state_events.rb | 55 ++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 lib/gitlab/client/resource_state_events.rb diff --git a/lib/gitlab/client.rb b/lib/gitlab/client.rb index 18023ca84..627b96d55 100644 --- a/lib/gitlab/client.rb +++ b/lib/gitlab/client.rb @@ -52,6 +52,7 @@ class Client < API include RepositoryFiles include RepositorySubmodules include ResourceLabelEvents + include ResourceStateEvents include Runners include Search include Services diff --git a/lib/gitlab/client/resource_state_events.rb b/lib/gitlab/client/resource_state_events.rb new file mode 100644 index 000000000..e895a8f19 --- /dev/null +++ b/lib/gitlab/client/resource_state_events.rb @@ -0,0 +1,55 @@ +class Gitlab::Client + # Defines methods related to resource state events. + # @see https://docs.gitlab.com/ee/api/resource_state_events.html + module ResourceStateEvents + # Gets a list of all state events for a single issue. + # + # @example + # Gitlab.issue_state_events(5, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] issue_iid The IID of an issue. + # @return [Array] + def issue_state_events(project,issue_iid) + get("/projects/#{url_encode project}/issues/#{issue_iid}/resource_state_events") + end + + # Returns a single state event for a specific project issue + # + # @example + # Gitlab.issue_state_event(5, 42, 1) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] issue_iid The IID of an issue. + # @param [Integer] id The ID of a resource event. + # @return Gitlab::ObjectifiedHash + def issue_state_event(project,issue_iid,id) + get("/projects/#{url_encode project}/issues/#{issue_iid}/resource_state_events/#{id}") + end + + # Gets a list of all state events for a single merge request. + # + # @example + # Gitlab.merge_request_state_events(5, 42) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] merge_request_iid The IID of a merge request. + # @return [Array] + def merge_request_state_events(project, merge_request_iid) + get("/projects/#{url_encode project}/merge_requests/#{merge_request_iid}/resource_state_events") + end + + # Returns a single state event for a specific project merge request + # + # @example + # Gitlab.merge_request_state_event(5, 42, 1) + # + # @param [Integer, String] project The ID or name of a project. + # @param [Integer] merge_request_iid The IID of an merge request. + # @param [Integer] id The ID of a state event. + # @return Gitlab::ObjectifiedHash + def merge_request_state_event(project, merge_request_iid, id) + get("/projects/#{url_encode project}/merge_requests/#{merge_request_iid}/resource_state_events/#{id}") + end + end +end From dc157040267af5f3d8f1580a7b1e001ccc81d787 Mon Sep 17 00:00:00 2001 From: Dinesh Shanmugam C Date: Mon, 31 Aug 2020 16:21:17 +0530 Subject: [PATCH 2/6] Fix : Lint errors 1. Space after comma fixed 2. Frozen string literal added to top of file --- lib/gitlab/client/resource_state_events.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/gitlab/client/resource_state_events.rb b/lib/gitlab/client/resource_state_events.rb index e895a8f19..6a790fd6b 100644 --- a/lib/gitlab/client/resource_state_events.rb +++ b/lib/gitlab/client/resource_state_events.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + class Gitlab::Client # Defines methods related to resource state events. # @see https://docs.gitlab.com/ee/api/resource_state_events.html @@ -10,7 +12,7 @@ module ResourceStateEvents # @param [Integer, String] project The ID or name of a project. # @param [Integer] issue_iid The IID of an issue. # @return [Array] - def issue_state_events(project,issue_iid) + def issue_state_events(project, issue_iid) get("/projects/#{url_encode project}/issues/#{issue_iid}/resource_state_events") end @@ -23,7 +25,7 @@ def issue_state_events(project,issue_iid) # @param [Integer] issue_iid The IID of an issue. # @param [Integer] id The ID of a resource event. # @return Gitlab::ObjectifiedHash - def issue_state_event(project,issue_iid,id) + def issue_state_event(project, issue_iid,id) get("/projects/#{url_encode project}/issues/#{issue_iid}/resource_state_events/#{id}") end From c21031c3b9b84a8cb6fcd49da1486b787129b273 Mon Sep 17 00:00:00 2001 From: Dinesh Shanmugam C Date: Mon, 31 Aug 2020 16:23:39 +0530 Subject: [PATCH 3/6] Fix : Lint formatting error Space after comma fixed in one more occurance --- lib/gitlab/client/resource_state_events.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gitlab/client/resource_state_events.rb b/lib/gitlab/client/resource_state_events.rb index 6a790fd6b..f2b2ebd5b 100644 --- a/lib/gitlab/client/resource_state_events.rb +++ b/lib/gitlab/client/resource_state_events.rb @@ -25,7 +25,7 @@ def issue_state_events(project, issue_iid) # @param [Integer] issue_iid The IID of an issue. # @param [Integer] id The ID of a resource event. # @return Gitlab::ObjectifiedHash - def issue_state_event(project, issue_iid,id) + def issue_state_event(project, issue_iid, id) get("/projects/#{url_encode project}/issues/#{issue_iid}/resource_state_events/#{id}") end From 4ee7efd399c344377e66510a9ca73ed67a0f8030 Mon Sep 17 00:00:00 2001 From: Dinesh Shanmugam C Date: Tue, 1 Sep 2020 11:30:49 +0530 Subject: [PATCH 4/6] Tests : Added fixtures for use cases 1. Resource state event/events for issue 2. Resource state event/events for MRs --- spec/fixtures/issue_resource_state_event.json | 15 +++++++++ .../fixtures/issue_resource_state_events.json | 32 +++++++++++++++++++ spec/fixtures/mr_resource_state_event.json | 15 +++++++++ spec/fixtures/mr_resource_state_events.json | 32 +++++++++++++++++++ 4 files changed, 94 insertions(+) create mode 100644 spec/fixtures/issue_resource_state_event.json create mode 100644 spec/fixtures/issue_resource_state_events.json create mode 100644 spec/fixtures/mr_resource_state_event.json create mode 100644 spec/fixtures/mr_resource_state_events.json diff --git a/spec/fixtures/issue_resource_state_event.json b/spec/fixtures/issue_resource_state_event.json new file mode 100644 index 000000000..2f837d9ea --- /dev/null +++ b/spec/fixtures/issue_resource_state_event.json @@ -0,0 +1,15 @@ +{ + "id": 143, + "user": { + "id": 1, + "name": "Administrator", + "username": "root", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://gitlab.example.com/root" + }, + "created_at": "2018-08-21T14:38:20.077Z", + "resource_type": "Issue", + "resource_id": 11, + "state": "closed" + } \ No newline at end of file diff --git a/spec/fixtures/issue_resource_state_events.json b/spec/fixtures/issue_resource_state_events.json new file mode 100644 index 000000000..31ae123a9 --- /dev/null +++ b/spec/fixtures/issue_resource_state_events.json @@ -0,0 +1,32 @@ +[ + { + "id": 142, + "user": { + "id": 1, + "name": "Administrator", + "username": "root", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://gitlab.example.com/root" + }, + "created_at": "2018-08-20T13:38:20.077Z", + "resource_type": "Issue", + "resource_id": 11, + "state": "opened" + }, + { + "id": 143, + "user": { + "id": 1, + "name": "Administrator", + "username": "root", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://gitlab.example.com/root" + }, + "created_at": "2018-08-21T14:38:20.077Z", + "resource_type": "Issue", + "resource_id": 11, + "state": "closed" + } + ] \ No newline at end of file diff --git a/spec/fixtures/mr_resource_state_event.json b/spec/fixtures/mr_resource_state_event.json new file mode 100644 index 000000000..c25edd1ac --- /dev/null +++ b/spec/fixtures/mr_resource_state_event.json @@ -0,0 +1,15 @@ +{ + "id": 120, + "user": { + "id": 1, + "name": "Administrator", + "username": "root", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://gitlab.example.com/root" + }, + "created_at": "2018-08-21T14:38:20.077Z", + "resource_type": "MergeRequest", + "resource_id": 11, + "state": "closed" + } \ No newline at end of file diff --git a/spec/fixtures/mr_resource_state_events.json b/spec/fixtures/mr_resource_state_events.json new file mode 100644 index 000000000..1586f138e --- /dev/null +++ b/spec/fixtures/mr_resource_state_events.json @@ -0,0 +1,32 @@ +[ + { + "id": 142, + "user": { + "id": 1, + "name": "Administrator", + "username": "root", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://gitlab.example.com/root" + }, + "created_at": "2018-08-20T13:38:20.077Z", + "resource_type": "MergeRequest", + "resource_id": 11, + "state": "opened" + }, + { + "id": 143, + "user": { + "id": 1, + "name": "Administrator", + "username": "root", + "state": "active", + "avatar_url": "https://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon", + "web_url": "http://gitlab.example.com/root" + }, + "created_at": "2018-08-21T14:38:20.077Z", + "resource_type": "MergeRequest", + "resource_id": 11, + "state": "closed" + } + ] \ No newline at end of file From aeca5a9a484c1f1c244a2459f3a31e8fb2d73275 Mon Sep 17 00:00:00 2001 From: Dinesh Shanmugam C Date: Tue, 1 Sep 2020 12:01:51 +0530 Subject: [PATCH 5/6] Tests : Added spec tests for Resource state events Tests for 1. Issue resoruce state events/event 2. MR resource state event/events --- .../client/resource_state_events_spec.rb | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 spec/gitlab/client/resource_state_events_spec.rb diff --git a/spec/gitlab/client/resource_state_events_spec.rb b/spec/gitlab/client/resource_state_events_spec.rb new file mode 100644 index 000000000..694955195 --- /dev/null +++ b/spec/gitlab/client/resource_state_events_spec.rb @@ -0,0 +1,69 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Client do + describe '.issue_state_events' do + before do + stub_get('/projects/5/issues/42/resource_state_events', 'issue_resource_state_events') + @events = Gitlab.issue_state_events(5, 42) + end + + it 'gets the correct resource' do + expect(a_get('/projects/5/issues/42/resource_state_events')).to have_been_made + end + + it "returns a paginated response of project's issue's state events" do + expect(@events).to be_a Gitlab::PaginatedResponse + expect(@events.first.id).to eq(142) + end + end + + describe '.issue_state_event' do + before do + stub_get('/projects/5/issues/42/resource_state_events/142', 'issue_resource_state_event') + @event = Gitlab.issue_state_event(5, 42, 142) + end + + it 'gets the correct resource' do + expect(a_get('/projects/5/issues/42/resource_state_events/142')).to have_been_made + end + + it "returns a paginated response of project's issue's state event" do + expect(@event).to be_a Gitlab::ObjectifiedHash + expect(@event.user.name).to eq('Administrator') + end + end + + describe '.merge_request_state_events' do + before do + stub_get('/projects/5/merge_requests/42/resource_state_events', 'mr_resource_state_events') + @events = Gitlab.merge_request_state_events(5, 42) + end + + it 'gets the correct resource' do + expect(a_get('/projects/5/merge_requests/42/resource_state_events')).to have_been_made + end + + it "returns a paginated response of project's merge request's state events" do + expect(@events).to be_a Gitlab::PaginatedResponse + expect(@events.first.id).to eq(142) + end + end + + describe '.merge_request_state_event' do + before do + stub_get('/projects/5/merge_requests/42/resource_state_events/142', 'mr_resource_state_event') + @event = Gitlab.merge_request_state_event(5, 42, 142) + end + + it 'gets the correct resource' do + expect(a_get('/projects/5/merge_requests/42/resource_state_events/142')).to have_been_made + end + + it "returns a paginated response of project's merge request's state event" do + expect(@event).to be_a Gitlab::ObjectifiedHash + expect(@event.user.name).to eq('Administrator') + end + end +end From 345d03a84955a3f51e18afe4f9ff9b35f8b81783 Mon Sep 17 00:00:00 2001 From: Dinesh Shanmugam C Date: Tue, 1 Sep 2020 13:22:26 +0530 Subject: [PATCH 6/6] Fix : Fixed test param for shell Shell completion returned newly added issue state events. Modified the test to accomodate the newly added issue state events. --- spec/gitlab/shell_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/gitlab/shell_spec.rb b/spec/gitlab/shell_spec.rb index a6ebf7116..a1055b4b5 100644 --- a/spec/gitlab/shell_spec.rb +++ b/spec/gitlab/shell_spec.rb @@ -63,7 +63,7 @@ it 'returns an Array of matching commands' do completed_cmds = @comp.call 'issue' expect(completed_cmds).to be_a Array - expect(completed_cmds.sort).to eq(%w[issue issue_label_event issue_label_events issue_links issue_note issue_notes issues]) + expect(completed_cmds.sort).to eq(%w[issue issue_label_event issue_label_events issue_links issue_note issue_notes issue_state_event issue_state_events issues]) end end end