feat(groupe instructeurs import): notify added instructeurs

This commit is contained in:
Eric Leroy-Terquem 2023-02-22 18:05:20 +01:00
parent a6e01d98ea
commit 4ea1d7d33b
4 changed files with 24 additions and 9 deletions

View file

@ -217,8 +217,15 @@ module Administrateurs
if groupes_emails_has_keys.blank? 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")}" flash[:alert] = "Importation impossible, veuillez importer un csv #{view_context.link_to('suivant ce modèle', "/csv/#{I18n.locale}/import-groupe-test.csv")}"
else else
result = InstructeursImportService.import_groupes(procedure, groupes_emails) added_instructeurs_by_group, invalid_emails = InstructeursImportService.import_groupes(procedure, groupes_emails)
flash_message_for_import(result)
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 end
elsif params[:instructeurs_csv_file] elsif params[:instructeurs_csv_file]

View file

@ -29,12 +29,15 @@ class InstructeursImportService
.map { [_1, emails_in_groupe[_1.label]] } .map { [_1, emails_in_groupe[_1.label]] }
.to_h .to_h
added_instructeurs_by_group = []
target_groupes.each do |groupe_instructeur, emails| 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 errors << invalid_emails
end end
errors.flatten [added_instructeurs_by_group, errors.flatten]
end end
def self.import_instructeurs(procedure, emails) def self.import_instructeurs(procedure, emails)

View file

@ -428,11 +428,16 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
context 'when the content of csv contains special characters' 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') } 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(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 be_present }
it { expect(flash.notice).to eq("La liste des instructeurs a été importée avec succès") } 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 end
context 'when the csv file length is more than 1 mo' do context 'when the csv file length is more than 1 mo' do

View file

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