From fb75a55b89e07c1addfb7c2a1b644e646d4aa46e Mon Sep 17 00:00:00 2001 From: Pierre de La Morinerie Date: Wed, 5 Jan 2022 16:19:26 +0100 Subject: [PATCH 1/2] Add specs for Administrateurs::ProcedureAdministrateursController --- ...ocedure_administrateurs_controller_spec.rb | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb diff --git a/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb b/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb new file mode 100644 index 000000000..bbec91374 --- /dev/null +++ b/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb @@ -0,0 +1,26 @@ +describe Administrateurs::ProcedureAdministrateursController, type: :controller do + let(:signed_in_admin) { create(:administrateur) } + let(:other_admin) { create(:administrateur) } + let(:procedure) { create(:procedure, administrateurs: [signed_in_admin, other_admin]) } + + before do + sign_in(signed_in_admin.user) + end + + describe '#destroy' do + subject do + delete :destroy, params: { procedure_id: procedure.id, id: admin_to_remove.id }, format: :js, xhr: true + end + + context 'when removing another admin' do + let(:admin_to_remove) { other_admin } + + it 'removes the admin from the procedure' do + subject + expect(response.status).to eq(200) + expect(signed_in_admin.procedures.reload).to include(procedure) + expect(other_admin.procedures.reload).not_to include(procedure) + end + end + end +end From 062f52feb9be64debe6d6f2a732fe606cd97a65a Mon Sep 17 00:00:00 2001 From: Pierre de La Morinerie Date: Wed, 5 Jan 2022 15:21:59 +0000 Subject: [PATCH 2/2] Fix ProcedureAdministrateursController#destroy - The "no remove oneself" rule wasn't actually enforced - `flash.error` is not a flash category --- .../procedure_administrateurs_controller.rb | 3 ++- .../procedure_administrateurs_controller_spec.rb | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/app/controllers/administrateurs/procedure_administrateurs_controller.rb b/app/controllers/administrateurs/procedure_administrateurs_controller.rb index c03c5c4a9..3bc56f546 100644 --- a/app/controllers/administrateurs/procedure_administrateurs_controller.rb +++ b/app/controllers/administrateurs/procedure_administrateurs_controller.rb @@ -32,7 +32,8 @@ module Administrateurs # Prevent self-removal (Also enforced in the UI) if administrateur == current_administrateur - flash.error = "Vous ne pouvez pas vous retirer vous-même d’une démarche." + flash.alert = "Vous ne pouvez pas vous retirer vous-même d’une démarche." + return end # Actually remove the admin diff --git a/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb b/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb index bbec91374..2094a8d54 100644 --- a/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb +++ b/spec/controllers/administrateurs/procedure_administrateurs_controller_spec.rb @@ -18,8 +18,19 @@ describe Administrateurs::ProcedureAdministrateursController, type: :controller it 'removes the admin from the procedure' do subject expect(response.status).to eq(200) - expect(signed_in_admin.procedures.reload).to include(procedure) - expect(other_admin.procedures.reload).not_to include(procedure) + expect(flash[:notice]).to be_present + expect(admin_to_remove.procedures.reload).not_to include(procedure) + end + end + + context 'when removing oneself from a procedure' do + let(:admin_to_remove) { signed_in_admin } + + it 'denies the right for an admin to remove itself' do + subject + expect(response.status).to eq(200) + expect(flash[:alert]).to be_present + expect(admin_to_remove.procedures.reload).to include(procedure) end end end