From f16addd080c01842b114fd1d0fb6e83c7dfec6c8 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 23 Sep 2024 15:57:39 +0200 Subject: [PATCH 1/2] test(manager): nominal case of #add_administrateur_and_instructor --- .../manager/procedures_controller_spec.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/spec/controllers/manager/procedures_controller_spec.rb b/spec/controllers/manager/procedures_controller_spec.rb index d0fc8d476..27dab439a 100644 --- a/spec/controllers/manager/procedures_controller_spec.rb +++ b/spec/controllers/manager/procedures_controller_spec.rb @@ -124,4 +124,18 @@ describe Manager::ProceduresController, type: :controller do end end end + + describe '#add_administrateur_and_instructeur' do + let(:procedure) { create(:procedure, administrateurs: [autre_administrateur]) } + subject { post :add_administrateur_and_instructeur, params: { id: procedure.id } } + + context "when the current super admin is not an administrateur and not an instructeur of the procedure" do + before { administrateur } + it "adds the current super admin as administrateur and instructeur to the procedure" do + subject + expect(procedure.administrateurs).to include(administrateur) + expect(procedure.instructeurs).to include(administrateur.instructeur) + end + end + end end From 7625ec5c8f1dbcd7b4445147a747f200333a3e10 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Mon, 23 Sep 2024 17:39:44 +0200 Subject: [PATCH 2/2] fix(manager): can add to super admin both roles of administrator and instructor if he is already one of them --- .../manager/procedures_controller.rb | 29 ++++++++++++---- app/views/manager/procedures/show.html.erb | 2 +- .../manager/procedures_controller_spec.rb | 33 +++++++++++++++++++ 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/app/controllers/manager/procedures_controller.rb b/app/controllers/manager/procedures_controller.rb index 56ee3eccc..f44b49e3d 100644 --- a/app/controllers/manager/procedures_controller.rb +++ b/app/controllers/manager/procedures_controller.rb @@ -68,18 +68,35 @@ module Manager def add_administrateur_and_instructeur administrateur = Administrateur.by_email(current_super_admin.email) instructeur = Instructeur.by_email(current_super_admin.email) - if administrateur && instructeur - ActiveRecord::Base.transaction do + notices, alerts = [], [] + + if administrateur + if !AdministrateursProcedure.exists?(procedure: procedure, administrateur: administrateur) AdministrateursProcedure.create!(procedure: procedure, administrateur: administrateur, manager: true) - procedure.groupe_instructeurs.map do |groupe_instructeur| + end + notices.push "L’administrateur #{administrateur.email} a été ajouté à la démarche." + else + alerts.push "L’administrateur #{administrateur.email} est introuvable." + end + + if instructeur + procedure.groupe_instructeurs.map do |groupe_instructeur| + if !instructeur.assign_to.exists?(groupe_instructeur: groupe_instructeur) instructeur.assign_to.create(groupe_instructeur: groupe_instructeur, manager: true) end end - - flash[:notice] = "L’administrateur \"#{administrateur.email}\" a été ajouté à la démarche. L'instructeur \"#{instructeur.email}\" a été ajouté aux #{procedure.groupe_instructeurs.count} groupes d'instructeurs" + if procedure.groupe_instructeurs.many? + notices.push "L'instructeur #{instructeur.email} a été ajouté aux #{procedure.groupe_instructeurs.count} groupes d'instructeurs." + else + notices.push "L'instructeur #{instructeur.email} a été ajouté à la démarche." + end else - flash[:alert] = "L’administrateur \"#{administrateur.email}\" est introuvable." + alerts.push "L'instructeur #{instructeur.email} est introuvable." end + + flash[:notice] = notices.join(" ") if notices.present? + flash[:alert] = alerts.join(" ") if alerts.present? + redirect_to manager_procedure_path(procedure) end diff --git a/app/views/manager/procedures/show.html.erb b/app/views/manager/procedures/show.html.erb index 17f815bdd..92974d30a 100644 --- a/app/views/manager/procedures/show.html.erb +++ b/app/views/manager/procedures/show.html.erb @@ -77,7 +77,7 @@ as well as a link to its edit page.

J'utilise cette option ETQ support quand un usager a besoin de devenir administrateur sur une démarche

<% end %> - <% if procedure.administrateurs.any? { |admin| admin.email == current_super_admin.email } %> + <% if procedure.administrateurs.any? { |admin| admin.email == current_super_admin.email } && procedure.instructeurs.any? { |instructeur| instructeur.email == current_super_admin.email } %>

Vous êtes administrateur de cette démarche. Aller à la démarche <%= link_to("ETQ admin", admin_procedure_path(procedure), **external_link_attributes) %> ou diff --git a/spec/controllers/manager/procedures_controller_spec.rb b/spec/controllers/manager/procedures_controller_spec.rb index 27dab439a..1970b6e9c 100644 --- a/spec/controllers/manager/procedures_controller_spec.rb +++ b/spec/controllers/manager/procedures_controller_spec.rb @@ -135,6 +135,39 @@ describe Manager::ProceduresController, type: :controller do subject expect(procedure.administrateurs).to include(administrateur) expect(procedure.instructeurs).to include(administrateur.instructeur) + expect(flash[:alert]).to be_nil + expect(flash[:notice]).to eq("L’administrateur #{administrateur.email} a été ajouté à la démarche. L'instructeur #{administrateur.instructeur.email} a été ajouté à la démarche.") + end + end + + context "when the current super admin is an instructor of the procedure but not an administrator" do + let!(:administrateur) { create(:administrateur, email: super_admin.email, instructeur: instructeur) } + let(:instructeur) { create(:instructeur) } + + before do + procedure.groupe_instructeurs.map do |groupe_instructeur| + groupe_instructeur.add_instructeurs(emails: [instructeur.email]) + end + end + + it "adds the current super admin as administrateur to the procedure" do + subject + expect(procedure.administrateurs).to include(administrateur) + expect(procedure.instructeurs).to include(administrateur.instructeur) + expect(flash[:alert]).to be_nil + expect(flash[:notice]).to eq("L’administrateur #{administrateur.email} a été ajouté à la démarche. L'instructeur #{instructeur.email} a été ajouté à la démarche.") + end + end + + context "when the current super admin is an administrator of the procedure but not an instructor" do + let(:procedure) { create(:procedure, administrateurs: [administrateur, autre_administrateur]) } + + it "adds the current super admin as instructor to the procedure" do + subject + expect(procedure.administrateurs).to include(administrateur) + expect(procedure.instructeurs).to include(administrateur.instructeur) + expect(flash[:alert]).to be_nil + expect(flash[:notice]).to eq("L’administrateur #{administrateur.email} a été ajouté à la démarche. L'instructeur #{administrateur.instructeur.email} a été ajouté à la démarche.") end end end