Merge pull request #7778 from betagouv/allow_champ_siret_submission_when_api_down
feat(champ siret): permet la soumission du formulaire lorsque l'api est down
This commit is contained in:
commit
f80132377a
4 changed files with 52 additions and 6 deletions
|
@ -17,9 +17,22 @@ class Champs::SiretController < ApplicationController
|
||||||
|
|
||||||
begin
|
begin
|
||||||
etablissement = find_etablissement_with_siret
|
etablissement = find_etablissement_with_siret
|
||||||
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable, APIEntrepriseToken::TokenError
|
rescue => error
|
||||||
# i18n-tasks-use t('errors.messages.siret_network_error')
|
if error.try(:network_error?) && !APIEntrepriseService.api_up?
|
||||||
return siret_error(:network_error)
|
# TODO: notify ops
|
||||||
|
etablissement = APIEntrepriseService.create_etablissement_as_degraded_mode(@champ, @siret, current_user.id)
|
||||||
|
|
||||||
|
if !@champ.nil?
|
||||||
|
@champ.update!(value: etablissement.siret, etablissement: etablissement)
|
||||||
|
end
|
||||||
|
|
||||||
|
@siret = :api_entreprise_down
|
||||||
|
return
|
||||||
|
else
|
||||||
|
Sentry.capture_exception(error, extra: { dossier_id: @champ.dossier_id, siret: @siret })
|
||||||
|
# i18n-tasks-use t('errors.messages.siret_network_error')
|
||||||
|
return siret_error(:network_error)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
if etablissement.nil?
|
if etablissement.nil?
|
||||||
# i18n-tasks-use t('errors.messages.siret_not_found')
|
# i18n-tasks-use t('errors.messages.siret_not_found')
|
||||||
|
|
|
@ -9,6 +9,12 @@
|
||||||
- when :network_error
|
- when :network_error
|
||||||
= t('errors.messages.siret_network_error')
|
= t('errors.messages.siret_network_error')
|
||||||
|
|
||||||
|
- when :api_entreprise_down
|
||||||
|
= t('errors.messages.api_entreprise_down')
|
||||||
|
|
||||||
- else
|
- else
|
||||||
- if siret.present? && siret == etablissement&.siret
|
- if siret.present?
|
||||||
= render EditableChamp::EtablissementTitreComponent.new(etablissement: etablissement)
|
- if siret == etablissement&.siret && raison_sociale_or_name(etablissement).present?
|
||||||
|
= render EditableChamp::EtablissementTitreComponent.new(etablissement: etablissement)
|
||||||
|
- else
|
||||||
|
Ce SIRET existe, nous en récupérons les informations.
|
||||||
|
|
|
@ -371,6 +371,7 @@ fr:
|
||||||
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_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.'
|
||||||
|
api_entreprise_down: 'Notre fournisseur de données semble en panne, nous récupérerons les données plus tard.'
|
||||||
# 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:
|
||||||
connexion: "Erreur lors de la connexion à France Connect."
|
connexion: "Erreur lors de la connexion à France Connect."
|
||||||
|
|
|
@ -66,10 +66,14 @@ describe Champs::SiretController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the API is unavailable' do
|
context 'when the API is unavailable due to network error' do
|
||||||
let(:siret) { '82161143100015' }
|
let(:siret) { '82161143100015' }
|
||||||
let(:api_etablissement_status) { 503 }
|
let(:api_etablissement_status) { 503 }
|
||||||
|
|
||||||
|
before do
|
||||||
|
expect(APIEntrepriseService).to receive(:api_up?).and_return(true)
|
||||||
|
end
|
||||||
|
|
||||||
subject! { get :show, params: params, format: :turbo_stream }
|
subject! { get :show, params: params, format: :turbo_stream }
|
||||||
|
|
||||||
it 'clears the etablissement and SIRET on the model' do
|
it 'clears the etablissement and SIRET on the model' do
|
||||||
|
@ -83,6 +87,28 @@ describe Champs::SiretController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when the API is unavailable due to an api maintenance or pb' do
|
||||||
|
let(:siret) { '82161143100015' }
|
||||||
|
let(:api_etablissement_status) { 502 }
|
||||||
|
|
||||||
|
before do
|
||||||
|
expect(APIEntrepriseService).to receive(:api_up?).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
subject! { get :show, params: params, format: :turbo_stream }
|
||||||
|
|
||||||
|
it 'saves the etablissement in degraded mode and SIRET on the model' do
|
||||||
|
champ.reload
|
||||||
|
expect(champ.value).to eq(siret)
|
||||||
|
expect(champ.etablissement.siret).to eq(siret)
|
||||||
|
expect(champ.etablissement.as_degraded_mode?).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'displays a “API entreprise down” error message' do
|
||||||
|
expect(response.body).to include('Notre fournisseur de données semble en panne, nous récupérerons les données plus tard.')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when the SIRET is valid but unknown' do
|
context 'when the SIRET is valid but unknown' do
|
||||||
let(:siret) { '00000000000000' }
|
let(:siret) { '00000000000000' }
|
||||||
let(:api_etablissement_status) { 404 }
|
let(:api_etablissement_status) { 404 }
|
||||||
|
|
Loading…
Reference in a new issue