Merge pull request #8681 from E-L-T/notify-added-instructeurs-from-import

feat(instructeurs import): notify added instructeurs from import
This commit is contained in:
Eric Leroy-Terquem 2023-02-23 10:12:20 +00:00 committed by GitHub
commit 58ec1b1688
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 48 additions and 15 deletions

View file

@ -217,8 +217,15 @@ module Administrateurs
if groupes_emails_has_keys.blank?
flash[:alert] = "Importation impossible, veuillez importer un csv #{view_context.link_to('suivant ce modèle', "/csv/#{I18n.locale}/import-groupe-test.csv")}"
else
result = InstructeursImportService.import_groupes(procedure, groupes_emails)
flash_message_for_import(result)
added_instructeurs_by_group, invalid_emails = InstructeursImportService.import_groupes(procedure, groupes_emails)
added_instructeurs_by_group.each do |groupe, added_instructeurs|
GroupeInstructeurMailer
.notify_added_instructeurs(groupe, added_instructeurs, current_administrateur.email)
.deliver_later
end
flash_message_for_import(invalid_emails)
end
elsif params[:instructeurs_csv_file]
@ -230,8 +237,13 @@ module Administrateurs
if instructors_emails_has_key.blank?
flash[:alert] = "Importation impossible, veuillez importer un csv #{view_context.link_to('suivant ce modèle', "/csv/import-instructeurs-test.csv")}"
else
result = InstructeursImportService.import_instructeurs(procedure, instructors_emails)
flash_message_for_import(result)
added_instructeurs, invalid_emails = InstructeursImportService.import_instructeurs(procedure, instructors_emails)
GroupeInstructeurMailer
.notify_added_instructeurs(groupe_instructeur, added_instructeurs, current_administrateur.email)
.deliver_later
flash_message_for_import(invalid_emails)
end
end
redirect_to admin_procedure_groupe_instructeurs_path(procedure)

View file

@ -29,12 +29,15 @@ class InstructeursImportService
.map { [_1, emails_in_groupe[_1.label]] }
.to_h
added_instructeurs_by_group = []
target_groupes.each do |groupe_instructeur, emails|
_, invalid_emails = groupe_instructeur.add_instructeurs(emails:)
added_instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails:)
added_instructeurs_by_group << [groupe_instructeur, added_instructeurs]
errors << invalid_emails
end
errors.flatten
[added_instructeurs_by_group, errors.flatten]
end
def self.import_instructeurs(procedure, emails)
@ -45,8 +48,8 @@ class InstructeursImportService
groupe_instructeur = procedure.defaut_groupe_instructeur
_, invalid_emails = groupe_instructeur.add_instructeurs(emails: instructeurs_emails)
instructeurs, invalid_emails = groupe_instructeur.add_instructeurs(emails: instructeurs_emails)
invalid_emails
[instructeurs, invalid_emails]
end
end

View file

@ -35,7 +35,7 @@
%p.mt-2.mb-2= link_to t('.csv_import.download_exemple'), sample_file_path
- csv_params = procedure.routing_enabled? ? :group_csv_file : :instructeurs_csv_file
= file_field_tag csv_params, required: true, accept: 'text/csv', size: "1"
= submit_tag t('.csv_import.import_file'), class: 'button primary send', data: { disable_with: "Envoi..." }
= submit_tag t('.csv_import.import_file'), class: 'button primary send', data: { disable_with: "Envoi...", confirm: t('.csv_import.import_file_alert') }
- else
%p.mt-4.form.font-weight-bold.mb-2.text-lg
= t('.csv_import.title')

View file

@ -49,6 +49,7 @@ en:
download_exemple: Download sample CSV file
import_file: Import file
import_file_procedure_not_published: The import of instructors by CSV file is available once the process has been published
import_file_alert: Instructors added to the procedure will receive an email. Are you sure you want to continue ?"
set_up: set up
button:
add_group: Add group

View file

@ -55,6 +55,7 @@ fr:
download_exemple: Télécharger lexemple de fichier CSV
import_file: Importer le fichier
import_file_procedure_not_published: Limport dinstructeurs par fichier CSV est disponible une fois la démarche publiée
import_file_alert: Tous les instructeurs ajoutés à la procédure vont être notifiés par email. Voulez-vous continuer ?
view: voir
set_up: paramétrer
button:

View file

@ -428,11 +428,16 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
context 'when the content of csv contains special characters' do
let(:csv_file) { fixture_file_upload('spec/fixtures/files/groupe_avec_caracteres_speciaux.csv', 'text/csv') }
before { subject }
before do
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs)
.and_return(double(deliver_later: true))
subject
end
it { expect(procedure.groupe_instructeurs.pluck(:label)).to match_array(["Auvergne-Rhône-Alpes", "Vendée", "défaut"]) }
it { expect(flash.notice).to be_present }
it { expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès") }
it { expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).twice }
end
context 'when the csv file length is more than 1 mo' do
@ -486,12 +491,23 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
context 'when the csv file is less than 1 mo and content type text/csv' do
let(:csv_file) { fixture_file_upload('spec/fixtures/files/instructeurs-file.csv', 'text/csv') }
before { subject }
before do
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs)
.and_return(double(deliver_later: true))
subject
end
it { expect(response.status).to eq(302) }
it { expect(procedure_non_routee.instructeurs.pluck(:email)).to match_array(["kara@beta-gouv.fr", "philippe@mail.com", "lisa@gouv.fr"]) }
it { expect(flash.alert).to be_present }
it { expect(flash.alert).to eq("Import terminé. Cependant les emails suivants ne sont pas pris en compte: eric") }
it "calls GroupeInstructeurMailer" do
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).with(
procedure_non_routee.defaut_groupe_instructeur,
any_args,
admin.email
)
end
end
context 'when the csv file has more than one column' do

View file

@ -21,7 +21,7 @@ describe InstructeursImportService do
end
it 'imports groupes' do
errors = subject
_, errors = subject
expect(procedure_groupes.keys).to contain_exactly("Auvergne Rhone-Alpes", "Occitanie", "défaut")
expect(procedure_groupes["Auvergne Rhone-Alpes"]).to contain_exactly("john@lennon.fr")
@ -63,7 +63,7 @@ describe InstructeursImportService do
end
it 'ignores or corrects' do
errors = subject
_, errors = subject
expect(procedure_groupes.keys).to contain_exactly("Occitanie", "défaut")
expect(procedure_groupes["Occitanie"]).to contain_exactly("paul@mccartney.uk", "ringo@starr.uk")
@ -117,7 +117,7 @@ describe InstructeursImportService do
end
it 'ignores instructeur' do
errors = subject
_, errors = subject
expect(procedure_groupes.keys).to contain_exactly("défaut")
expect(procedure_groupes["défaut"]).to be_empty
@ -136,7 +136,7 @@ describe InstructeursImportService do
let(:emails) { [{ "email" => "john@lennon.fr" }, { "email" => "paul@mccartney.uk" }, { "email" => "ringo@starr.uk" }] }
it 'imports instructeurs' do
errors = subject
_, errors = subject
expect(procedure_non_routee.defaut_groupe_instructeur.instructeurs.pluck(:email)).to contain_exactly("john@lennon.fr", "paul@mccartney.uk", "ringo@starr.uk")
expect(errors).to match_array([])