Skip to content

Commit

Permalink
Vérifier qu'on ne peut pas supprimer la structure d'un compte sans qu…
Browse files Browse the repository at this point in the history
…'il soit aussi en attente
  • Loading branch information
etienneCharignon committed Oct 14, 2024
1 parent fcc1d5e commit 2063bdd
Show file tree
Hide file tree
Showing 10 changed files with 75 additions and 22 deletions.
7 changes: 7 additions & 0 deletions 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 :role, inclusion: { in: %w[conseiller compte_generique], message: :comptes_refuses },
Expand Down Expand Up @@ -88,6 +89,12 @@ def rejoindre_structure(structure)

private

def verifie_etat_si_structure_manquante
return unless structure.blank? && statut_validation != 'en_attente'

errors.add(:statut_validation, :doit_etre_en_attente_si_structure_vide)
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 @@ -48,6 +48,8 @@ fr:
models:
compte:
attributes:
statut_validation:
doit_etre_en_attente_si_structure_vide: L'état 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'
inclusion: n'est pas inclus dans la liste
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 @@ -262,7 +262,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
7 changes: 4 additions & 3 deletions spec/integrations/compte_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
end

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

Expand Down Expand Up @@ -109,6 +109,7 @@
it 'ne programme pas de mail de relance' do
expect do
create :compte_admin,
:en_attente,
structure: nil,
confirmed_at: Time.zone.now,
email_bienvenue_envoye: false
Expand All @@ -123,7 +124,7 @@
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_sans_structure) { create :compte_admin, :en_attente, structure: nil }
let!(:compte_admin) { create :compte_admin, structure: structure }
let!(:compte_admin2) { create :compte_admin, structure: structure }
let!(:compte_superadmin) { create :compte_superadmin, structure: structure }
Expand All @@ -135,7 +136,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(statut_validation: :en_attente, structure_id: nil)
end

it 'ne fais rien' do
Expand Down
53 changes: 48 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,55 @@
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: 'admin', 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 "L'état doit être en attente s'il n'y a pas de structure"
end
end

context 'quand le statut est en_attente' 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 2063bdd

Please sign in to comment.