From b419c482623d4aeed96fb39872ae2d6eede45646 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Fri, 14 Oct 2022 17:10:42 +0200 Subject: [PATCH] toggle routing when adding or deleting groupe_instructeurs --- .../groupe_instructeurs_controller.rb | 22 ++++++++++------- app/models/groupe_instructeur.rb | 8 +++++++ .../groupe_instructeurs/_routing.html.haml | 5 ---- .../groupe_instructeurs/index.html.haml | 5 ++-- config/routes.rb | 1 - .../groupe_instructeurs_controller_spec.rb | 3 ++- .../procedure_groupe_instructeur_spec.rb | 6 ++++- spec/system/routing/full_scenario_spec.rb | 5 ++-- spec/system/users/brouillon_spec.rb | 24 ------------------- 9 files changed, 32 insertions(+), 47 deletions(-) diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 4cb339df8..3b0d2c1f5 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -13,13 +13,12 @@ module Administrateurs def index @procedure = procedure + @groupes_instructeurs = paginated_groupe_instructeurs if procedure.routee? - @groupes_instructeurs = paginated_groupe_instructeurs @instructeurs = [] @available_instructeur_emails = [] else - @groupes_instructeurs = [] @instructeurs = paginated_instructeurs @available_instructeur_emails = available_instructeur_emails end @@ -42,6 +41,7 @@ module Administrateurs notice: "Le groupe d’instructeurs « #{@groupe_instructeur.label} » a été créé." else @procedure = procedure + @instructeurs = paginated_instructeurs @groupes_instructeurs = paginated_groupe_instructeurs flash[:alert] = "le nom « #{@groupe_instructeur.label} » est déjà pris par un autre groupe." @@ -74,7 +74,11 @@ module Administrateurs flash[:alert] = "Suppression impossible : il doit y avoir au moins un groupe instructeur sur chaque procédure" else @groupe_instructeur.destroy! - flash[:notice] = "le groupe « #{@groupe_instructeur.label} » a été supprimé." + if procedure.groupe_instructeurs.actif.count == 1 + procedure.update!(routing_enabled: false) + end + routing_notice = "et le routage a été désactivé" if procedure.groupe_instructeurs.size == 1 + flash[:notice] = "le groupe « #{@groupe_instructeur.label} » a été supprimé #{routing_notice}." end redirect_to admin_procedure_groupe_instructeurs_path(procedure) end @@ -199,12 +203,12 @@ module Administrateurs redirect_to admin_procedure_groupe_instructeurs_path(procedure) end - def update_routing_enabled - procedure.update!(routing_enabled_params) - - redirect_to admin_procedure_groupe_instructeurs_path(procedure), - notice: "Le routage est #{procedure.routing_enabled? ? "activée" : "désactivée"}." - end + # def update_routing_enabled + # procedure.update!(routing_enabled_params) + # + # redirect_to admin_procedure_groupe_instructeurs_path(procedure), + # notice: "Le routage est #{procedure.routing_enabled? ? "activée" : "désactivée"}." + # end def update_instructeurs_self_management_enabled procedure.update!(instructeurs_self_management_enabled_params) diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index a1b1da5a2..7d054b8e0 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -22,9 +22,17 @@ class GroupeInstructeur < ApplicationRecord validates :label, uniqueness: { scope: :procedure, message: 'existe déjà' } before_validation -> { label&.strip! } + after_create :toggle_routing scope :without_group, -> (group) { where.not(id: group) } scope :for_api_v2, -> { includes(procedure: [:administrateurs]) } + scope :actif, -> { where(closed: false) } + + def toggle_routing + procedure = self.procedure.reload + routing_enabled = procedure.groupe_instructeurs.actif.count > 1 + procedure.update!(routing_enabled: routing_enabled) + end def add(instructeur) return if in?(instructeur.groupe_instructeurs) diff --git a/app/views/administrateurs/groupe_instructeurs/_routing.html.haml b/app/views/administrateurs/groupe_instructeurs/_routing.html.haml index 471f580d0..80b3e1e61 100644 --- a/app/views/administrateurs/groupe_instructeurs/_routing.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/_routing.html.haml @@ -4,11 +4,6 @@ - if !procedure.routee? %p.notice= t('.notice_html') - - if procedure.routee? - - if procedure.routing_enabled? && procedure.groupe_instructeurs.size == 1 - = link_to t('.button.routing_disable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :disable), class: 'fr-btn', method: 'patch' - - else - = link_to t('.button.routing_enable'), update_routing_enabled_admin_procedure_groupe_instructeurs_path(procedure, routing: :enable), class: 'fr-btn', method: 'patch' .card %h2.card-title L‘autogestion des instructeurs %p.notice= t('.self_managment_notice_html') diff --git a/app/views/administrateurs/groupe_instructeurs/index.html.haml b/app/views/administrateurs/groupe_instructeurs/index.html.haml index 0570d11f7..45ef9bb60 100644 --- a/app/views/administrateurs/groupe_instructeurs/index.html.haml +++ b/app/views/administrateurs/groupe_instructeurs/index.html.haml @@ -14,9 +14,8 @@ = render partial: 'administrateurs/groupe_instructeurs/routing', locals: { procedure: @procedure } - - if @procedure.routee? - = render partial: 'administrateurs/groupe_instructeurs/edit', locals: { procedure: @procedure, groupes_instructeurs: @groupes_instructeurs } - - else + = render partial: 'administrateurs/groupe_instructeurs/edit', locals: { procedure: @procedure, groupes_instructeurs: @groupes_instructeurs } + - if @procedure.groupe_instructeurs.one? = render partial: 'administrateurs/groupe_instructeurs/instructeurs', locals: { procedure: @procedure, groupe_instructeur: @procedure.defaut_groupe_instructeur, diff --git a/config/routes.rb b/config/routes.rb index d8280e90a..bdc8934a8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -480,7 +480,6 @@ Rails.application.routes.draw do collection do patch 'update_routing_criteria_name' - patch 'update_routing_enabled' patch 'update_instructeurs_self_management_enabled' post 'import' get 'export_groupe_instructeurs' diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index b9fe58753..18a6f503f 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -97,8 +97,9 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do context 'of a group that can be deleted' do before { delete_group gi_1_2 } - it { expect(flash.notice).to be_present } + it { expect(flash.notice).to eq "le groupe « groupe instructeur 2 » a été supprimé et le routage a été désactivé." } it { expect(procedure.groupe_instructeurs.count).to eq(1) } + it { expect(procedure.reload.routing_enabled?).to eq(false) } it { expect(response).to redirect_to(admin_procedure_groupe_instructeurs_path(procedure)) } end diff --git a/spec/system/administrateurs/procedure_groupe_instructeur_spec.rb b/spec/system/administrateurs/procedure_groupe_instructeur_spec.rb index 34849d318..3f0716693 100644 --- a/spec/system/administrateurs/procedure_groupe_instructeur_spec.rb +++ b/spec/system/administrateurs/procedure_groupe_instructeur_spec.rb @@ -26,11 +26,15 @@ describe 'Manage procedure instructeurs', js: true do scenario 'can add instructeur' do visit admin_procedure_groupe_instructeurs_path(procedure) - expect { fill_in "instructeur_emails", with: create(:instructeur).email click_on "Affecter" }.to change { procedure.instructeurs.count }.by(1) + expect { + fill_in "groupe_instructeur_label", with: "Bordeaux" + click_on "Ajouter le groupe" + }.to change { procedure.groupe_instructeurs.count }.by(1) + expect(procedure.reload.routing_enabled).to eq true end end diff --git a/spec/system/routing/full_scenario_spec.rb b/spec/system/routing/full_scenario_spec.rb index 7ffe7c2c8..dfd1eb676 100644 --- a/spec/system/routing/full_scenario_spec.rb +++ b/spec/system/routing/full_scenario_spec.rb @@ -32,19 +32,18 @@ describe 'The routing', js: true do # add victor to littéraire groupe fill_in 'Emails', with: 'victor@inst.com' perform_enqueued_jobs { click_on 'Affecter' } - expect(page).to have_text("L’instructeur victor@inst.com a été affecté au groupe « littéraire »") + expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") victor = User.find_by(email: 'victor@inst.com').instructeur # add superwoman to littéraire groupe fill_in 'Emails', with: 'superwoman@inst.com' perform_enqueued_jobs { click_on 'Affecter' } - expect(page).to have_text("L’instructeur superwoman@inst.com a été affecté au groupe « littéraire »") + expect(page).to have_text("Les instructeurs ont bien été affectés à la démarche") superwoman = User.find_by(email: 'superwoman@inst.com').instructeur # add inactive groupe - click_on 'Groupes d’instructeurs' fill_in 'Ajouter un groupe', with: 'non visible car inactif' click_on 'Ajouter le groupe' check "Groupe inactif" diff --git a/spec/system/users/brouillon_spec.rb b/spec/system/users/brouillon_spec.rb index 257c92674..4bf58731f 100644 --- a/spec/system/users/brouillon_spec.rb +++ b/spec/system/users/brouillon_spec.rb @@ -238,30 +238,6 @@ describe 'The user' do expect(page).to have_text('file.pdf') end - context 'with routing activated and one instructor group' do - let!(:simple_procedure) { create(:simple_procedure, :published, :with_type_de_champ, :for_individual) } - let!(:administrateur) { create(:administrateur, procedures: [simple_procedure]) } - - before do - simple_procedure.update(routing_enabled: true) - simple_procedure.defaut_groupe_instructeur.instructeurs << administrateur.instructeur - end - - it 'sends the dossier without selecting instructor group', js: true do - log_in(user, simple_procedure) - fill_individual - fill_in('Texte obligatoire', with: 'bla bla') - wait_for_autosave - - expect(page).not_to have_text('Votre ville') - - click_on 'Déposer le dossier' - - expect(page).to have_current_path(merci_dossier_path(user_dossier)) - expect(page).to have_text('Merci') - end - end - context 'with condition' do include Logic