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:
commit
58ec1b1688
7 changed files with 48 additions and 15 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -55,6 +55,7 @@ fr:
|
|||
download_exemple: Télécharger l’exemple de fichier CSV
|
||||
import_file: Importer le fichier
|
||||
import_file_procedure_not_published: L’import d’instructeurs 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:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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([])
|
||||
|
|
Loading…
Reference in a new issue