summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2016-09-14 20:38:20 +0800
committerLin Jen-Shin <godfat@godfat.org>2016-09-14 20:38:20 +0800
commit15bb44fc6357ca57e344d7b4818ac74ffb0a4dea (patch)
tree2e73f6989fce3bc6da3374378cf03809de2e4ba9
parentc5e0305d5fe150acd74a66efa46e3ee741642978 (diff)
downloadgitlab-ce-15bb44fc6357ca57e344d7b4818ac74ffb0a4dea.tar.gz
test for real
-rw-r--r--spec/models/project_services/pipeline_email_service_spec.rb116
1 files changed, 82 insertions, 34 deletions
diff --git a/spec/models/project_services/pipeline_email_service_spec.rb b/spec/models/project_services/pipeline_email_service_spec.rb
index 38c2b25c88c..c352ddc00c3 100644
--- a/spec/models/project_services/pipeline_email_service_spec.rb
+++ b/spec/models/project_services/pipeline_email_service_spec.rb
@@ -1,18 +1,15 @@
require 'spec_helper'
describe PipelinesEmailService do
- let(:data) do
- Gitlab::DataBuilder::Pipeline.build(create(:ci_pipeline))
- end
-
+ let(:pipeline) { create(:ci_pipeline) }
let(:recipient) { 'test@gitlab.com' }
- def expect_pipeline_service
- expect_any_instance_of(Ci::SendPipelineNotificationService)
+ let(:data) do
+ Gitlab::DataBuilder::Pipeline.build(pipeline)
end
- def receive_execute
- receive(:execute).with([recipient])
+ before do
+ ActionMailer::Base.deliveries.clear
end
describe 'Validations' do
@@ -57,24 +54,53 @@ describe PipelinesEmailService do
end
end
- describe '#test' do
+ shared_examples 'sending email' do
before do
- subject.recipients = recipient
+ perform_enqueued_jobs do
+ run
+ end
end
- shared_examples 'sending email' do
- it 'sends email' do
- expect_pipeline_service.to receive_execute
+ it 'sends email' do
+ sent_to = ActionMailer::Base.deliveries.flat_map(&:to)
+ expect(sent_to).to contain_exactly(recipient)
+ end
+ end
- subject.test(data)
+ shared_examples 'not sending email' do
+ before do
+ perform_enqueued_jobs do
+ run
end
end
- it_behaves_like 'sending email'
+ it 'does not send email' do
+ expect(ActionMailer::Base.deliveries).to be_empty
+ end
+ end
+
+ describe '#test' do
+ def run
+ subject.test(data)
+ end
+
+ before do
+ subject.recipients = recipient
+ end
+
+ context 'when pipeline is failed' do
+ before do
+ data[:object_attributes][:status] = 'failed'
+ pipeline.update(status: 'failed')
+ end
+
+ it_behaves_like 'sending email'
+ end
context 'when pipeline is succeeded' do
before do
data[:object_attributes][:status] = 'success'
+ pipeline.update(status: 'success')
end
it_behaves_like 'sending email'
@@ -82,25 +108,31 @@ describe PipelinesEmailService do
end
describe '#execute' do
+ def run
+ subject.execute(data)
+ end
+
context 'with recipients' do
before do
subject.recipients = recipient
end
- it 'sends email for failed pipeline' do
- data[:object_attributes][:status] = 'failed'
-
- expect_pipeline_service.to receive_execute
+ context 'with failed pipeline' do
+ before do
+ data[:object_attributes][:status] = 'failed'
+ pipeline.update(status: 'failed')
+ end
- subject.execute(data)
+ it_behaves_like 'sending email'
end
- it 'does not send email for succeeded pipeline' do
- data[:object_attributes][:status] = 'success'
-
- expect_pipeline_service.not_to receive_execute
+ context 'with succeeded pipeline' do
+ before do
+ data[:object_attributes][:status] = 'success'
+ pipeline.update(status: 'success')
+ end
- subject.execute(data)
+ it_behaves_like 'not sending email'
end
context 'with notify_only_broken_pipelines on' do
@@ -108,23 +140,39 @@ describe PipelinesEmailService do
subject.notify_only_broken_pipelines = true
end
- it 'sends email for failed pipeline' do
- data[:object_attributes][:status] = 'failed'
+ context 'with failed pipeline' do
+ before do
+ data[:object_attributes][:status] = 'failed'
+ pipeline.update(status: 'failed')
+ end
- expect_pipeline_service.to receive_execute
+ it_behaves_like 'sending email'
+ end
+
+ context 'with succeeded pipeline' do
+ before do
+ data[:object_attributes][:status] = 'success'
+ pipeline.update(status: 'success')
+ end
- subject.execute(data)
+ it_behaves_like 'not sending email'
end
end
end
- it 'does not send email when recipients list is empty' do
- subject.recipients = ' ,, '
- data[:object_attributes][:status] = 'failed'
+ context 'with empty recipients list' do
+ before do
+ subject.recipients = ' ,, '
+ end
- expect_pipeline_service.not_to receive_execute
+ context 'with failed pipeline' do
+ before do
+ data[:object_attributes][:status] = 'failed'
+ pipeline.update(status: 'failed')
+ end
- subject.execute(data)
+ it_behaves_like 'not sending email'
+ end
end
end
end