Skip to content

Commit

Permalink
Vérifier la cohérence du compte quand on supprime la structure
Browse files Browse the repository at this point in the history
Le compte doit être en attente
Le compte doit être conseiller
  • Loading branch information
etienneCharignon committed Oct 21, 2024
1 parent 54c7324 commit 0d3facd
Show file tree
Hide file tree
Showing 10 changed files with 93 additions and 24 deletions.
12 changes: 11 additions & 1 deletion app/models/compte.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class Compte < ApplicationRecord
validates :role, inclusion: { in: ROLES }
enum :role, ROLES.zip(ROLES).to_h
validates :statut_validation, presence: true
validate :verifie_etat_si_structure_manquante
validates :nom, :prenom, presence: { on: :create }
validate :verifie_dns_email, :structure_a_un_admin
validates :email, uniqueness: { case_sensitive: false }
Expand All @@ -44,7 +45,6 @@ def nom_complet

def find_admins
Compte.where(structure: structure, role: ADMIN_ROLES, statut_validation: :acceptee)
.where.not(structure: nil)
end

def anlci?
Expand Down Expand Up @@ -83,6 +83,16 @@ def rejoindre_structure(structure)

private

def verifie_etat_si_structure_manquante
return if structure.present?

unless validation_en_attente?
errors.add(:statut_validation,
:doit_etre_en_attente_si_structure_vide)
end
errors.add(:role, :doit_etre_conseiller_si_structure_vide) unless conseiller?
end

def verifie_dns_email
return if email.blank?
return unless email_changed?
Expand Down
2 changes: 2 additions & 0 deletions config/locales/models/compte.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,10 @@ fr:
attributes:
statut_validation:
structure_doit_avoir_un_admin: La structure doit avoir au moins un administrateur autorisé
doit_etre_en_attente_si_structure_vide: doit être 'en attente' s'il n'y a pas de structure
role:
structure_doit_avoir_un_admin: La structure doit avoir au moins un administrateur
doit_etre_conseiller_si_structure_vide: doit être 'conseiller' s'il n'y a pas de structure
inclusion: n'est pas inclus dans la liste
formtastic:
actions:
Expand Down
18 changes: 9 additions & 9 deletions spec/factories/compte.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@
trait :structure_avec_admin do
structure { create(:structure, :avec_admin) }
end
trait :en_attente do
statut_validation { :en_attente }
end
trait :acceptee do
statut_validation { :acceptee }
end
trait :refusee do
statut_validation { :refusee }
end

factory :compte_superadmin do
role { 'superadmin' }
Expand All @@ -27,15 +36,6 @@
end
factory :compte_conseiller do
role { 'conseiller' }
trait :en_attente do
statut_validation { :en_attente }
end
trait :acceptee do
statut_validation { :acceptee }
end
trait :refusee do
statut_validation { :refusee }
end
end
factory :compte_generique do
role { 'compte_generique' }
Expand Down
2 changes: 1 addition & 1 deletion spec/features/admin/compte_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@

context 'avec un compte sans structure' do
let(:compte_connecte) do
create :compte_conseiller, structure: nil
create :compte_conseiller, :en_attente, structure: nil
end

it 'peut rejoindre une structure' do
Expand Down
2 changes: 1 addition & 1 deletion spec/features/admin/dashboard_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

context 'quand je suis avec un compte sans structure' do
let!(:compte) do
create :compte_conseiller, statut_validation: :acceptee, structure: nil
create :compte_conseiller, :en_attente, structure: nil
end

it 'Affiche le tutoriel sans le bouton quitter' do
Expand Down
2 changes: 1 addition & 1 deletion spec/features/admin/structure_locale_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
end

describe 'avec un compte sans structure' do
let(:compte) { create(:compte_conseiller, structure: nil) }
let(:compte) { create(:compte_conseiller, :en_attente, structure: nil) }

before { connecte(compte) }

Expand Down
2 changes: 1 addition & 1 deletion spec/integrations/ability_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@
end

context 'Compte conseiller sans structure' do
let(:compte) { create :compte_conseiller, structure: nil }
let(:compte) { create :compte_conseiller, :en_attente, structure: nil }

it {
expect(subject).to be_able_to(:read, ActiveAdmin::Page.new(:admin, 'recherche_structure', {}))
Expand Down
10 changes: 6 additions & 4 deletions spec/integrations/compte_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@
end

it "Quand le compte n'a pas de structure" do
expect { create :compte_admin, structure: nil, confirmed_at: Time.zone.now }
expect do
create :compte_conseiller, :en_attente, structure: nil, confirmed_at: Time.zone.now
end
.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(0)
end

Expand Down Expand Up @@ -108,7 +110,8 @@
context "quand le compte ne fait partie d'une structure" do
it 'ne programme pas de mail de relance' do
expect do
create :compte_admin,
create :compte_conseiller,
:en_attente,
structure: nil,
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
Expand All @@ -123,7 +126,6 @@
let(:compte) { create :compte_conseiller, structure: structure }

context 'avec des admins' do
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 }
Expand All @@ -136,7 +138,7 @@
end

it "quand le compte n'a pas de structure, retourne une liste vide" do
compte.update(structure: nil)
compte.update(statut_validation: :en_attente, structure: nil)
expect(compte.find_admins.count).to be(0)
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
let(:campagne) { create :campagne, compte: compte }

before do
compte.update(structure_id: nil)
compte.update(role: :conseiller, statut_validation: :en_attente, structure_id: nil)
end

it 'ne fais rien' do
Expand Down
65 changes: 60 additions & 5 deletions spec/models/compte_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
it { is_expected.to validate_presence_of :prenom }

context 'quand un compte a été soft-delete' do
let(:compte) { build :compte, email: '[email protected]' }
let(:compte) do
build :compte, email: '[email protected]'
end

before do
autre_compte = create :compte, email: '[email protected]'
Expand Down Expand Up @@ -111,14 +113,67 @@
it { expect(compte.role).to eql('conseiller') }
end

describe "verifie le statut s'il n'y a pas de structure" do
context 'Quand il y a une de structure' do
let(:structure) { Structure.new }
let(:compte) { described_class.new role: 'admin', structure: structure }

context 'quand le statut est accepté' do
before do
compte.statut_validation = :acceptee
end

it "il n'y a pas d'erreur" do
compte.valid?
expect(compte.errors[:statut_validation]).to be_blank
end
end
end

context "Quand il n'y a pas de structure" do
let(:compte) { described_class.new role: 'conseiller', structure: nil }

context 'quand le statut est accepté' do
before do
compte.statut_validation = :acceptee
end

it 'il signal une erreur' do
compte.valid?
expect(compte.errors[:statut_validation])
.to include "doit être 'en attente' s'il n'y a pas de structure"
end
end

context "quand le role n'est pas conseiller" do
before do
compte.role = :admin
end

it 'il signal une erreur' do
compte.valid?
expect(compte.errors[:role])
.to include "doit être 'conseiller' s'il n'y a pas de structure"
end
end

context 'quand le statut est en_attente et le role conseiller' do
before do
compte.statut_validation = :en_attente
end

it "il n'y a pas d'erreur" do
compte.valid?
expect(compte.errors[:statut_validation]).to be_blank
end
end
end
end

describe "verifie la présence d'un admin" do
let(:structure) { Structure.new }
let(:compte) { described_class.new role: 'admin', structure: structure }

before do
allow(compte).to receive(:verifie_dns_email).and_return(true)
end

context 'quand il y a un autre admins dans la structure' do
before do
allow(compte).to receive(:autres_admins?).and_return(true)
Expand Down

0 comments on commit 0d3facd

Please sign in to comment.