diff options
Diffstat (limited to 'spec/workers/new_merge_request_worker_spec.rb')
-rw-r--r-- | spec/workers/new_merge_request_worker_spec.rb | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/spec/workers/new_merge_request_worker_spec.rb b/spec/workers/new_merge_request_worker_spec.rb index 310fde4c7e1..0d64973b0fa 100644 --- a/spec/workers/new_merge_request_worker_spec.rb +++ b/spec/workers/new_merge_request_worker_spec.rb @@ -40,24 +40,51 @@ RSpec.describe NewMergeRequestWorker do end end - context 'when everything is ok' do + context 'with a user' do let(:project) { create(:project, :public) } let(:mentioned) { create(:user) } - let(:user) { create(:user) } + let(:user) { nil } let(:merge_request) do create(:merge_request, source_project: project, description: "mr for #{mentioned.to_reference}") end - it 'creates a new event record' do - expect { worker.perform(merge_request.id, user.id) }.to change { Event.count }.from(0).to(1) + shared_examples 'a new merge request where the author cannot trigger notifications' do + it 'does not create a notification for the mentioned user' do + expect(Notify).not_to receive(:new_merge_request_email) + .with(mentioned.id, merge_request.id, NotificationReason::MENTIONED) + + expect(Gitlab::AppLogger).to receive(:warn).with(message: 'Skipping sending notifications', user: user.id, klass: merge_request.class, object_id: merge_request.id) + + worker.perform(merge_request.id, user.id) + end + end + + context 'when the merge request author is blocked' do + let(:user) { create(:user, :blocked) } + + it_behaves_like 'a new merge request where the author cannot trigger notifications' end - it 'creates a notification for the mentioned user' do - expect(Notify).to receive(:new_merge_request_email) - .with(mentioned.id, merge_request.id, NotificationReason::MENTIONED) - .and_return(double(deliver_later: true)) + context 'when the merge request author is a ghost' do + let(:user) { create(:user, :ghost) } + + it_behaves_like 'a new merge request where the author cannot trigger notifications' + end + + context 'when everything is ok' do + let(:user) { create(:user) } + + it 'creates a new event record' do + expect { worker.perform(merge_request.id, user.id) }.to change { Event.count }.from(0).to(1) + end + + it 'creates a notification for the mentioned user' do + expect(Notify).to receive(:new_merge_request_email) + .with(mentioned.id, merge_request.id, NotificationReason::MENTIONED) + .and_return(double(deliver_later: true)) - worker.perform(merge_request.id, user.id) + worker.perform(merge_request.id, user.id) + end end end end |