Merge branch '50564-chat-service-refactoring' into 'master'

Use sample data if repo has no commit in ChatService

Closes #50564

See merge request gitlab-org/gitlab-ce!21440
This commit is contained in:
Nick Thomas 2018-09-03 09:46:21 +00:00
commit 85b8206c41
3 changed files with 61 additions and 2 deletions

View file

@ -0,0 +1,5 @@
---
title: Use sample data for push event when no commits created
merge_request: 21440
author: Takuya Noguchi
type: fixed

View file

@ -97,11 +97,15 @@ module Gitlab
}
end
# This method provide a sample data generated with
# This method provides a sample data generated with
# existing project and commits to test webhooks
def build_sample(project, user)
# Use sample data if repo has no commit
# (expect the case of test service configuration settings)
return sample_data if project.empty_repo?
ref = "#{Gitlab::Git::BRANCH_REF_PREFIX}#{project.default_branch}"
commits = project.repository.commits(project.default_branch.to_s, limit: 3) rescue []
commits = project.repository.commits(project.default_branch.to_s, limit: 3)
build(project, user, commits.last&.id, commits.first&.id, ref, commits)
end

View file

@ -26,4 +26,54 @@ describe ChatNotificationService do
end
end
end
describe '#execute' do
let(:chat_service) { described_class.new }
let(:user) { create(:user) }
let(:project) { create(:project, :repository) }
let(:webhook_url) { 'https://example.gitlab.com/' }
before do
allow(chat_service).to receive_messages(
project: project,
project_id: project.id,
service_hook: true,
webhook: webhook_url
)
WebMock.stub_request(:post, webhook_url)
subject.active = true
end
context 'with a repository' do
it 'returns true' do
subject.project = project
data = Gitlab::DataBuilder::Push.build_sample(project, user)
expect(Slack::Notifier).to receive(:new)
.with(webhook_url, {})
.and_return(
double(:slack_service).as_null_object
)
expect(chat_service.execute(data)).to be true
end
end
context 'with an empty repository' do
it 'returns true' do
subject.project = create(:project, :empty_repo)
data = Gitlab::DataBuilder::Push.build_sample(subject.project, user)
expect(Slack::Notifier).to receive(:new)
.with(webhook_url, {})
.and_return(
double(:slack_service).as_null_object
)
expect(chat_service.execute(data)).to be true
end
end
end
end