From b277a537dd4e4ceea66a1d59e5bf81c27fd55c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Charignon?= Date: Mon, 14 Oct 2024 17:36:09 +0200 Subject: [PATCH] =?UTF-8?q?On=20peut=20refuser=20tous=20les=20comptes,=20d?= =?UTF-8?q?u=20moment=20qu'il=20reste=20un=20admin=20non-refus=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ce commit corrige l'erreur rollbar qui surgissait si on essayait de refuser un compte CMR https://app.rollbar.com/a/eva-betagouv/fix/item/eva/1020?utm_campaign=new_item&utm_medium=email&utm_source=rollbar-notification&utm_content=view-item-button-1 --- app/models/compte.rb | 11 +++-------- config/locales/models/compte.yml | 2 -- spec/features/admin/compte_spec.rb | 28 ---------------------------- spec/integrations/compte_spec.rb | 1 + spec/models/compte_spec.rb | 6 ++++++ 5 files changed, 10 insertions(+), 38 deletions(-) diff --git a/app/models/compte.rb b/app/models/compte.rb index cebb03158..d4a5b13ff 100644 --- a/app/models/compte.rb +++ b/app/models/compte.rb @@ -21,8 +21,6 @@ class Compte < ApplicationRecord validates :statut_validation, presence: true validates :nom, :prenom, presence: { on: :create } validate :verifie_dns_email, :structure_a_un_admin - validates :role, inclusion: { in: %w[conseiller compte_generique], message: :comptes_refuses }, - if: :compte_refuse? validates :email, uniqueness: { case_sensitive: false } validates_with PasswordValidator, fields: [:password] @@ -45,11 +43,8 @@ def nom_complet end def find_admins - Compte.where(structure: structure, role: ADMIN_ROLES).where.not(structure: nil) - end - - def compte_refuse? - validation_refusee? + Compte.where(structure: structure, role: ADMIN_ROLES, statut_validation: :acceptee) + .where.not(structure: nil) end def anlci? @@ -98,7 +93,7 @@ def verifie_dns_email def structure_a_un_admin return if structure.nil? - return if au_moins_admin? + return if au_moins_admin? && !validation_refusee? return if autres_admins? errors.add(:role, :structure_doit_avoir_un_admin) diff --git a/config/locales/models/compte.yml b/config/locales/models/compte.yml index 755031160..ebd6b776d 100644 --- a/config/locales/models/compte.yml +++ b/config/locales/models/compte.yml @@ -51,8 +51,6 @@ fr: role: structure_doit_avoir_un_admin: 'La structure doit avoir au moins un administrateur' inclusion: n'est pas inclus dans la liste - comptes_refuses: | - ce compte ne peut pas avoir le rôle %s en étant refusé. Uniquement conseiller ou compte générique formtastic: actions: compte: diff --git a/spec/features/admin/compte_spec.rb b/spec/features/admin/compte_spec.rb index c3b3c7270..9a66b5cdf 100644 --- a/spec/features/admin/compte_spec.rb +++ b/spec/features/admin/compte_spec.rb @@ -65,20 +65,6 @@ it { expect(collegue.reload.validation_refusee?).to be true } end - describe 'Refuser un admin' do - before do - visit edit_admin_compte_path(collegue) - select 'Admin' - choose 'Refusé' - click_on 'Modifier' - end - - it 'ne permet pas de refuser un admin' do - expect(page).to have_content('ce compte ne peut pas avoir le rôle admin en étant ' \ - 'refusé. Uniquement conseiller ou compte générique') - end - end - describe 'Je vois les informations d\'un collègue' do it do visit admin_compte_path(collegue) @@ -170,20 +156,6 @@ it { expect(collegue.reload.validation_refusee?).to be true } end - describe 'Refuser un admin' do - before do - visit edit_admin_compte_path(collegue) - select 'Admin' - choose 'Refusé' - click_on 'Modifier' - end - - it 'ne permet pas de refuser un admin' do - expect(page).to have_content('ce compte ne peut pas avoir le rôle admin en étant ' \ - 'refusé. Uniquement conseiller ou compte générique') - end - end - describe "modifier le mot de passe d'un collègue" do before do visit edit_admin_compte_path(collegue) diff --git a/spec/integrations/compte_spec.rb b/spec/integrations/compte_spec.rb index 0ab43785b..9f141c099 100644 --- a/spec/integrations/compte_spec.rb +++ b/spec/integrations/compte_spec.rb @@ -126,6 +126,7 @@ let!(:compte_admin_sans_structure) { create :compte_admin, structure: nil } let!(:compte_admin) { create :compte_admin, structure: structure } let!(:compte_admin2) { create :compte_admin, structure: structure } + let!(:compte_admin_refuse) { create :compte_admin, :refusee, structure: structure } let!(:compte_superadmin) { create :compte_superadmin, structure: structure } let(:autre_structure) { create :structure } let!(:autre_admin) { create :compte_admin, structure: autre_structure } diff --git a/spec/models/compte_spec.rb b/spec/models/compte_spec.rb index 8360264e6..4258e50b6 100644 --- a/spec/models/compte_spec.rb +++ b/spec/models/compte_spec.rb @@ -141,6 +141,12 @@ compte.valid? expect(compte.errors[:role]).to include 'La structure doit avoir au moins un administrateur' end + + it 'ne peut pas refuser cet admin' do + compte.statut_validation = 'refusee' + compte.valid? + expect(compte.errors[:role]).to include 'La structure doit avoir au moins un administrateur' + end end context "quand il n'y a pas d'admin dans la structure" do