Merge pull request #5704 from betagouv/retry_503_in_social_attestation
cherche a télécharger l'attestation sociale tous les jours pendant 5 jours
This commit is contained in:
commit
ac1c53f8f5
4 changed files with 27 additions and 2 deletions
|
@ -16,7 +16,7 @@ class Champs::SiretController < ApplicationController
|
|||
|
||||
begin
|
||||
etablissement = find_etablissement_with_siret
|
||||
rescue ApiEntreprise::API::RequestFailed
|
||||
rescue ApiEntreprise::API::RequestFailed, ApiEntreprise::API::ServiceUnavailable
|
||||
return siret_error(:network_error)
|
||||
end
|
||||
if etablissement.nil?
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
class ApiEntreprise::AttestationSocialeJob < ApiEntreprise::Job
|
||||
retry_on ApiEntreprise::API::ServiceUnavailable, wait: 1.day
|
||||
|
||||
def perform(etablissement_id, procedure_id)
|
||||
etablissement = Etablissement.find(etablissement_id)
|
||||
etablissement_params = ApiEntreprise::AttestationSocialeAdapter.new(etablissement.siret, procedure_id).to_params
|
||||
|
|
|
@ -20,6 +20,9 @@ class ApiEntreprise::API
|
|||
class BadFormatRequest < StandardError
|
||||
end
|
||||
|
||||
class ServiceUnavailable < StandardError
|
||||
end
|
||||
|
||||
def self.entreprise(siren, procedure_id)
|
||||
call(ENTREPRISE_RESOURCE_NAME, siren, procedure_id)
|
||||
end
|
||||
|
@ -76,7 +79,9 @@ class ApiEntreprise::API
|
|||
elsif response.code&.between?(401, 499)
|
||||
raise ResourceNotFound, "url: #{url}"
|
||||
elsif response.code == 400
|
||||
raise BadFormatRequest, "url: #{url}"
|
||||
raise BadFormatRequest, "url: #{url}"
|
||||
elsif response.code == 503
|
||||
raise ServiceUnavailable, "url: #{url}"
|
||||
else
|
||||
raise RequestFailed, "HTTP Error Code: #{response.code} for #{url}\nheaders: #{response.headers}\nbody: #{response.body}"
|
||||
end
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
include ActiveJob::TestHelper
|
||||
|
||||
RSpec.describe ApiEntreprise::AttestationSocialeJob, type: :job do
|
||||
let(:etablissement) { create(:etablissement, siret: siret) }
|
||||
let(:siret) { '41816609600069' }
|
||||
|
@ -21,4 +23,20 @@ RSpec.describe ApiEntreprise::AttestationSocialeJob, type: :job do
|
|||
subject
|
||||
expect(Etablissement.find(etablissement.id).entreprise_attestation_sociale).to be_attached
|
||||
end
|
||||
|
||||
context 'when ApiEntreprise::API::ServiceUnavailable is raised' do
|
||||
# https://api.rubyonrails.org/classes/ActiveJob/Exceptions/ClassMethods.html#method-i-retry_on
|
||||
# retry on will try 5 times and then bubble up the error
|
||||
it 'makes 5 attempts' do
|
||||
assert_performed_jobs 5 do
|
||||
ServiceUnavailableJob.perform_later rescue ApiEntreprise::API::ServiceUnavailable
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class ServiceUnavailableJob < ApiEntreprise::AttestationSocialeJob
|
||||
def perform
|
||||
raise ApiEntreprise::API::ServiceUnavailable
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue