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
|
find_etablisement
|
||||||
|
|
||||||
if @siret.empty?
|
if @siret.empty?
|
||||||
@champ&.update!(value: '')
|
return clear_siret_and_etablissement
|
||||||
@etablissement&.destroy
|
end
|
||||||
elsif @siret.present? && @siret.length == 14
|
|
||||||
etablissement = find_etablisement_with_siret
|
|
||||||
if etablissement.present?
|
|
||||||
@etablissement = etablissement
|
|
||||||
|
|
||||||
if !@champ.nil?
|
if @siret.present? && @siret.length != 14
|
||||||
@champ.update!(value: etablissement.siret, etablissement: etablissement)
|
return siret_error(:invalid)
|
||||||
end
|
end
|
||||||
else
|
|
||||||
@champ&.update!(value: '')
|
begin
|
||||||
@etablissement&.destroy
|
etablissement = find_etablissement_with_siret
|
||||||
@siret = :not_found
|
rescue RestClient::RequestFailed
|
||||||
end
|
return siret_error(:network_error)
|
||||||
else
|
end
|
||||||
@champ&.update!(value: '')
|
if etablissement.blank?
|
||||||
@etablissement&.destroy
|
return siret_error(:not_found)
|
||||||
@siret = :invalid
|
end
|
||||||
|
|
||||||
|
@etablissement = etablissement
|
||||||
|
if !@champ.nil?
|
||||||
|
@champ.update!(value: etablissement.siret, etablissement: etablissement)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -49,10 +49,20 @@ class Champs::SiretController < ApplicationController
|
||||||
@procedure_id = @champ&.dossier&.procedure_id || 'aperçu'
|
@procedure_id = @champ&.dossier&.procedure_id || 'aperçu'
|
||||||
end
|
end
|
||||||
|
|
||||||
def find_etablisement_with_siret
|
def find_etablissement_with_siret
|
||||||
etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(@siret, @procedure_id)
|
etablissement_attributes = ApiEntrepriseService.get_etablissement_params_for_siret(@siret, @procedure_id)
|
||||||
if etablissement_attributes.present?
|
if etablissement_attributes.present?
|
||||||
Etablissement.new(etablissement_attributes)
|
Etablissement.new(etablissement_attributes)
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
|
@ -91,7 +91,11 @@ module Users
|
||||||
end
|
end
|
||||||
|
|
||||||
sanitized_siret = siret_model.siret
|
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?
|
if etablissement_attributes.blank?
|
||||||
return render_siret_error(t('errors.messages.siret_unknown'))
|
return render_siret_error(t('errors.messages.siret_unknown'))
|
||||||
end
|
end
|
||||||
|
|
|
@ -2,7 +2,11 @@ class EtablissementUpdateJob < ApplicationJob
|
||||||
queue_as :default
|
queue_as :default
|
||||||
|
|
||||||
def perform(dossier, siret)
|
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 etablissement_attributes.present?
|
||||||
if dossier.etablissement.present?
|
if dossier.etablissement.present?
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
Nous n’avons pas trouvé d’établissement correspondant à ce numéro de SIRET.
|
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')
|
= 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
|
- else
|
||||||
- if siret.present? && siret == etablissement&.siret
|
- if siret.present? && siret == etablissement&.siret
|
||||||
= render partial: 'shared/dossiers/editable_champs/etablissement_titre', locals: { etablissement: etablissement }
|
= 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."
|
dossier_map_not_activated: "Le dossier n'a pas accès à la cartographie."
|
||||||
invalid_siret: "Le siret est incorrect"
|
invalid_siret: "Le siret est incorrect"
|
||||||
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.'
|
||||||
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."
|
||||||
|
|
|
@ -55,6 +55,26 @@ describe Champs::SiretController, type: :controller do
|
||||||
end
|
end
|
||||||
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
|
context 'when the SIRET is valid but unknown' do
|
||||||
let(:siret) { '00000000000000' }
|
let(:siret) { '00000000000000' }
|
||||||
|
|
||||||
|
|
|
@ -278,6 +278,13 @@ describe Users::DossiersController, type: :controller do
|
||||||
context 'with a valid SIRET' do
|
context 'with a valid SIRET' do
|
||||||
let(:params_siret) { '440 117 620 01530' }
|
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
|
context 'when API-Entreprise doesn’t know this SIRET' do
|
||||||
let(:api_etablissement_status) { 404 }
|
let(:api_etablissement_status) { 404 }
|
||||||
let(:api_body_status) { '' }
|
let(:api_body_status) { '' }
|
||||||
|
|
Loading…
Add table
Reference in a new issue