feat(groupe instructeur mailer): add emailing to removed instructeurs

This commit is contained in:
Eric Leroy-Terquem 2023-02-14 11:17:52 +01:00
parent de11d97df9
commit cbf072961c
11 changed files with 75 additions and 13 deletions

View file

@ -147,6 +147,10 @@ module Administrateurs
if groupe_instructeur.remove(instructeur)
flash[:notice] = if procedure.routing_enabled?
GroupeInstructeurMailer
.remove_instructeur(groupe_instructeur, [instructeur], current_administrateur.email)
.deliver_later
GroupeInstructeurMailer
.remove_instructeurs(groupe_instructeur, [instructeur], current_administrateur.email)
.deliver_later

View file

@ -34,6 +34,10 @@ module Instructeurs
instructeur = Instructeur.find(instructeur_id)
if groupe_instructeur.remove(instructeur)
flash[:notice] = "Linstructeur « #{instructeur.email} » a été retiré du groupe."
GroupeInstructeurMailer
.remove_instructeur(groupe_instructeur, [instructeur], current_administrateur.email)
.deliver_later
GroupeInstructeurMailer
.remove_instructeurs(groupe_instructeur, [instructeur], current_user.email)
.deliver_later

View file

@ -16,6 +16,10 @@ module Mutations
groupe_instructeur.reload
if groupe_instructeur.procedure.routing_enabled? && instructeurs.present?
GroupeInstructeurMailer
.remove_instructeur(groupe_instructeur, instructeurs, current_administrateur.email)
.deliver_later
GroupeInstructeurMailer
.remove_instructeurs(groupe_instructeur, instructeurs, current_administrateur.email)
.deliver_later

View file

@ -11,4 +11,14 @@ class GroupeInstructeurMailer < ApplicationMailer
emails = @group.instructeurs.map(&:email)
mail(bcc: emails, subject: subject)
end
def remove_instructeur(group, removed_instructeurs, current_instructeur_email)
removed_instructeur_emails = removed_instructeurs.map(&:email)
@group = group
@current_instructeur_email = current_instructeur_email
subject = "Retrait du groupe \"#{group.label}\""
mail(bcc: removed_instructeur_emails, subject: subject)
end
end

View file

@ -2,10 +2,6 @@
Bonjour,
%p
= t('administrateurs.groupe_instructeurs.remove_instructeur.email_body', count: 1, emails: @email, groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle)
%p
Cliquez sur le lien ci-dessous pour voir la liste des instructeurs de ce groupe :
= link_to(@group.label, admin_procedure_groupe_instructeur_url(@group.procedure, @group))
= t('administrateurs.groupe_instructeurs.remove_instructeur.email_body', groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle)
= render partial: "layouts/mailers/signature"

View file

@ -2,7 +2,7 @@
Bonjour,
%p
= t('administrateurs.groupe_instructeurs.remove_instructeur.email_body', count: @removed_instructeur_emails.size, emails: @removed_instructeur_emails.join(', '), groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle)
= t('administrateurs.groupe_instructeurs.remove_instructeurs.email_body', count: @removed_instructeur_emails.size, emails: @removed_instructeur_emails.join(', '), groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle)
%p
Cliquez sur le lien ci-dessous pour voir la liste des instructeurs de ce groupe :

View file

@ -19,10 +19,12 @@ en:
email_body:
one: "The instructor %{emails} was assigned to the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
other: "The instructors %{emails} were assigned to the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
remove_instructeur:
remove_instructeurs:
email_body:
one: "The instructor %{emails} was removed from the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
other: "The instructors %{emails} were removed from the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
remove_instructeur:
email_body: "You were removed from the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
reaffecter_dossiers:
existing_groupe:
one: "%{count} group exist"

View file

