diff --git a/spec/workers/share_worker_spec.rb b/spec/workers/share_worker_spec.rb index df41350d..4120aeda 100644 --- a/spec/workers/share_worker_spec.rb +++ b/spec/workers/share_worker_spec.rb @@ -23,40 +23,44 @@ describe ShareWorker do end describe "#perform" do - subject { + before do + allow(Sidekiq.logger).to receive(:info) + end + + subject do Sidekiq::Testing.fake! do ShareWorker.perform_async(user.id, answer.id, 'twitter') end - } + end context 'when answer doesn\'t exist' do it 'prevents the job from retrying and logs a message' do answer.destroy! - Sidekiq.logger.should_receive(:info).with("Tried to post answer ##{answer.id} for user ##{user.id} to Twitter but the user/answer/service did not exist (likely deleted), will not retry.") expect { subject }.to change(ShareWorker.jobs, :size).by(1) expect { ShareWorker.drain }.to change(ShareWorker.jobs, :size).by(-1) + expect(Sidekiq.logger).to have_received(:info).with("Tried to post answer ##{answer.id} for user ##{user.id} to Twitter but the user/answer/service did not exist (likely deleted), will not retry.") end end context 'when answer exists' do it 'handles Twitter::Error::DuplicateStatus' do allow_any_instance_of(Services::Twitter).to receive(:post).with(answer).and_raise(Twitter::Error::DuplicateStatus) - Sidekiq.logger.should_receive(:info).with("Tried to post answer ##{answer.id} from user ##{user.id} to Twitter but the status was already posted.") subject ShareWorker.drain + expect(Sidekiq.logger).to have_received(:info).with("Tried to post answer ##{answer.id} from user ##{user.id} to Twitter but the status was already posted.") end it 'handles Twitter::Error::Unauthorized' do allow_any_instance_of(Services::Twitter).to receive(:post).with(answer).and_raise(Twitter::Error::Unauthorized) - Sidekiq.logger.should_receive(:info).with("Tried to post answer ##{answer.id} from user ##{user.id} to Twitter but the token has exired or been revoked.") subject ShareWorker.drain + expect(Sidekiq.logger).to have_received(:info).with("Tried to post answer ##{answer.id} from user ##{user.id} to Twitter but the token has exired or been revoked.") end it 'retries on unhandled exceptions' do expect { subject }.to change(ShareWorker.jobs, :size).by(1) - Sidekiq.logger.should_receive(:info) expect { ShareWorker.drain }.to raise_error(Twitter::Error::BadRequest) + expect(Sidekiq.logger).to have_received(:info) end end end