api_entreprise: display a specific error message on network errors
This commit is contained in:
parent
ad4a89f0f6
commit
e06e32238c
7 changed files with 71 additions and 22 deletions
|
@ -7,25 +7,25 @@ class Champs::SiretController < ApplicationController
|
|||
find_etablisement
|
||||
|
||||
if @siret.empty?
|
||||
@champ&.update!(value: '')
|
||||
@etablissement&.destroy
|
||||
elsif @siret.present? && @siret.length == 14
|
||||
etablissement = find_etablisement_with_siret
|
||||
if etablissement.present?
|
||||
@etablissement = etablissement
|
||||
return clear_siret_and_etablissement
|
||||
end
|
||||
|
||||
if !@champ.nil?
|
||||
@champ.update!(value: etablissement.siret, etablissement: etablissement)
|
||||
end
|
||||
else
|
||||
@champ&.update!(value: '')
|
||||
@etablissement&.destroy
|
||||
@siret = :not_found
|
||||
end
|
||||
else
|
||||
@champ&.update!(value: '')
|
||||
@etablissement&.destroy
|
||||
@siret = :invalid
|
||||
if @siret.present? && @siret.length != 14
|
||||
return siret_error(:invalid)
|
||||
end
|
||||
|
||||
begin
|
||||
etablissement = find_etablissement_with_siret
|
||||
rescue RestClient::RequestFailed
|
||||
return siret_error(:network_error)
|
||||
end
|
||||
if etablissement.blank?
|
||||
return siret_error(:not_found)
|
||||
end
|
||||
|
||||
@etablissement = etablissement
|
||||
if !@champ.nil?
|
||||
@champ.update!(value: etablissement.siret, etablissement: etablissement)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -49,10 +49,20 @@ class Champs::SiretController < ApplicationController
|
|||
@procedure_id = @champ&.dossier&.procedure_id || 'aperçu'
|
||||
end
|
||||
|
||||
def find_etablisement_with_siret
|
||||
def find_etablissement_with_siret
|
||||
etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(@siret, @procedure_id)
|
||||
if etablissement_attributes.present?
|
||||
Etablissement.new(etablissement_attributes)
|
||||
end
|
||||
end
|
||||
|
||||
def clear_siret_and_etablissement
|
||||
@champ&.update!(value: '')
|
||||
@etablissement&.destroy
|
||||
end
|
||||
|
||||
def siret_error(error)
|
||||
clear_siret_and_etablissement
|
||||
@siret = error
|
||||
end
|
||||
end
|
||||
|
|
|
@ -91,7 +91,11 @@ module Users
|
|||
end
|
||||
|
||||
sanitized_siret = siret_model.siret
|
||||
etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(sanitized_siret, @dossier.procedure.id)
|
||||
begin
|
||||
etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(sanitized_siret, @dossier.procedure.id)
|
||||
rescue RestClient::RequestFailed
|
||||
return render_siret_error(t('errors.messages.siret_network_error'))
|
||||
end
|
||||
if etablissement_attributes.blank?
|
||||
return render_siret_error(t('errors.messages.siret_unknown'))
|
||||
end
|
||||
|
|
|
@ -2,7 +2,11 @@ class EtablissementUpdateJob < ApplicationJob
|
|||
queue_as :default
|
||||
|
||||
def perform(dossier, siret)
|
||||
etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(siret, dossier.procedure_id)
|
||||
begin
|
||||
etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(siret, dossier.procedure_id)
|
||||
rescue
|
||||
return
|
||||
end
|
||||
|
||||
if etablissement_attributes.present?
|
||||
if dossier.etablissement.present?
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
Nous n’avons pas trouvé d’établissement correspondant à ce numéro de SIRET.
|
||||
= link_to('Plus d’informations', "https://faq.demarches-simplifiees.fr/article/4-erreur-siret", target: '_blank', rel: 'noopener')
|
||||
|
||||
- when :network_error
|
||||
= t('errors.messages.siret_network_error')
|
||||
|
||||
- else
|
||||
- if siret.present? && siret == etablissement&.siret
|
||||
= render partial: 'shared/dossiers/editable_champs/etablissement_titre', locals: { etablissement: etablissement }
|
||||
|
|
|
@ -182,7 +182,8 @@ fr:
|
|||
dossier_map_not_activated: "Le dossier n'a pas accès à la cartographie."
|
||||
invalid_siret: "Le siret est incorrect"
|
||||
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.'
|
||||
etablissement_fail: 'Désolé, nous n’avons pas réussi à enregistrer l’établissement correspondant à ce numéro SIRET'
|
||||
france_connect:
|
||||
connexion: "Erreur lors de la connexion à France Connect."
|
||||
|
|
|
@ -55,6 +55,26 @@ describe Champs::SiretController, type: :controller do
|
|||
end
|
||||
end
|
||||
|
||||
context 'when the API is unavailable' do
|
||||
let(:siret) { '82161143100015' }
|
||||
|
||||
before do
|
||||
allow(controller).to receive(:find_etablissement_with_siret).and_raise(RestClient::RequestFailed)
|
||||
end
|
||||
|
||||
subject! { get :show, params: params, format: 'js' }
|
||||
|
||||
it 'clears the etablissement and SIRET on the model' do
|
||||
champ.reload
|
||||
expect(champ.etablissement).to be_nil
|
||||
expect(champ.value).to be_empty
|
||||
end
|
||||
|
||||
it 'displays a “API is unavailable” error message' do
|
||||
expect(response.body).to include(I18n.t('errors.messages.siret_network_error'))
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the SIRET is valid but unknown' do
|
||||
let(:siret) { '00000000000000' }
|
||||
|
||||
|
|
|
@ -278,6 +278,13 @@ describe Users::DossiersController, type: :controller do
|
|||
context 'with a valid SIRET' do
|
||||
let(:params_siret) { '440 117 620 01530' }
|
||||
|
||||
context 'When API-Entreprise is down' do
|
||||
let(:api_etablissement_status) { 502 }
|
||||
let(:api_body_status) { File.read('spec/fixtures/files/api_entreprise/exercices_unavailable.json') }
|
||||
|
||||
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
|
||||
end
|
||||
|
||||
context 'when API-Entreprise doesn’t know this SIRET' do
|
||||
let(:api_etablissement_status) { 404 }
|
||||
let(:api_body_status) { '' }
|
||||
|
|
Loading…
Reference in a new issue