From 5567570d74f706c777584d01c23772c4c3576c39 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 10 Apr 2024 10:47:21 +0200 Subject: [PATCH] more robust normalization --- app/services/api_geo_service.rb | 11 +++++++++- spec/services/api_geo_service_spec.rb | 30 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/app/services/api_geo_service.rb b/app/services/api_geo_service.rb index a248ad924..d8c0f1c50 100644 --- a/app/services/api_geo_service.rb +++ b/app/services/api_geo_service.rb @@ -101,7 +101,7 @@ class APIGeoService department_code:, region_name: region_name(region_code), region_code:, - city_name: commune_name(department_code, city_code) || properties['city'], # fallback to city name if commune not found + city_name: safely_normalize_city_name(department_code, city_code, properties['city']), city_code: } else @@ -122,6 +122,15 @@ class APIGeoService }.merge(territory) end + def safely_normalize_city_name(department_code, city_code, fallback) + return fallback if department_code.nil? || city_code.nil? + + commune_name(department_code, city_code) || fallback + + rescue StandardError + fallback + end + private def communes_by_postal_code_map diff --git a/spec/services/api_geo_service_spec.rb b/spec/services/api_geo_service_spec.rb index 3a06f86cc..95faa29ba 100644 --- a/spec/services/api_geo_service_spec.rb +++ b/spec/services/api_geo_service_spec.rb @@ -107,4 +107,34 @@ describe APIGeoService do it { expect(subject[:city_name]).to eq('Paris') } end end + + describe 'safely_normalize_city_name' do + let(:department_code) { '75' } + let(:city_code) { '75056' } + let(:fallback) { 'Paris' } + + subject { APIGeoService.safely_normalize_city_name(department_code, city_code, fallback) } + + context 'nominal' do + it { is_expected.to eq('Paris') } + end + + context 'without department' do + let(:department_code) { nil } + + it { is_expected.to eq('Paris') } + end + + context 'without city_code' do + let(:city_code) { nil } + + it { is_expected.to eq('Paris') } + end + + context 'with a wrong department' do + let(:department_code) { 'wrong' } + + it { is_expected.to eq('Paris') } + end + end end