Skip to content

Commit

Permalink
l'envoie d'emails de bienvenu attend la structure et la validation de…
Browse files Browse the repository at this point in the history
… l'email
  • Loading branch information
etienneCharignon committed Aug 28, 2023
1 parent eae0fff commit 30ad762
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 70 deletions.
28 changes: 14 additions & 14 deletions app/models/concerns/comptes/envoie_emails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,30 @@ module EnvoieEmails
extend ActiveSupport::Concern

included do
after_commit :after_commit_on_create, on: :create
after_commit :after_commit, on: %i[create update]
end

private

def after_commit_on_create
return if superadmin?
def after_commit
return if email_bienvenue_envoye? || email_non_confirme? || structure.blank? || superadmin?

envoie_bienvenue(self)
alerte_admins(self) if validation_en_attente?
programme_email_relance(self)
envoie_emails(self)
update(email_bienvenue_envoye: true)
end

def envoie_emails(compte)
def envoie_bienvenue(compte)
CompteMailer.with(compte: compte).nouveau_compte.deliver_later
end

alerte_admins(compte) if compte.validation_en_attente?
def alerte_admins(compte)
compte.find_admins.each do |admin|
CompteMailer.with(compte: compte, compte_admin: admin)
.alerte_admin
.deliver_later
end
end

def programme_email_relance(compte)
Expand All @@ -30,13 +38,5 @@ def programme_email_relance(compte)
.set(wait: Compte::DELAI_RELANCE_NON_ACTIVATION)
.perform_later(compte.id)
end

def alerte_admins(compte)
compte.find_admins.each do |admin|
CompteMailer.with(compte: compte, compte_admin: admin)
.alerte_admin
.deliver_later
end
end
end
end
134 changes: 78 additions & 56 deletions spec/integrations/compte_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,78 +3,100 @@
require 'rails_helper'

describe Compte, type: :integration do
describe 'après création' do
describe '#envoie_bienvenue' do
context 'quand le compte est en attente de validation' do
let!(:structure) { create :structure_locale, :avec_admin }
let!(:structure) { create :structure_locale }

it "programme un mail de relance, un mail de bienvenue et un mail d'alerte aux admins" do
expect { create :compte_conseiller, structure: structure, statut_validation: :en_attente }
.to have_enqueued_mail(
CompteMailer,
:nouveau_compte
).exactly(1)
.and have_enqueued_mail(
CompteMailer,
:alerte_admin
).exactly(1)
.and have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(1)
it 'programme un mail de bienvenue' do
expect { create :compte_admin, structure: structure, confirmed_at: Time.zone.now }
.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(1)
end

it "ne programme pas d'email si c'est une modification du compte" do
compte = create :compte_conseiller, structure: structure, statut_validation: :en_attente
expect { compte.update(statut_validation: :acceptee) }
.to have_enqueued_mail(
CompteMailer,
:nouveau_compte
).exactly(0)
it "attend la validation de l'email pour envoyer les mails" do
compte = create :compte_admin, structure: structure, confirmed_at: nil
expect { compte.update(confirmed_at: Time.zone.now) }
.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(1)
end
end

context 'quand le compte est superadmin' do
it 'ne programme pas de mail' do
expect { create :compte_superadmin }
.to have_enqueued_mail(
CompteMailer,
:nouveau_compte
).exactly(0)
.and have_enqueued_mail(
CompteMailer,
:alerte_admin
).exactly(0)
.and have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(0)
describe "ne programme pas d'email" do
it 'Quand les mails ont déjà été envoyé' do
compte = create :compte_admin, structure: structure, confirmed_at: Time.zone.now
expect { compte.update(statut_validation: :acceptee) }
.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(0)
end

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

it "Quand l'email n'est pas confirmée" do
expect { create :compte_admin, structure: structure, confirmed_at: nil }
.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(0)
end

it 'Quand les compte est superadmin' do
expect { create :compte_superadmin, structure: structure, confirmed_at: Time.zone.now }
.to have_enqueued_mail(CompteMailer, :nouveau_compte).exactly(0)
end
end
end

context "quand le compte n'est pas en attente" do
it 'programme un mail de relance et un mail de bienvenue' do
expect { create :compte_admin, statut_validation: :acceptee }
.to have_enqueued_mail(
CompteMailer,
:nouveau_compte
).exactly(1)
.and have_enqueued_mail(
CompteMailer,
:alerte_admin
).exactly(0)
.and have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(1)
describe '#alerte_admins' do
let!(:structure) { create :structure_locale, :avec_admin }

it 'Quand le statut est accepté' do
expect do
create :compte_conseiller,
structure: structure,
statut_validation: :acceptee,
confirmed_at: Time.zone.now
end.to have_enqueued_mail(CompteMailer, :alerte_admin).exactly(0)
end

it 'Quand le statut est en attente' do
expect do
create :compte_conseiller,
structure: structure,
statut_validation: :en_attente,
confirmed_at: Time.zone.now
end.to have_enqueued_mail(CompteMailer, :alerte_admin).exactly(1)
end
end

context "quand le compte fait partie d'une structure locale" do
let(:structure) { create :structure_locale }
describe '#programme_email_relance' do
context "quand le compte fait partie d'une structure locale" do
let(:structure) { create :structure_locale }

it 'programme un mail de relance' do
expect { create :compte_admin, statut_validation: :acceptee, structure: structure }
.to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(1)
it 'programme un mail de relance' do
expect do
create :compte_admin,
structure: structure,
confirmed_at: Time.zone.now
end.to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(1)
end
end
end

context "quand le compte fait partie d'une structure administrative" do
let(:structure) { create :structure_administrative }
context "quand le compte fait partie d'une structure administrative" do
let(:structure) { create :structure_administrative }

it 'ne programme pas de mail de relance' do
expect do
create :compte_admin,
structure: structure,
confirmed_at: Time.zone.now
end.to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(0)
end
end

it 'programme un mail de relance' do
expect { create :compte_admin, statut_validation: :acceptee, structure: structure }
.not_to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(1)
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,
structure: nil,
confirmed_at: Time.zone.now
end.to have_enqueued_job(RelanceUtilisateurPourNonActivationJob).exactly(0)
end
end
end
end
Expand Down

0 comments on commit 30ad762

Please sign in to comment.