Skip to content

Commit f6471f7

Browse files
authored
Merge pull request #13207 from demarche-numerique/degraded-mode-for-429
ETQ usager, permettre le mode dégradé en cas de rate limit 429 API Entreprise
2 parents 6c53691 + fca3c6a commit f6471f7

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

app/services/api_entreprise_service.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ def create_etablissement_as_degraded_mode(dossier_or_champ, siret, user_id = nil
4747
# Returns Failure(type:, code:, retryable:, raw_response:) on non-recoverable errors
4848
def create_etablissement_with_fallback(dossier_or_champ, siret, user_id = nil)
4949
case create_etablissement(dossier_or_champ, siret, user_id)
50+
in Failure(type: :rate_limited, retryable: true, **)
51+
Success(create_etablissement_as_degraded_mode(dossier_or_champ, siret, user_id))
5052
in Failure(retryable: true, **) => failure if degraded_mode?(failure.failure, target: :insee)
5153
Success(create_etablissement_as_degraded_mode(dossier_or_champ, siret, user_id))
5254
in result

spec/services/api_entreprise_service_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,20 @@
160160
end
161161
end
162162

163+
context 'when API returns 429 (rate limited)' do
164+
before do
165+
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v4\/insee\/sirene\/etablissements\/#{siret}/)
166+
.to_return(body: '{"errors":[]}', status: 429)
167+
end
168+
169+
it 'falls back to degraded mode without checking ping' do
170+
expect(APIEntrepriseService).not_to receive(:api_insee_up?)
171+
expect(subject).to be_success
172+
expect(subject.value!.siret).to eq(siret)
173+
expect(subject.value!).to be_as_degraded_mode
174+
end
175+
end
176+
163177
context 'when API returns 451' do
164178
before do
165179
stub_request(:get, /https:\/\/entreprise.api.gouv.fr\/v4\/insee\/sirene\/etablissements\/#{siret}/)

0 commit comments

Comments
 (0)