From 5567570d74f706c777584d01c23772c4c3576c39 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 10 Apr 2024 10:47:21 +0200 Subject: [PATCH 1/2] 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 From 344f0d2c8047f7958bc8ba96d8bcf86a487a39c1 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Wed, 10 Apr 2024 10:51:37 +0200 Subject: [PATCH 2/2] fix: graphql new normalization --- app/graphql/types/address_type.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/graphql/types/address_type.rb b/app/graphql/types/address_type.rb index 18f26f878..c72abc2ce 100644 --- a/app/graphql/types/address_type.rb +++ b/app/graphql/types/address_type.rb @@ -27,11 +27,11 @@ module Types field :geometry, Types::GeoJSON, "coordonnées géographique", null: true def city_name - if object['department_code'].present? && object['city_code'].present? - APIGeoService.commune_name(object.fetch('department_code'), object.fetch('city_code')) - else + APIGeoService.safely_normalize_city_name( + object['department_code'], + object['city_code'], object['city_name'] - end + ) end def department_name