chore(api_entreprise): intercept token expiration for a more contextual frontend message
Auparavant le service échouait silencieusement et ne retournait rien, ce qui dans les implémentations du front aboutissait au message que l'établissement/l'entreprise n'a pas été trouvé. Un type d'erreur spécifique sur l'expiration du token permet d'afficher le message lié à un problème temporaire de récupération d'infos.
This commit is contained in:
parent
5e1fc855e3
commit
d3232a28cd
7 changed files with 10 additions and 5 deletions
|
@ -17,7 +17,7 @@ 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
|
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable, APIEntrepriseToken::TokenError
|
||||||
# i18n-tasks-use t('errors.messages.siret_network_error')
|
# i18n-tasks-use t('errors.messages.siret_network_error')
|
||||||
return siret_error(:network_error)
|
return siret_error(:network_error)
|
||||||
end
|
end
|
||||||
|
|
|
@ -114,7 +114,7 @@ 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
|
rescue APIEntreprise::API::Error::RequestFailed, APIEntreprise::API::Error::BadGateway, APIEntreprise::API::Error::TimedOut, APIEntreprise::API::Error::ServiceUnavailable, APIEntrepriseToken::TokenError
|
||||||
return render_siret_error(t('errors.messages.siret_network_error'))
|
return render_siret_error(t('errors.messages.siret_network_error'))
|
||||||
end
|
end
|
||||||
if etablissement.nil?
|
if etablissement.nil?
|
||||||
|
|
|
@ -82,7 +82,10 @@ class APIEntreprise::API
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.call_with_siret(resource_name, siret_or_siren, procedure_id, user_id = nil)
|
def self.call_with_siret(resource_name, siret_or_siren, procedure_id, user_id = nil)
|
||||||
return if APIEntrepriseToken.new(token_for_procedure(procedure_id)).expired?
|
if APIEntrepriseToken.new(token_for_procedure(procedure_id)).expired?
|
||||||
|
raise APIEntrepriseToken::TokenError, I18n.t("api_entreprise.errors.token_expired")
|
||||||
|
end
|
||||||
|
|
||||||
url = url(resource_name, siret_or_siren)
|
url = url(resource_name, siret_or_siren)
|
||||||
params = params(siret_or_siren, procedure_id, user_id)
|
params = params(siret_or_siren, procedure_id, user_id)
|
||||||
|
|
||||||
|
|
|
@ -2,3 +2,4 @@ en:
|
||||||
api_entreprise:
|
api_entreprise:
|
||||||
errors:
|
errors:
|
||||||
missing_token: "the API Entreprise token cannot be blank"
|
missing_token: "the API Entreprise token cannot be blank"
|
||||||
|
token_expired: "API Entreprise token has expired."
|
||||||
|
|
|
@ -2,3 +2,4 @@ fr:
|
||||||
api_entreprise:
|
api_entreprise:
|
||||||
errors:
|
errors:
|
||||||
missing_token: "le jeton API Entreprise ne peut être vide"
|
missing_token: "le jeton API Entreprise ne peut être vide"
|
||||||
|
token_expired: "Le jeton API Entreprise a expiré."
|
||||||
|
|
|
@ -271,7 +271,7 @@ describe Users::DossiersController, type: :controller do
|
||||||
let(:api_etablissement_status) { 200 }
|
let(:api_etablissement_status) { 200 }
|
||||||
let(:token_expired) { true }
|
let(:token_expired) { true }
|
||||||
|
|
||||||
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_unknown')
|
it_behaves_like 'the request fails with an error', I18n.t('errors.messages.siret_network_error')
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when all API informations available' do
|
context 'when all API informations available' do
|
||||||
|
|
|
@ -267,7 +267,7 @@ describe APIEntreprise::API do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'makes no call to api-entreprise' do
|
it 'makes no call to api-entreprise' do
|
||||||
subject
|
expect { subject }.to raise_error(APIEntrepriseToken::TokenError)
|
||||||
expect(WebMock).not_to have_requested(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/entreprises\/#{siren}/)
|
expect(WebMock).not_to have_requested(:get, /https:\/\/entreprise.api.gouv.fr\/v2\/entreprises\/#{siren}/)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue