diff --git a/app/controllers/administrateurs/chorus_controller.rb b/app/controllers/administrateurs/chorus_controller.rb index 1acd31a4d..0d5a17012 100644 --- a/app/controllers/administrateurs/chorus_controller.rb +++ b/app/controllers/administrateurs/chorus_controller.rb @@ -11,14 +11,22 @@ module Administrateurs if @configuration.valid? @procedure.update!(chorus: @configuration.attributes) - flash.notice = "La configuration Chorus a été mise à jour et prend immédiatement effet pour les nouveaux dossiers." - redirect_to admin_procedure_path(@procedure) + if @configuration.complete? + flash.notice = "La configuration Chorus a été mise à jour." + redirect_to add_champ_engagement_juridique_admin_procedure_chorus_path(@procedure) + else + flash.notice = "La configuration Chorus a été mise à jour. Veuillez renseigner le reste des informations pour faciliter le rapprochement des données." + redirect_to edit_admin_procedure_chorus_path(@procedure) + end else flash.now.alert = "Des erreurs empêchent la validation du connecteur chorus. Corrigez les erreurs" render :edit end end + def add_champ_engagement_juridique + end + private def search_params diff --git a/app/views/administrateurs/chorus/add_champ_engagement_juridique.html.haml b/app/views/administrateurs/chorus/add_champ_engagement_juridique.html.haml new file mode 100644 index 000000000..f17989e2d --- /dev/null +++ b/app/views/administrateurs/chorus/add_champ_engagement_juridique.html.haml @@ -0,0 +1,16 @@ += render partial: 'administrateurs/breadcrumbs', + locals: { steps: [['Démarches', admin_procedures_path], + [@procedure.libelle.truncate_words(10), admin_procedure_path(@procedure)], + ['Connecteur Chorus']] } + + +.fr-container + %h1.fr-h1 + Cadre budgétaire + + = render Dsfr::CalloutComponent.new(title: "Cas d'usage") do |c| + - c.with_body do + %p Ajouter un champs Engagement Juridique aux annotations privées afin de renseigner l'EJ directement dans DS + %p L'EJ sera automatiquement ajouté aux exports des dossiers + + = link_to "Ajouter une annotation privée EJ", annotations_admin_procedure_path(@procedure), class: 'btn fr-btn' diff --git a/config/routes.rb b/config/routes.rb index bce765501..8301a1b07 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -615,7 +615,9 @@ Rails.application.routes.draw do resource :attestation_template, only: [:show, :edit, :update, :create] do get 'preview', on: :member end - resource :chorus, only: [:edit, :update] + resource :chorus, only: [:edit, :update] do + get 'add_champ_engagement_juridique' + end resource :dossier_submitted_message, only: [:edit, :update, :create] # ADDED TO ACCESS IT FROM THE IFRAME get 'attestation_template/preview' => 'attestation_templates#preview' diff --git a/spec/controllers/administrateurs/chorus_controller_spec.rb b/spec/controllers/administrateurs/chorus_controller_spec.rb index c239a8d26..66a12d74f 100644 --- a/spec/controllers/administrateurs/chorus_controller_spec.rb +++ b/spec/controllers/administrateurs/chorus_controller_spec.rb @@ -1,20 +1,21 @@ describe Administrateurs::ChorusController, type: :controller do - describe 'edit' do - let(:user) { create(:user) } - let(:admin) { create(:administrateur, user: create(:user)) } - let(:procedure) { create(:procedure, administrateurs: [admin]) } + let(:user) { create(:user) } + let(:admin) { create(:administrateur, user: create(:user)) } + let(:procedure) { create(:procedure, administrateurs: [admin]) } + + describe '#edit' do subject { get :edit, params: { procedure_id: procedure.id } } - context 'not signed in' do + context 'when user is not signed in' do it { is_expected.to redirect_to(new_user_session_path) } end - context 'signed in but not admin of procedure' do + context 'when user is signed in but not admin of procedure' do before { sign_in(user) } it { is_expected.to redirect_to(new_user_session_path) } end - context 'signed as admin' do + context 'when user is signed as admin' do before { sign_in(admin.user) } it { is_expected.to have_http_status(200) } @@ -26,10 +27,7 @@ describe Administrateurs::ChorusController, type: :controller do end end - describe 'update' do - let(:user) { create(:user) } - let(:admin) { create(:administrateur, user: create(:user)) } - let(:procedure) { create(:procedure, administrateurs: [admin]) } + describe '#update' do let(:chorus_configuration_params) { {} } subject do put :update, @@ -39,19 +37,40 @@ describe Administrateurs::ChorusController, type: :controller do } end - context 'not signed in' do + context 'when user is not signed in' do it { is_expected.to redirect_to(new_user_session_path) } end - context 'signed in but not admin of procedure' do + context 'when user is signed in but not admin of procedure' do before { sign_in(user) } it { is_expected.to redirect_to(new_user_session_path) } end - context 'signed as admin' do + context 'when user is signed as admin' do before { sign_in(admin.user) } + let(:domaine_fonctionnel) { nil } + let(:referentiel_de_programmation) { nil } - context "valid payload" do + context "partial valid payload" do + let(:centre_de_coup) { '{"code":"D00C8DX004","label":"Aumôniers+protestant","ville":null,"code_postal":null,"description":"Aumoniers+protestants"}' } + let(:chorus_configuration_params) do + { + centre_de_coup:, domaine_fonctionnel:, referentiel_de_programmation: + } + end + it 'updates params and redirect back to complete all infos' do + expect(subject).to redirect_to(edit_admin_procedure_chorus_path(procedure)) + expect(flash[:notice]).to eq("La configuration Chorus a été mise à jour. Veuillez renseigner le reste des informations pour faciliter le rapprochement des données.") + + procedure.reload + + expect(procedure.chorus_configuration.centre_de_coup).to eq(JSON.parse(centre_de_coup)) + expect(procedure.chorus_configuration.domaine_fonctionnel).to eq(nil) + expect(procedure.chorus_configuration.referentiel_de_programmation).to eq(nil) + end + end + + context "full valid payload" do let(:centre_de_coup) { '{"code":"D00C8DX004","label":"Aumôniers+protestant","ville":null,"code_postal":null,"description":"Aumoniers+protestants"}' } let(:domaine_fonctionnel) { '{"code":"0105-05-01","label":"Formation+des+élites+et+cadres+de+sécurité+et+de+défense","description":null,"code_programme":"105"}' } let(:referentiel_de_programmation) { '{"code":"010101010101","label":"DOTATIONS+CARPA+AJ+ET+AUTRES+INTERVENTIONS","description":null,"code_programme":"101"}' } @@ -61,11 +80,12 @@ describe Administrateurs::ChorusController, type: :controller do } end - it { is_expected.to redirect_to(admin_procedure_path(procedure)) } - it 'updates params' do - subject - expect(flash[:notice]).to eq("La configuration Chorus a été mise à jour et prend immédiatement effet pour les nouveaux dossiers.") + it 'updates params and redirects to add champs EngagementJuridique' do + expect(subject).to redirect_to(add_champ_engagement_juridique_admin_procedure_chorus_path(procedure)) + expect(flash[:notice]).to eq("La configuration Chorus a été mise à jour.") + procedure.reload + expect(procedure.chorus_configuration.centre_de_coup).to eq(JSON.parse(centre_de_coup)) expect(procedure.chorus_configuration.domaine_fonctionnel).to eq(JSON.parse(domaine_fonctionnel)) expect(procedure.chorus_configuration.referentiel_de_programmation).to eq(JSON.parse(referentiel_de_programmation)) @@ -73,4 +93,27 @@ describe Administrateurs::ChorusController, type: :controller do end end end + + describe '#add_champ_engagement_juridique' do + render_views + subject { get :add_champ_engagement_juridique, params: { procedure_id: procedure.id } } + + context 'when user is not signed in' do + it { is_expected.to redirect_to(new_user_session_path) } + end + + context 'when user is signed in but not admin of procedure' do + before { sign_in(user) } + it { is_expected.to redirect_to(new_user_session_path) } + end + + context 'when user is signed as admin' do + before { sign_in(admin.user) } + + it 'have links to add annotation' do + expect(subject).to have_http_status(:success) + expect(response.body).to have_link("Ajouter une annotation privée EJ", href: annotations_admin_procedure_path(procedure)) + end + end + end end