diff options
| author | Lin Jen-Shin <godfat@godfat.org> | 2016-09-14 20:38:20 +0800 |
|---|---|---|
| committer | Lin Jen-Shin <godfat@godfat.org> | 2016-09-14 20:38:20 +0800 |
| commit | 15bb44fc6357ca57e344d7b4818ac74ffb0a4dea (patch) | |
| tree | 2e73f6989fce3bc6da3374378cf03809de2e4ba9 | |
| parent | c5e0305d5fe150acd74a66efa46e3ee741642978 (diff) | |
| download | gitlab-ce-15bb44fc6357ca57e344d7b4818ac74ffb0a4dea.tar.gz | |
test for real
| -rw-r--r-- | spec/models/project_services/pipeline_email_service_spec.rb | 116 |
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 |
