diff options
author | Jarka Kadlecova <jarka@gitlab.com> | 2017-08-01 15:38:45 +0300 |
---|---|---|
committer | Jarka Kadlecova <jarka@gitlab.com> | 2017-08-07 16:57:56 +0300 |
commit | 9ef3c431e4859e1bc03267735b956d5920d5dd42 (patch) | |
tree | 5a4063641e79766c249924f5095e6c328a279846 /spec/workers/new_merge_request_worker_spec.rb | |
parent | faa2a123911eaf84bb57163ea7af759d4632601b (diff) |
Move some after_create parts to worker to improve performance
Diffstat (limited to 'spec/workers/new_merge_request_worker_spec.rb')
-rw-r--r-- | spec/workers/new_merge_request_worker_spec.rb | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/spec/workers/new_merge_request_worker_spec.rb b/spec/workers/new_merge_request_worker_spec.rb new file mode 100644 index 00000000000..85af6184d39 --- /dev/null +++ b/spec/workers/new_merge_request_worker_spec.rb @@ -0,0 +1,56 @@ +require 'spec_helper' + +describe NewMergeRequestWorker do + describe '#perform' do + let(:worker) { described_class.new } + + context 'when a merge request not found' do + it 'does not call Services' do + expect(EventCreateService).not_to receive(:new) + expect(NotificationService).not_to receive(:new) + + worker.perform(99, create(:user).id) + end + + it 'logs an error' do + expect(Rails.logger).to receive(:error).with('NewMergeRequestWorker: couldn\'t find MergeRequest with ID=99, skipping job') + + worker.perform(99, create(:user).id) + end + end + + context 'when a user not found' do + it 'does not call Services' do + expect(EventCreateService).not_to receive(:new) + expect(NotificationService).not_to receive(:new) + + worker.perform(create(:merge_request).id, 99) + end + + it 'logs an error' do + expect(Rails.logger).to receive(:error).with('NewMergeRequestWorker: couldn\'t find User with ID=99, skipping job') + + worker.perform(create(:merge_request).id, 99) + end + end + + context 'when everything is ok' do + let(:project) { create(:project, :public) } + let(:mentioned) { create(:user) } + let(:user) { create(:user) } + 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) + end + + it 'creates a notification for the assignee' do + expect(Notify).to receive(:new_merge_request_email).with(mentioned.id, merge_request.id).and_return(double(deliver_later: true)) + + worker.perform(merge_request.id, user.id) + end + end + end +end |