Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions lib/gitlab/client/groups.rb
Original file line number Diff line number Diff line change
Expand Up @@ -354,5 +354,99 @@ def add_group_custom_attribute(key, value, group_id)
def delete_group_custom_attribute(key, group_id = nil)
delete("/groups/#{group_id}/custom_attributes/#{key}")
end

# List all the specified groups hooks
#
# @example
# Gitlab.list_group_hooks(3)
#
# @param [Integer] group_id The ID of a group.
# @return [Gitlab::PaginatedResponse] List of registered hooks https://docs.gitlab.com/ee/api/groups.html#hooks
def list_group_hooks(group_id)
get("/groups/#{group_id}/hooks")
end

# get specified group hook
#
# @example
# Gitlab.group_hook(3, 1)
#
# @param [Integer] group_id The ID of a group.
# @param [Integer] hook_id The ID of the hook.
# @return [Gitlab::ObjectifiedHash] The hook https://docs.gitlab.com/ee/api/groups.html#get-group-hook
def group_hook(group_id, hook_id)
get("/groups/#{group_id}/hooks/#{hook_id}")
end

# Add a new group hook
#
# @example
# Gitlab.add_group_hook(3, "https://example.com/my-hook-receiver", {token: "verify me"})
#
# @param [Integer] group_id The ID of a group.
# @param [String] the hook url which will receive the selected events
# @option options [Boolean] :name The name of the group.
# @option options [Boolean] :push_events Trigger hook on push events
# @potion options [String] :push_events_branch_filter Trigger hook on push events for matching branches only.
# @option options [Boolean] :issues_events Trigger hook on issues events
# @option options [Boolean] :confidential_issues_events Trigger hook on confidential issues events
# @option options [Boolean] :merge_requests_events Trigger hook on merge requests events
# @option options [Boolean] :tag_push_events Trigger hook on tag push events
# @option options [Boolean] :note_events Trigger hook on note events
# @option options [Boolean] :confidential_note_events Trigger hook on confidential note events
# @option options [Boolean] :job_events Trigger hook on job events
# @option options [Boolean] :pipeline_events Trigger hook on pipeline events
# @option options [Boolean] :wiki_page_events Trigger hook on wiki page events
# @option options [Boolean] :deployment_events Trigger hook on deployment events
# @option options [Boolean] :releases_events Trigger hook on release events
# @option options [Boolean] :subgroup_events Trigger hook on subgroup events
# @option options [Boolean] :enable_ssl_verification Do SSL verification when triggering the hook
# @option options [String] :token Secret token to validate received payloads; not returned in the response
# @return [Gitlab::ObjectifiedHash] Response body matches https://docs.gitlab.com/ee/api/groups.html#get-group-hook
def add_group_hook(group_id, url, options = {})
post("/groups/#{group_id}/hooks", body: options.merge(url: url))
end

# Edit a group hook
#
# @example
# Gitlab.edit_group_hook(3, 1, "https://example.com/my-hook-receiver", {token: "verify me"})
#
# @param [Integer] group_id The ID of a group.
# @param [Integer] hook_id The ID of a group.
# @param [String] the hook url which will receive the selected events
# @option options [Boolean] :name The name of the group.
# @option options [Boolean] :push_events Trigger hook on push events
# @potion options [String] :push_events_branch_filter Trigger hook on push events for matching branches only.
# @option options [Boolean] :issues_events Trigger hook on issues events
# @option options [Boolean] :confidential_issues_events Trigger hook on confidential issues events
# @option options [Boolean] :merge_requests_events Trigger hook on merge requests events
# @option options [Boolean] :tag_push_events Trigger hook on tag push events
# @option options [Boolean] :note_events Trigger hook on note events
# @option options [Boolean] :confidential_note_events Trigger hook on confidential note events
# @option options [Boolean] :job_events Trigger hook on job events
# @option options [Boolean] :pipeline_events Trigger hook on pipeline events
# @option options [Boolean] :wiki_page_events Trigger hook on wiki page events
# @option options [Boolean] :deployment_events Trigger hook on deployment events
# @option options [Boolean] :releases_events Trigger hook on release events
# @option options [Boolean] :subgroup_events Trigger hook on subgroup events
# @option options [Boolean] :enable_ssl_verification Do SSL verification when triggering the hook
# @option options [String] :token Secret token to validate received payloads; not returned in the response
# @return [Gitlab::ObjectifiedHash] Response body matches https://docs.gitlab.com/ee/api/groups.html#edit-group-hook
def edit_group_hook(group_id, hook_id, url, options = {})
post("/groups/#{group_id}/hooks/#{hook_id}", body: options.merge(url: url))
end

# Delete a group hook
#
# @example
# Gitlab.delete_group_hook(3, 1)
#
# @param [Integer] group_id The ID of a group.
# @param [Integer] hook_id The ID of a group.
# @return [Gitlab::ObjectifiedHash] no body, will evaluate to an empty hash. https://docs.gitlab.com/ee/api/groups.html#delete-group-hook
def delete_group_hook(group_id, hook_id)
delete("/groups/#{group_id}/hooks/#{hook_id}")
end
end
end
25 changes: 25 additions & 0 deletions spec/fixtures/group_hook.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"id": 1,
"url": "http://example.com/hook",
"group_id": 3,
"push_events": true,
"push_events_branch_filter": "",
"issues_events": true,
"confidential_issues_events": true,
"merge_requests_events": true,
"tag_push_events": true,
"note_events": true,
"confidential_note_events": true,
"job_events": true,
"pipeline_events": true,
"wiki_page_events": true,
"deployment_events": true,
"releases_events": true,
"subgroup_events": true,
"enable_ssl_verification": true,
"repository_update_events": false,
"alert_status": "executable",
"disabled_until": null,
"url_variables": [],
"created_at": "2012-10-12T17:04:47Z"
}
Empty file.
27 changes: 27 additions & 0 deletions spec/fixtures/group_hooks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
[
{
"id": 1,
"url": "http://example.com/hook",
"group_id": 3,
"push_events": true,
"push_events_branch_filter": "",
"issues_events": true,
"confidential_issues_events": true,
"merge_requests_events": true,
"tag_push_events": true,
"note_events": true,
"confidential_note_events": true,
"job_events": true,
"pipeline_events": true,
"wiki_page_events": true,
"deployment_events": true,
"releases_events": true,
"subgroup_events": true,
"enable_ssl_verification": true,
"repository_update_events": false,
"alert_status": "executable",
"disabled_until": null,
"url_variables": [],
"created_at": "2012-10-12T17:04:47Z"
}
]
95 changes: 91 additions & 4 deletions spec/gitlab/client/groups_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@

it 'gets the correct resource' do
expect(a_post('/groups')
.with(body: { path: 'gitlab-path', name: 'GitLab-Group' })).to have_been_made
.with(body: { path: 'gitlab-path', name: 'GitLab-Group' })).to have_been_made
end

it 'returns information about a created group' do
Expand All @@ -59,8 +59,8 @@

it 'gets the correct resource' do
expect(a_post('/groups')
.with(body: { path: 'gitlab-path', name: 'GitLab-Group',
description: 'gitlab group description' })).to have_been_made
.with(body: { path: 'gitlab-path', name: 'GitLab-Group',
description: 'gitlab group description' })).to have_been_made
end

it 'returns information about a created group' do
Expand Down Expand Up @@ -218,7 +218,7 @@

it 'gets the correct resource' do
expect(a_put('/groups/3/members/1')
.with(body: { access_level: '50' })).to have_been_made
.with(body: { access_level: '50' })).to have_been_made
end

it 'returns information about the edited member' do
Expand Down Expand Up @@ -446,4 +446,91 @@
end
end
end

describe '.list_group_hooks' do
before do
stub_get('/groups/3/hooks', 'group_hooks')
@hooks = Gitlab.list_group_hooks(3)
end

it 'gets the correct resource' do
expect(a_get('/groups/3/hooks')).to have_been_made
end

it 'returns a list of registered group hooks based on the group id' do
expect(@hooks).to be_a Gitlab::PaginatedResponse
expect(@hooks.size).to eq(1)
expect(@hooks[0].url).to eq('http://example.com/hook')
end
end

describe '.group_hook(group_id, hook_id)' do
before do
stub_get('/groups/3/hooks/1', 'group_hook')
@hook = Gitlab.group_hook(3, 1)
end

it 'gets the correct resource' do
expect(a_get('/groups/3/hooks/1')).to have_been_made
end

it 'returns information about the requested group hook' do
expect(@hook).to be_a Gitlab::ObjectifiedHash
expect(@hook.url).to eq('http://example.com/hook')
end
end

describe '.add_group_hook(group_id, url, options)' do
before do
stub_post('/groups/3/hooks', 'group_hook')
@hook = Gitlab.add_group_hook(3, 'http://example.com', {
push_events: true,
push_events_branch_filter: 'main',
enable_ssl_verification: true,
token: 'foofoofoo1234'
})
end

it 'creates the correct resource' do
expect(a_post('/groups/3/hooks')
.with(body: { url: 'http://example.com', push_events: true, push_events_branch_filter: 'main', enable_ssl_verification: true, token: 'foofoofoo1234' })).to have_been_made
end

it 'returns the created group hook matching the format of GET hook' do
expect(@hook).to be_a Gitlab::ObjectifiedHash
expect(@hook.url).to eq('http://example.com/hook')
end
end

describe '.edit_group_hook(group_id, hook_id, url)' do
before do
stub_post('/groups/3/hooks/1', 'group_hook')
@hook = Gitlab.edit_group_hook(3, 1, 'http://example.com', { push_events: false, token: 'foofoofoo1234' })
end

it 'updates the correct resource' do
expect(a_post('/groups/3/hooks/1')
.with(body: { url: 'http://example.com', push_events: false, token: 'foofoofoo1234' })).to have_been_made
end

it 'returns the updated group hook resource' do
expect(@hook).to be_a Gitlab::ObjectifiedHash
expect(@hook.url).to eq('http://example.com/hook')
end
end

describe '.delete_group_hook(group_id, hook_id)' do
before do
stub_delete('/groups/3/hooks/1', 'group_hook_delete')
@hook = Gitlab.delete_group_hook(3, 1)
end

it 'delete the resource' do
expect(a_delete('/groups/3/hooks/1')).to have_been_made
end

it 'returns false in test but in real life it returns status without a body which is converted to ObjectifiedHash' do
expect(@hook).to eq(false)
end
end
end