[#10751] Only send the first invitation mail to the instructeur if email is not verified

This commit is contained in:
Mathieu Magnin 2024-09-10 16:15:30 +02:00
parent b5c024cca5
commit d7811fca40
No known key found for this signature in database
GPG key ID: 8DCAFC82D7BA654E
3 changed files with 35 additions and 2 deletions

View file

@ -50,9 +50,10 @@ module Instructeurs
GroupeInstructeurMailer GroupeInstructeurMailer
.notify_added_instructeurs(groupe_instructeur, [instructeur], current_user.email) .notify_added_instructeurs(groupe_instructeur, [instructeur], current_user.email)
.deliver_later .deliver_later
else elsif instructeur.previously_new_record?
InstructeurMailer.confirm_and_notify_added_instructeur(instructeur, groupe_instructeur, current_user.email).deliver_later InstructeurMailer.confirm_and_notify_added_instructeur(instructeur, groupe_instructeur, current_user.email).deliver_later
end end
# else instructeur already exists and email is not verified, so do not spam them
end end
redirect_to instructeur_groupe_path(procedure, groupe_instructeur) redirect_to instructeur_groupe_path(procedure, groupe_instructeur)

View file

@ -78,6 +78,11 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
end end
describe '#add_instructeur' do describe '#add_instructeur' do
before do
allow(InstructeurMailer).to receive(:confirm_and_notify_added_instructeur).and_call_original
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs).and_call_original
end
subject do subject do
post :add_instructeur, post :add_instructeur,
params: { params: {
@ -95,6 +100,23 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
expect(gi_1_2.instructeurs.map(&:email)).to include(new_instructeur_email) expect(gi_1_2.instructeurs.map(&:email)).to include(new_instructeur_email)
expect(flash.notice).to be_present expect(flash.notice).to be_present
expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2)) expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2))
expect(InstructeurMailer).to have_received(:confirm_and_notify_added_instructeur).with(instance_of(Instructeur), gi_1_2, anything)
expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
end
end
context 'of an instructeur already known and with email verified' do
let(:known_instructeur) { create(:instructeur, :email_verified) }
let(:new_instructeur_email) { known_instructeur.email }
before { subject }
it "works" do
expect(gi_1_2.instructeurs.map(&:email)).to include(new_instructeur_email)
expect(flash.notice).to be_present
expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2))
expect(InstructeurMailer).not_to have_received(:confirm_and_notify_added_instructeur)
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs)
end end
end end
@ -105,6 +127,8 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
it "works" do it "works" do
expect(flash.alert).to be_present expect(flash.alert).to be_present
expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2)) expect(response).to redirect_to(instructeur_groupe_path(procedure, gi_1_2))
expect(InstructeurMailer).not_to have_received(:confirm_and_notify_added_instructeur)
expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
end end
end end
@ -114,6 +138,8 @@ describe Instructeurs::GroupeInstructeursController, type: :controller do
it "works" do it "works" do
expect { subject }.not_to enqueue_email expect { subject }.not_to enqueue_email
expect(flash.alert).to include(new_instructeur_email) expect(flash.alert).to include(new_instructeur_email)
expect(InstructeurMailer).not_to have_received(:confirm_and_notify_added_instructeur)
expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
end end
end end
end end

View file

@ -10,7 +10,13 @@ FactoryBot.define do
transient do transient do
email { generate(:instructeur_email) } email { generate(:instructeur_email) }
password { 'somethingverycomplated!' } password { '{my-%s3cure[]-p4$$w0rd' }
end
trait :email_verified do
after(:create) do |instructeur|
instructeur.user.update(email_verified_at: Time.zone.now)
end
end end
trait :with_agent_connect_information do trait :with_agent_connect_information do