@ -25,10 +25,12 @@ fr:
email_body:
one: "Linstructeur %{emails} a été affecté au groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
other: "Les instructeurs %{emails} ont été affectés au groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
remove_instructeur:
remove_instructeurs:
email_body:
one: "Linstructeur %{emails} a été retiré du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
other: "Les instructeurs %{emails} ont été retirés du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
remove_instructeur:
email_body: "Vous avez été retiré du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
reaffecter_dossiers:
existing_groupe:
one: "%{count} groupe existe"

View file

@ -320,11 +320,22 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
end
context 'when there are many instructeurs' do
before { remove_instructeur(admin.instructeur) }
before do
allow(GroupeInstructeurMailer).to receive(:remove_instructeur)
.and_return(double(deliver_later: true))
remove_instructeur(admin.instructeur)
end
it { expect(gi_1_1.instructeurs).to include(instructeur) }
it { expect(gi_1_1.reload.instructeurs.count).to eq(1) }
it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1)) }
it "calls GroupeInstructeurMailer with the right groupe and instructeur" do
expect(GroupeInstructeurMailer).to have_received(:remove_instructeur).with(
gi_1_1,
[admin.instructeur],
admin.email
)
end
end
context 'when there is only one instructeur' do

View file

@ -7,15 +7,36 @@ RSpec.describe GroupeInstructeurMailer, type: :mailer do
gi.instructeurs << instructeurs_to_remove
gi
end
let(:instructeur_1) { create(:instructeur, email: 'int3@g') }
let(:instructeur_2) { create(:instructeur, email: 'int4@g') }
let(:instructeur_3) { create(:instructeur, email: 'int3@g') }
let(:instructeur_4) { create(:instructeur, email: 'int4@g') }
let(:instructeurs_to_remove) { [instructeur_1, instructeur_2] }
let(:instructeurs_to_remove) { [instructeur_3, instructeur_4] }
let(:current_instructeur_email) { 'toto@email.com' }
subject { described_class.remove_instructeurs(groupe_instructeur, instructeurs_to_remove, current_instructeur_email) }
it { expect(subject.body).to include('Les instructeurs int3@g, int4@g ont été retirés du groupe') }
it { expect(subject.bcc).to match_array(['int1@g', 'int2@g', 'int3@g', 'int4@g']) }
it { expect(subject.bcc).to include('int1@g', 'int2@g') }
end
describe '#remove_instructeur' do
let(:groupe_instructeur) do
gi = GroupeInstructeur.create(label: 'gi1', procedure: create(:procedure))
gi.instructeurs << create(:instructeur, email: 'int1@g')
gi.instructeurs << create(:instructeur, email: 'int2@g')
gi.instructeurs << instructeurs_to_remove
gi
end
let(:instructeur_3) { create(:instructeur, email: 'int3@g') }
let(:instructeur_4) { create(:instructeur, email: 'int4@g') }
let(:instructeurs_to_remove) { [instructeur_3, instructeur_4] }
let(:current_instructeur_email) { 'toto@email.com' }
subject { described_class.remove_instructeur(groupe_instructeur, instructeurs_to_remove, current_instructeur_email) }
it { expect(subject.body).to include('ous avez été retiré du groupe « gi1 » par « toto@email.com »') }
it { expect(subject.bcc).to match_array(['int3@g', 'int4@g']) }
it { expect(subject.bcc).not_to match_array(['int1@g', 'int2@g']) }
end
end

View file

@ -6,4 +6,12 @@ class GroupeInstructeurMailerPreview < ActionMailer::Preview
instructeurs = Instructeur.limit(2)
GroupeInstructeurMailer.remove_instructeurs(groupe, instructeurs, current_instructeur_email)
end
def remove_instructeur
procedure = Procedure.new(id: 1, libelle: 'une superbe procedure')
groupe = GroupeInstructeur.new(id: 1, label: 'Val-De-Marne', procedure:)
current_instructeur_email = 'admin@dgfip.com'
instructeurs = Instructeur.limit(2)
GroupeInstructeurMailer.remove_instructeur(groupe, instructeurs, current_instructeur_email)
end
end