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
|
||||
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')
|
||||
return siret_error(:network_error)
|
||||
end
|
||||
|
|
|
@ -114,7 +114,7 @@ module Users
|
|||
sanitized_siret = siret_model.siret
|
||||
begin
|
||||
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'))
|
||||
end
|
||||
if etablissement.nil?
|
||||
|
|
|
@ -82,7 +82,10 @@ class APIEntreprise::API
|
|||
end
|
||||
|
||||
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)
|
||||
params = params(siret_or_siren, procedure_id, user_id)
|
||||
|
||||
|
|
|
@ -2,3 +2,4 @@ en:
|
|||
api_entreprise:
|
||||
errors:
|
||||
missing_token: "the API Entreprise token cannot be blank"
|
||||
token_expired: "API Entreprise token has expired."
|
||||
|
|
|
@ -2,3 +2,4 @@ fr:
|
|||
api_entreprise:
|
||||
errors:
|
||||
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(: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
|
||||
|
||||
context 'when all API informations available' do
|
||||
|
|
|
@ -267,7 +267,7 @@ describe APIEntreprise::API do
|
|||
end
|
||||
|
||||
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}/)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue