Commit 85b8206c authored by Nick Thomas's avatar Nick Thomas

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
parents 91ed0dbc 7a57e59e
---
title: Use sample data for push event when no commits created
merge_request: 21440
author: Takuya Noguchi
type: fixed
...@@ -97,11 +97,15 @@ module Gitlab ...@@ -97,11 +97,15 @@ module Gitlab
} }
end end
# This method provide a sample data generated with # This method provides a sample data generated with
# existing project and commits to test webhooks # existing project and commits to test webhooks
def build_sample(project, user) 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}" 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) build(project, user, commits.last&.id, commits.first&.id, ref, commits)
end end
......
...@@ -26,4 +26,54 @@ describe ChatNotificationService do ...@@ -26,4 +26,54 @@ describe ChatNotificationService do
end end
end 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 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