SlackService - respect `notify_only_default_branch` for push events

This commit is contained in:
Mario de la Ossa 2018-02-23 22:13:35 -06:00
parent f330f65960
commit 158514bba3
No known key found for this signature in database
GPG Key ID: 20CA8F4C6A20761B
3 changed files with 32 additions and 3 deletions

View File

@ -99,7 +99,7 @@ class ChatNotificationService < Service
def get_message(object_kind, data)
case object_kind
when "push", "tag_push"
ChatMessage::PushMessage.new(data)
ChatMessage::PushMessage.new(data) if notify_for_ref?(data)
when "issue"
ChatMessage::IssueMessage.new(data) unless update?(data)
when "merge_request"
@ -145,10 +145,16 @@ class ChatNotificationService < Service
end
def notify_for_ref?(data)
return true if data[:object_attributes][:tag]
return true if data.dig(:object_attributes, :tag)
return true unless notify_only_default_branch?
data[:object_attributes][:ref] == project.default_branch
ref = if data[:ref]
Gitlab::Git.ref_name(data[:ref])
else
data.dig(:object_attributes, :ref)
end
ref == project.default_branch
end
def notify_for_pipeline?(data)

View File

@ -0,0 +1,5 @@
---
title: Fix Slack/Mattermost notifications not respecting `notify_only_default_branch` setting for pushes
merge_request: 17345
author:
type: fixed

View File

@ -337,6 +337,7 @@ RSpec.shared_examples 'slack or mattermost notifications' do
before do
chat_service.notify_only_default_branch = true
WebMock.stub_request(:post, webhook_url)
end
it 'does not call the Slack/Mattermost API for pipeline events' do
@ -345,6 +346,23 @@ RSpec.shared_examples 'slack or mattermost notifications' do
expect(result).to be_falsy
end
it 'does not notify push events if they are not for the default branch' do
ref = "#{Gitlab::Git::BRANCH_REF_PREFIX}test"
push_sample_data = Gitlab::DataBuilder::Push.build(project, user, nil, nil, ref, [])
chat_service.execute(push_sample_data)
expect(WebMock).not_to have_requested(:post, webhook_url)
end
it 'notifies about push events for the default branch' do
push_sample_data = Gitlab::DataBuilder::Push.build_sample(project, user)
chat_service.execute(push_sample_data)
expect(WebMock).to have_requested(:post, webhook_url).once
end
end
context 'when disabled' do