diff --git a/app/controllers/new_administrateur/sources_particulier_controller.rb b/app/controllers/new_administrateur/sources_particulier_controller.rb index 25014ace5..04c1bc1d7 100644 --- a/app/controllers/new_administrateur/sources_particulier_controller.rb +++ b/app/controllers/new_administrateur/sources_particulier_controller.rb @@ -3,11 +3,30 @@ module NewAdministrateur before_action :retrieve_procedure def show - sources_service = APIParticulier::Services::SourcesService.new(@procedure) @available_sources = sources_service.available_sources end def update + if @procedure.update(api_particulier_sources: sources_params) + redirect_to admin_procedure_api_particulier_sources_path(@procedure), notice: t('.sources_ok') + else + flash.now.alert = @procedure.errors.full_messages + render :show + end + end + + private + + def sources_params + requested_sources = params + .with_defaults(api_particulier_sources: {}) + .to_unsafe_hash[:api_particulier_sources] + + sources_service.sanitize(requested_sources) + end + + def sources_service + @sources_service ||= APIParticulier::Services::SourcesService.new(@procedure) end end end diff --git a/config/locales/fr.yml b/config/locales/fr.yml index b586a116c..cf9eef404 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -401,6 +401,8 @@ fr: title: "Définir les sources de données" data_sources: "Sources de données" explication_html: "

API Particulier facilite l’accès des administrations aux données familiales (CAF) pour simplifier les démarches administratives mises en œuvre par les collectivités et les administrations.
Cela permet aux administrations d’accéder à des informations certifiées à la source et ainsi :

Important : les disposition de l'article L144-8 n’autorisent que l’échange des informations strictement nécessaires pour traiter une démarche.

En conséquence, ne sélectionnez ici que les données auxquelles vous aurez accès d’un point de vue légal.

" + update: + sources_ok: 'Mise à jour effectuée' procedures: show: ready: "Validé" diff --git a/spec/controllers/new_administrateur/sources_particulier_controller_spec.rb b/spec/controllers/new_administrateur/sources_particulier_controller_spec.rb index 4e21ceddd..c2a808c8c 100644 --- a/spec/controllers/new_administrateur/sources_particulier_controller_spec.rb +++ b/spec/controllers/new_administrateur/sources_particulier_controller_spec.rb @@ -18,4 +18,43 @@ describe NewAdministrateur::SourcesParticulierController, type: :controller do expect(subject.body).not_to have_selector("input#api_particulier_sources_cnaf_enfants_[value=date_de_naissance][checked=checked]") end end + + describe "#update" do + let(:procedure) { create(:procedure, administrateur: admin, api_particulier_scopes: ['cnaf_enfants'], api_particulier_sources: {}) } + let(:params) { { procedure_id: procedure.id }.merge(requested_sources) } + + before do + patch :update, params: params + procedure.reload + end + + context 'when no source is requested' do + let(:requested_sources) { {} } + + it { expect(procedure.api_particulier_sources).to be_empty } + end + + context 'when a forbidden source is requested' do + let(:requested_sources) do + { + api_particulier_sources: { cnaf: { enfants: ['forbidden'] } } + } + end + + it { expect(procedure.api_particulier_sources).to be_empty } + end + + context 'when an authorized source is requested' do + let(:requested_sources) do + { + api_particulier_sources: { cnaf: { enfants: ['noms_prenoms'] } } + } + end + + it 'saves the source' do + expect(procedure.api_particulier_sources).to eq("cnaf" => { "enfants" => ["noms_prenoms"] }) + expect(flash.notice).to eq(I18n.t(".new_administrateur.sources_particulier.update.sources_ok")) + end + end + end end