Scope hooks thal will run for confidential issues

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