Skip to content
Snippets Groups Projects
Commit 21f10af0 authored by Douglas Barbosa Alexandre's avatar Douglas Barbosa Alexandre
Browse files

Scope hooks thal will run for confidential issues

parent dd64f8aa
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -2,6 +2,7 @@ class ProjectHook < WebHook
belongs_to :project
 
scope :issue_hooks, -> { where(issues_events: true) }
scope :confidential_issue_hooks, -> { where(confidential_issues_events: true) }
scope :note_hooks, -> { where(note_events: true) }
scope :merge_request_hooks, -> { where(merge_requests_events: true) }
scope :build_hooks, -> { where(build_events: true) }
Loading
Loading
Loading
Loading
@@ -34,6 +34,7 @@ class Service < ActiveRecord::Base
scope :push_hooks, -> { where(push_events: true, active: true) }
scope :tag_push_hooks, -> { where(tag_push_events: true, active: true) }
scope :issue_hooks, -> { where(issues_events: true, active: true) }
scope :confidential_issue_hooks, -> { where(confidential_issues_events: true, active: true) }
scope :merge_request_hooks, -> { where(merge_requests_events: true, active: true) }
scope :note_hooks, -> { where(note_events: true, active: true) }
scope :build_hooks, -> { where(build_events: true, active: true) }
Loading
Loading
Loading
Loading
@@ -14,11 +14,10 @@ module Issues
end
 
def execute_hooks(issue, action = 'open')
return if issue.confidential?
issue_data = hook_data(issue, action)
issue.project.execute_hooks(issue_data, :issue_hooks)
issue.project.execute_services(issue_data, :issue_hooks)
issue_data = hook_data(issue, action)
hooks_scope = issue.confidential? ? :confidential_issue_hooks : :issue_hooks
issue.project.execute_hooks(issue_data, hooks_scope)
issue.project.execute_services(issue_data, hooks_scope)
end
end
end
Loading
Loading
@@ -53,12 +53,21 @@ describe Issues::CloseService, services: true do
end
end
 
context 'when issue is not confidential' do
it 'executes issue hooks' do
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :issue_hooks)
expect(project).to receive(:execute_services).with(an_instance_of(Hash), :issue_hooks)
described_class.new(project, user).execute(issue)
end
end
context 'when issue is confidential' do
it 'does not execute hooks' do
it 'executes confidential issue hooks' do
issue = create(:issue, :confidential, project: project)
 
expect(project).not_to receive(:execute_hooks)
expect(project).not_to receive(:execute_services)
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :confidential_issue_hooks)
expect(project).to receive(:execute_services).with(an_instance_of(Hash), :confidential_issue_hooks)
 
described_class.new(project, user).execute(issue)
end
Loading
Loading
Loading
Loading
@@ -73,11 +73,20 @@ describe Issues::CreateService, services: true do
end
end
 
it 'does not execute hooks when issue is confidential' do
it 'executes issue hooks when issue is not confidential' do
opts = { title: 'Title', description: 'Description', confidential: false }
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :issue_hooks)
expect(project).to receive(:execute_services).with(an_instance_of(Hash), :issue_hooks)
described_class.new(project, user, opts).execute
end
it 'executes confidential issue hooks when issue is confidential' do
opts = { title: 'Title', description: 'Description', confidential: true }
 
expect(project).not_to receive(:execute_hooks)
expect(project).not_to receive(:execute_services)
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :confidential_issue_hooks)
expect(project).to receive(:execute_services).with(an_instance_of(Hash), :confidential_issue_hooks)
 
described_class.new(project, user, opts).execute
end
Loading
Loading
Loading
Loading
@@ -5,7 +5,7 @@ describe Issues::ReopenService, services: true do
let(:issue) { create(:issue, :closed, project: project) }
 
describe '#execute' do
context 'current user is not authorized to reopen issue' do
context 'when user is not authorized to reopen issue' do
before do
guest = create(:user)
project.team << [guest, :guest]
Loading
Loading
@@ -20,17 +20,31 @@ describe Issues::ReopenService, services: true do
end
end
 
context 'when issue is confidential' do
it 'does not execute hooks' do
user = create(:user)
context 'when user is authrized to reopen issue' do
let(:user) { create(:user) }
before do
project.team << [user, :master]
end
context 'when issue is not confidential' do
it 'executes issue hooks' do
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :issue_hooks)
expect(project).to receive(:execute_services).with(an_instance_of(Hash), :issue_hooks)
 
issue = create(:issue, :confidential, :closed, project: project)
described_class.new(project, user).execute(issue)
end
end
 
expect(project).not_to receive(:execute_hooks)
expect(project).not_to receive(:execute_services)
context 'when issue is confidential' do
it 'executes confidential issue hooks' do
issue = create(:issue, :confidential, :closed, project: project)
 
described_class.new(project, user).execute(issue)
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :confidential_issue_hooks)
expect(project).to receive(:execute_services).with(an_instance_of(Hash), :confidential_issue_hooks)
described_class.new(project, user).execute(issue)
end
end
end
end
Loading
Loading
Loading
Loading
@@ -105,9 +105,9 @@ describe Issues::UpdateService, services: true do
expect(note.note).to eq 'Made the issue confidential'
end
 
it 'does not execute hooks' do
expect(project).not_to receive(:execute_hooks)
expect(project).not_to receive(:execute_services)
it 'executes confidential issue hooks' do
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :confidential_issue_hooks)
expect(project).to receive(:execute_services).with(an_instance_of(Hash), :confidential_issue_hooks)
 
update_issue(confidential: true)
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment