From e2ec5118f4bb7a0e5d41e01f85224c714ef1f49d Mon Sep 17 00:00:00 2001 From: mfo Date: Mon, 16 Sep 2024 11:29:12 +0200 Subject: [PATCH] fix(champs.rnf): some foundations was removed from the registry. lucky us [or good archi ? :D], we kept api data --- .../populate_rnf_json_value_task.rb | 7 ++- .../populate_rnf_json_value_task_spec.rb | 60 +++++++++++++------ 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/app/tasks/maintenance/populate_rnf_json_value_task.rb b/app/tasks/maintenance/populate_rnf_json_value_task.rb index daf9a2cd4..baaca634d 100644 --- a/app/tasks/maintenance/populate_rnf_json_value_task.rb +++ b/app/tasks/maintenance/populate_rnf_json_value_task.rb @@ -9,7 +9,7 @@ module Maintenance include Dry::Monads[:result] def collection - Champs::RNFChamp.where(value_json: nil) + Champs::RNFChamp.where("external_id != null and data != null") # had been found # Collection to be iterated over # Must be Active Record Relation or Array end @@ -23,8 +23,9 @@ module Maintenance rescue ActiveRecord::RecordInvalid # some champ might have dossier nil end - else - # not found + else # fondation was removed, but we kept API data in data:, use it to restore stuff + + champ.update_with_external_data!(data: champ.data.with_indifferent_access) end end diff --git a/spec/tasks/maintenance/populate_rnf_json_value_task_spec.rb b/spec/tasks/maintenance/populate_rnf_json_value_task_spec.rb index d3e739ab3..de66e0033 100644 --- a/spec/tasks/maintenance/populate_rnf_json_value_task_spec.rb +++ b/spec/tasks/maintenance/populate_rnf_json_value_task_spec.rb @@ -46,25 +46,51 @@ module Maintenance subject(:process) { described_class.process(element) } - before do - allow_any_instance_of(Champs::RNFChamp).to receive(:fetch_external_data).and_return(Success(data)) + context 'when api respond ok' do + before do + allow_any_instance_of(Champs::RNFChamp).to receive(:fetch_external_data).and_return(Success(data)) + end + + it 'updates value_json' do + expect { subject }.to change { element.reload.value_json } + .from(nil) + .to({ + "street_number" => "16", + "street_name" => "Rue du Général de Boissieu", + "street_address" => "16 Rue du Général de Boissieu", + "postal_code" => "75015", + "city_name" => "Paris 15e Arrondissement", + "city_code" => "75115", + "departement_code" => "75", + "departement_name" => "Paris", + "region_code" => "11", + "region_name" => "Île-de-France" + }) + end end - it 'updates value_json' do - expect { subject }.to change { element.reload.value_json } - .from(nil) - .to({ - "street_number" => "16", - "street_name" => "Rue du Général de Boissieu", - "street_address" => "16 Rue du Général de Boissieu", - "postal_code" => "75015", - "city_name" => "Paris 15e Arrondissement", - "city_code" => "75115", - "departement_code" => "75", - "departement_name" => "Paris", - "region_code" => "11", - "region_name" => "Île-de-France" - }) + context 'when api respond KO' do + before do + element.update(data:) + allow_any_instance_of(Champs::RNFChamp).to receive(:fetch_external_data).and_return(Failure(code: 404, reason: :removed)) + end + + it 'updates value_json' do + expect { subject }.to change { element.reload.value_json } + .from(nil) + .to({ + "street_number" => "16", + "street_name" => "Rue du Général de Boissieu", + "street_address" => "16 Rue du Général de Boissieu", + "postal_code" => "75015", + "city_name" => "Paris 15e Arrondissement", + "city_code" => "75115", + "departement_code" => "75", + "departement_name" => "Paris", + "region_code" => "11", + "region_name" => "Île-de-France" + }) + end end end end