From 05e91306349096497cbc7642a85d53bbdab6c06a Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Thu, 3 Dec 2020 11:17:27 +0100 Subject: [PATCH] refator test --- spec/jobs/api_entreprise/job_spec.rb | 53 ++++++++++++---------------- 1 file changed, 22 insertions(+), 31 deletions(-) diff --git a/spec/jobs/api_entreprise/job_spec.rb b/spec/jobs/api_entreprise/job_spec.rb index 59af2288f..e9173a2e6 100644 --- a/spec/jobs/api_entreprise/job_spec.rb +++ b/spec/jobs/api_entreprise/job_spec.rb @@ -1,46 +1,37 @@ include ActiveJob::TestHelper RSpec.describe ApiEntreprise::Job, type: :job do - # https://api.rubyonrails.org/classes/ActiveJob/Exceptions/ClassMethods.html#method-i-retry_on - context 'when an exception is raised' do - subject do - assert_performed_jobs(try) do - ExceptionJob.perform_later(error) rescue StandardError + # https://api.rubyonrails.org/classes/ActiveJob/Exceptions/ClassMethods.html + # #method-i-retry_on + describe '#perform' do + context 'when a un retryable error is raised' do + let(:errors) { [:standard_error] } + + it 'does not retry' do + ensure_errors_force_n_retry(errors, 1) end end - context 'when it is a service_unavaible' do - let(:error) { :standard_error } - let(:try) { 1 } + context 'when a retryable error is raised' do + let(:errors) { [:service_unavaible, :bad_gateway, :timed_out] } - it { subject } + it 'retries 5 times' do + ensure_errors_force_n_retry(errors, 5) + end end - context 'when it is a service_unavaible' do - let(:error) { :service_unavaible } - let(:try) { 5 } - - it { subject } - end - - context 'when it is a bad gateway' do - let(:error) { :bad_gateway } - let(:try) { 5 } - - it { subject } - end - - context 'when it is timed out' do - let(:error) { :timed_out } - let(:try) { 5 } - - it { subject } + def ensure_errors_force_n_retry(errors, retry_nb) + errors.each do |error| + assert_performed_jobs(retry_nb) do + ErrorJob.perform_later(error) rescue StandardError + end + end end end - class ExceptionJob < ApiEntreprise::Job - def perform(exception) - case exception + class ErrorJob < ApiEntreprise::Job + def perform(error) + case error when :service_unavaible raise ApiEntreprise::API::ServiceUnavailable when :bad_gateway