Merge pull request #10736 from demarches-simplifiees/fix-notif-to-instructeurs-when-import

Correctif: lors de l‘import en masse d'instructeurs, les nouveaux instructeurs reçoivent un lien pour vérifier leur email
This commit is contained in:
Paul Chavard 2024-09-16 13:31:33 +00:00 committed by GitHub
commit e9009025f6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 73 additions and 12 deletions

View file

@ -343,9 +343,7 @@ module Administrateurs
added_instructeurs_by_group.each do |groupe, added_instructeurs| added_instructeurs_by_group.each do |groupe, added_instructeurs|
if added_instructeurs.present? if added_instructeurs.present?
GroupeInstructeurMailer notify_instructeurs(groupe, added_instructeurs)
.notify_added_instructeurs(groupe, added_instructeurs, current_administrateur.email)
.deliver_later
end end
flash_message_for_import(invalid_emails) flash_message_for_import(invalid_emails)
end end
@ -355,9 +353,7 @@ module Administrateurs
added_instructeurs, invalid_emails = InstructeursImportService.import_instructeurs(procedure, instructors_emails) added_instructeurs, invalid_emails = InstructeursImportService.import_instructeurs(procedure, instructors_emails)
if added_instructeurs.present? if added_instructeurs.present?
GroupeInstructeurMailer notify_instructeurs(groupe_instructeur, added_instructeurs)
.notify_added_instructeurs(groupe_instructeur, added_instructeurs, current_administrateur.email)
.deliver_later
end end
flash_message_for_import(invalid_emails) flash_message_for_import(invalid_emails)
else else
@ -505,5 +501,17 @@ module Administrateurs
.update(instructeurs: [current_administrateur.instructeur], routing_rule:) .update(instructeurs: [current_administrateur.instructeur], routing_rule:)
end end
end end
def notify_instructeurs(groupe, added_instructeurs)
known_instructeurs, new_instructeurs = added_instructeurs.partition { |instructeur| instructeur.user.email_verified_at }
new_instructeurs.each { InstructeurMailer.confirm_and_notify_added_instructeur(_1, groupe, current_administrateur.email).deliver_later }
if known_instructeurs.present?
GroupeInstructeurMailer
.notify_added_instructeurs(groupe, known_instructeurs, current_administrateur.email)
.deliver_later
end
end
end end
end end

View file

@ -616,6 +616,8 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before do before do
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs) allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs)
.and_return(double(deliver_later: true)) .and_return(double(deliver_later: true))
allow(InstructeurMailer).to receive(:confirm_and_notify_added_instructeur)
.and_return(double(deliver_later: true))
subject subject
end end
@ -623,7 +625,8 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
expect(procedure.groupe_instructeurs.pluck(:label)).to match_array(["Auvergne-Rhône-Alpes", "Vendée", "défaut", "deuxième groupe"]) expect(procedure.groupe_instructeurs.pluck(:label)).to match_array(["Auvergne-Rhône-Alpes", "Vendée", "défaut", "deuxième groupe"])
expect(flash.notice).to be_present expect(flash.notice).to be_present
expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès") expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès")
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).twice expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
expect(InstructeurMailer).to have_received(:confirm_and_notify_added_instructeur).exactly(4).times
end end
end end
@ -705,6 +708,8 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
before do before do
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs) allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs)
.and_return(double(deliver_later: true)) .and_return(double(deliver_later: true))
allow(InstructeurMailer).to receive(:confirm_and_notify_added_instructeur)
.and_return(double(deliver_later: true))
subject subject
end end
@ -713,11 +718,8 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["kara@beta-gouv.fr", "philippe@mail.com", "lisa@gouv.fr"]) expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["kara@beta-gouv.fr", "philippe@mail.com", "lisa@gouv.fr"])
expect(flash.alert).to be_present expect(flash.alert).to be_present
expect(flash.alert).to eq("Import terminé. Cependant les emails suivants ne sont pas pris en compte: eric") expect(flash.alert).to eq("Import terminé. Cependant les emails suivants ne sont pas pris en compte: eric")
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).with( expect(InstructeurMailer).to have_received(:confirm_and_notify_added_instructeur).exactly(3).times
procedure_non_routee.defaut_groupe_instructeur, expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
any_args,
admin.email
)
end end
end end
@ -785,6 +787,54 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs) expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
end end
end end
context 'when instructeurs accounts exist' do
let(:csv_file) { fixture_file_upload('spec/fixtures/files/two-instructeurs-file.csv', 'text/csv') }
let(:user_1) { create(:user, :with_email_verified, email: 'instructeur1@gouv.fr') }
let(:user_2) { create(:user, :with_email_verified, email: 'instructeur2@gouv.fr') }
let!(:instructeur_1) { create(:instructeur, user: user_1) }
let!(:instructeur_2) { create(:instructeur, user: user_2) }
before do
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs)
.and_return(double(deliver_later: true))
allow(InstructeurMailer).to receive(:confirm_and_notify_added_instructeur)
.and_return(double(deliver_later: true))
subject
end
it 'sends notification without confirmation link' do
expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["instructeur1@gouv.fr", "instructeur2@gouv.fr"])
expect(flash.notice).to be_present
expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès")
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs)
expect(InstructeurMailer).not_to have_received(:confirm_and_notify_added_instructeur)
end
end
context 'when instructeurs accounts do not exist' do
let(:csv_file) { fixture_file_upload('spec/fixtures/files/two-instructeurs-file.csv', 'text/csv') }
let(:user_1) { create(:user, email: 'instructeur1@gouv.fr') }
let(:user_2) { create(:user, email: 'instructeur2@gouv.fr') }
let!(:instructeur_1) { create(:instructeur, user: user_1) }
let!(:instructeur_2) { create(:instructeur, user: user_2) }
before do
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs)
.and_return(double(deliver_later: true))
allow(InstructeurMailer).to receive(:confirm_and_notify_added_instructeur)
.and_return(double(deliver_later: true))
subject
end
it 'sends notification without confirmation link' do
expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["instructeur1@gouv.fr", "instructeur2@gouv.fr"])
expect(flash.notice).to be_present
expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès")
expect(GroupeInstructeurMailer).not_to have_received(:notify_added_instructeurs)
expect(InstructeurMailer).to have_received(:confirm_and_notify_added_instructeur).twice
end
end
end end
end end

View file

@ -0,0 +1,3 @@
Email
instructeur1@gouv.fr
instructeur2@gouv.fr
1 Email
2 instructeur1@gouv.fr
3 instructeur2@gouv.fr