fix(dossiers/api_down): specific error when API Entreprise is globally down.
This commit is contained in:
parent
d1c06aa92e
commit
c4f6305b3a
3 changed files with 27 additions and 3 deletions
|
@ -114,8 +114,15 @@ module Users
|
||||||
sanitized_siret = siret_model.siret
|
sanitized_siret = siret_model.siret
|
||||||
begin
|
begin
|
||||||
etablissement = APIEntrepriseService.create_etablissement(@dossier, sanitized_siret, current_user.id)
|
etablissement = APIEntrepriseService.create_etablissement(@dossier, sanitized_siret, current_user.id)
|
||||||
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable, APIEntrepriseToken::TokenError
|
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable, APIEntrepriseToken::TokenError => e
|
||||||
return render_siret_error(t('errors.messages.siret_network_error'))
|
if e.is_a?(APIEntrepriseToken::TokenError) || APIEntrepriseService.api_up?
|
||||||
|
# probably random error, invite user to retry
|
||||||
|
Sentry.capture_exception(e, extra: { dossier_id: @dossier.id, siret: sanitized_siret })
|
||||||
|
return render_siret_error(t('errors.messages.siret_network_error'))
|
||||||
|
else
|
||||||
|
# global API Entreprise error. TODO: degraded mode + notify ops
|
||||||
|
return render_siret_error(t('errors.messages.siret_api_down'))
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if etablissement.nil?
|
if etablissement.nil?
|
||||||
return render_siret_error(t('errors.messages.siret_unknown'))
|
return render_siret_error(t('errors.messages.siret_unknown'))
|
||||||
|
|
|
@ -370,6 +370,7 @@ fr:
|
||||||
procedure_not_found: "La démarche n’existe pas"
|
procedure_not_found: "La démarche n’existe pas"
|
||||||
siret_unknown: 'Désolé, nous n’avons pas trouvé d’établissement enregistré correspondant à ce numéro SIRET.'
|
siret_unknown: 'Désolé, nous n’avons pas trouvé d’établissement enregistré correspondant à ce numéro SIRET.'
|
||||||
siret_network_error: 'Désolé, la récupération des informations SIRET est temporairement indisponible. Veuillez réessayer dans quelques instants.'
|
siret_network_error: 'Désolé, la récupération des informations SIRET est temporairement indisponible. Veuillez réessayer dans quelques instants.'
|
||||||
|
siret_api_down: "L'INSEE rencontre actuellement un problème majeur qui empêche le traitement des informations SIRET. Il n'y a pas encore de date de résolution annoncée."
|
||||||
siret_not_found: 'Nous n’avons pas trouvé d’établissement correspondant à ce numéro de SIRET.'
|
siret_not_found: 'Nous n’avons pas trouvé d’établissement correspondant à ce numéro de SIRET.'
|
||||||
# etablissement_fail: 'Désolé, nous n’avons pas réussi à enregistrer l’établissement correspondant à ce numéro SIRET'
|
# etablissement_fail: 'Désolé, nous n’avons pas réussi à enregistrer l’établissement correspondant à ce numéro SIRET'
|
||||||
france_connect:
|
france_connect:
|
||||||
|
|
|
@ -207,6 +207,7 @@ describe Users::DossiersController, type: :controller do
|
||||||
let(:api_etablissement_status) { 200 }
|
let(:api_etablissement_status) { 200 }
|
||||||
let(:api_etablissement_body) { File.read('spec/fixtures/files/api_entreprise/etablissements.json') }
|
let(:api_etablissement_body) { File.read('spec/fixtures/files/api_entreprise/etablissements.json') }
|
||||||
let(:token_expired) { false }
|
let(:token_expired) { false }
|
||||||
|
let(:api_current_status_response) { nil }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
sign_in(user)
|
sign_in(user)
|
||||||
|
@ -215,6 +216,11 @@ describe Users::DossiersController, type: :controller do
|
||||||
allow_any_instance_of(APIEntrepriseToken).to receive(:roles)
|
allow_any_instance_of(APIEntrepriseToken).to receive(:roles)
|
||||||
.and_return(["attestations_fiscales", "attestations_sociales", "bilans_entreprise_bdf"])
|
.and_return(["attestations_fiscales", "attestations_sociales", "bilans_entreprise_bdf"])
|
||||||
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(token_expired)
|
allow_any_instance_of(APIEntrepriseToken).to receive(:expired?).and_return(token_expired)
|
||||||
|
|
||||||
|
if api_current_status_response
|
||||||
|
stub_request(:get, "https://entreprise.api.gouv.fr/watchdoge/dashboard/current_status")
|
||||||
|
.to_return(body: api_current_status_response)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
subject! { post :update_siret, params: { id: dossier.id, user: { siret: params_siret } } }
|
subject! { post :update_siret, params: { id: dossier.id, user: { siret: params_siret } } }
|
||||||
|
@ -255,12 +261,21 @@ describe Users::DossiersController, type: :controller do
|
||||||
|
|
||||||
context 'with a valid SIRET' do
|
context 'with a valid SIRET' do
|
||||||
let(:params_siret) { '418 166 096 00051' }
|
let(:params_siret) { '418 166 096 00051' }
|
||||||
context 'When API-Entreprise is down' do
|
|
||||||
|
context 'When API-Entreprise is ponctually down' do
|
||||||
let(:api_etablissement_status) { 502 }
|
let(:api_etablissement_status) { 502 }
|
||||||
|
let(:api_current_status_response) { File.read('spec/fixtures/files/api_entreprise/current_status.json') }
|
||||||
|
|
||||||
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
|
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'When API-Entreprise is globally down' do
|
||||||
|
let(:api_etablissement_status) { 502 }
|
||||||
|
let(:api_current_status_response) { File.read('spec/fixtures/files/api_entreprise/current_status.json').tr('200', '502') }
|
||||||
|
|
||||||
|
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_api_down')
|
||||||
|
end
|
||||||
|
|
||||||
context 'when API-Entreprise doesn’t know this SIRET' do
|
context 'when API-Entreprise doesn’t know this SIRET' do
|
||||||
let(:api_etablissement_status) { 404 }
|
let(:api_etablissement_status) { 404 }
|
||||||
|
|
||||||
|
@ -269,6 +284,7 @@ describe Users::DossiersController, type: :controller do
|
||||||
|
|
||||||
context 'when default token has expired' do
|
context 'when default token has expired' do
|
||||||
let(:api_etablissement_status) { 200 }
|
let(:api_etablissement_status) { 200 }
|
||||||
|
let(:api_current_status_response) { File.read('spec/fixtures/files/api_entreprise/current_status.json') }
|
||||||
let(:token_expired) { true }
|
let(:token_expired) { true }
|
||||||
|
|
||||||
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
|
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue