feat(groupe instructeur mailer): add emailing to added instructeurs
This commit is contained in:
parent
7c86df9d35
commit
343cb5fce6
10 changed files with 90 additions and 12 deletions
|
@ -130,6 +130,10 @@ module Administrateurs
|
|||
else
|
||||
"Les instructeurs ont bien été affectés à la démarche"
|
||||
end
|
||||
|
||||
GroupeInstructeurMailer
|
||||
.notify_added_instructeurs(groupe_instructeur, instructeurs, current_administrateur.email)
|
||||
.deliver_later
|
||||
end
|
||||
|
||||
if procedure.routing_enabled?
|
||||
|
|
|
@ -22,6 +22,10 @@ module Instructeurs
|
|||
else
|
||||
groupe_instructeur.add(instructeur)
|
||||
flash[:notice] = "L’instructeur « #{instructeur_email} » a été affecté au groupe."
|
||||
|
||||
GroupeInstructeurMailer
|
||||
.notify_added_instructeurs(groupe_instructeur, [instructeur], current_user.email)
|
||||
.deliver_later
|
||||
end
|
||||
|
||||
redirect_to instructeur_groupe_path(procedure, groupe_instructeur)
|
||||
|
|
|
@ -17,11 +17,25 @@ class GroupeInstructeurMailer < ApplicationMailer
|
|||
@current_instructeur_email = current_instructeur_email
|
||||
@still_assigned_to_procedure = removed_instructeur.in?(group.procedure.instructeurs)
|
||||
subject = if @still_assigned_to_procedure
|
||||
"Vous avez été retiré du groupe \"#{group.label}\" de la démarche \"#{group.procedure.libelle}\""
|
||||
"Vous avez été retiré(e) du groupe \"#{group.label}\" de la démarche \"#{group.procedure.libelle}\""
|
||||
else
|
||||
"Vous avez été désaffecté de la démarche \"#{group.procedure.libelle}\""
|
||||
"Vous avez été désaffecté(e) de la démarche \"#{group.procedure.libelle}\""
|
||||
end
|
||||
|
||||
mail(to: removed_instructeur.email, subject: subject)
|
||||
end
|
||||
|
||||
def notify_added_instructeurs(group, added_instructeurs, current_instructeur_email)
|
||||
added_instructeur_emails = added_instructeurs.map(&:email)
|
||||
@group = group
|
||||
@current_instructeur_email = current_instructeur_email
|
||||
|
||||
subject = if group.procedure.groupe_instructeurs.many?
|
||||
"Vous avez été ajouté(e) au groupe \"#{group.label}\" de la démarche \"#{group.procedure.libelle}\""
|
||||
else
|
||||
"Vous avez été affecté(e) à la démarche \"#{group.procedure.libelle}\""
|
||||
end
|
||||
|
||||
mail(bcc: added_instructeur_emails, subject: subject)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
%p
|
||||
Bonjour,
|
||||
|
||||
%p
|
||||
- number_of_groups = @group.procedure.groupe_instructeurs.many? ? 'many_groups' : 'one_group'
|
||||
= t("administrateurs.groupe_instructeurs.notify_added_instructeurs.#{number_of_groups}.email_body", groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle)
|
||||
|
||||
= render partial: "layouts/mailers/signature"
|
|
@ -16,9 +16,6 @@ en:
|
|||
assignment:
|
||||
one: "The instructor %{emails} was assigned to the group « %{groupe} »."
|
||||
other: "The instructors %{emails} were assigned to the group « %{groupe} »."
|
||||
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} »."
|
||||
notify_group_when_instructeurs_removed:
|
||||
email_body:
|
||||
one: "The instructor %{emails} was removed from the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
|
||||
|
@ -28,6 +25,11 @@ en:
|
|||
email_body: "You were unassigned from the procedure « %{procedure} » by « %{email} »."
|
||||
assigned:
|
||||
email_body: "You were removed from the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
|
||||
notify_added_instructeurs:
|
||||
one_group:
|
||||
email_body: "You were assigned to the procedure « %{procedure} » by « %{email} »."
|
||||
many_groups:
|
||||
email_body: "You were assigned to the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »."
|
||||
reaffecter_dossiers:
|
||||
existing_groupe:
|
||||
one: "%{count} group exist"
|
||||
|
|
|
@ -22,9 +22,6 @@ fr:
|
|||
assignment:
|
||||
one: "L’instructeur %{emails} a été affecté au groupe « %{groupe} »."
|
||||
other: "Les instructeurs %{emails} ont été affectés au groupe « %{groupe} »."
|
||||
email_body:
|
||||
one: "L’instructeur %{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} »."
|
||||
notify_group_when_instructeurs_removed:
|
||||
email_body:
|
||||
one: "L’instructeur %{emails} a été retiré du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
|
||||
|
@ -34,6 +31,11 @@ fr:
|
|||
email_body: "Vous avez été retiré du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
|
||||
unassigned:
|
||||
email_body: "Vous avez été désaffecté de la démarche « %{procedure} » par « %{email} »."
|
||||
notify_added_instructeurs:
|
||||
one_group:
|
||||
email_body: "Vous avez été affecté à la démarche « %{procedure} » par « %{email} »."
|
||||
many_groups:
|
||||
email_body: "Vous avez été ajouté au groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »."
|
||||
reaffecter_dossiers:
|
||||
existing_groupe:
|
||||
one: "%{count} groupe existe"
|
||||
|
|
|
@ -268,11 +268,22 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
|
|||
|
||||
context 'of a news instructeurs' do
|
||||
let(:new_instructeur_emails) { ['new_i1@mail.com', 'new_i2@mail.com'] }
|
||||
before { do_request }
|
||||
before do
|
||||
allow(GroupeInstructeurMailer).to receive(:notify_added_instructeurs)
|
||||
.and_return(double(deliver_later: true))
|
||||
do_request
|
||||
end
|
||||
it { expect(gi_1_2.instructeurs.pluck(:email)).to include(*new_instructeur_emails) }
|
||||
it { expect(flash.notice).to be_present }
|
||||
it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_2)) }
|
||||
it { expect(procedure.routing_enabled?).to be_truthy }
|
||||
it "calls GroupeInstructeurMailer with the right params" do
|
||||
expect(GroupeInstructeurMailer).to have_received(:notify_added_instructeurs).with(
|
||||
gi_1_2,
|
||||
gi_1_2.instructeurs.last(2),
|
||||
admin.email
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
context 'of an instructeur already in the group' do
|
||||
|
|
|
@ -39,7 +39,7 @@ RSpec.describe GroupeInstructeurMailer, type: :mailer do
|
|||
before { groupe_instructeur.remove(instructeur_to_remove) }
|
||||
|
||||
context 'when instructeur is fully removed form procedure' do
|
||||
it { expect(subject.body).to include('Vous avez été désaffecté de la démarche') }
|
||||
it { expect(subject.body).to include('Vous avez été désaffecté(e) de la démarche') }
|
||||
it { expect(subject.to).to include('int3@g') }
|
||||
it { expect(subject.to).not_to include('int1@g', 'int2@g') }
|
||||
end
|
||||
|
@ -51,9 +51,34 @@ RSpec.describe GroupeInstructeurMailer, type: :mailer do
|
|||
gi2
|
||||
end
|
||||
|
||||
it { expect(subject.body).to include('Vous avez été retiré du groupe « gi1 » par « toto@email.com »') }
|
||||
it { expect(subject.body).to include('Vous avez été retiré(e) du groupe « gi1 » par « toto@email.com »') }
|
||||
it { expect(subject.to).to include('int3@g') }
|
||||
it { expect(subject.to).not_to include('int1@g', 'int2@g') }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#notify_added_instructeurs' do
|
||||
let(:procedure) { create(:procedure) }
|
||||
|
||||
let(:instructeurs_to_add) { [create(:instructeur, email: 'int3@g'), create(:instructeur, email: 'int4@g')] }
|
||||
|
||||
let(:current_instructeur_email) { 'toto@email.com' }
|
||||
|
||||
subject { described_class.notify_added_instructeurs(procedure.defaut_groupe_instructeur, instructeurs_to_add, current_instructeur_email) }
|
||||
|
||||
before { instructeurs_to_add.each { procedure.defaut_groupe_instructeur.add(_1) } }
|
||||
|
||||
context 'when there is only one group on procedure' do
|
||||
it { expect(subject.body).to include('Vous avez été affecté(e) à la démarche') }
|
||||
it { expect(subject.bcc).to match_array(['int3@g', 'int4@g']) }
|
||||
end
|
||||
|
||||
context 'when there are many groups on procedure' do
|
||||
let!(:groupe_instructeur_2) do
|
||||
GroupeInstructeur.create(label: 'gi2', procedure: procedure)
|
||||
end
|
||||
it { expect(subject.body).to include('Vous avez été ajouté(e) au groupe') }
|
||||
it { expect(subject.bcc).to match_array(['int3@g', 'int4@g']) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -14,4 +14,12 @@ class GroupeInstructeurMailerPreview < ActionMailer::Preview
|
|||
instructeur = Instructeur.last
|
||||
GroupeInstructeurMailer.notify_removed_instructeur(groupe, instructeur, current_instructeur_email)
|
||||
end
|
||||
|
||||
def notify_added_instructeurs
|
||||
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.notify_added_instructeurs(groupe, instructeurs, current_instructeur_email)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -16,7 +16,7 @@ describe 'As an instructeur', js: true do
|
|||
end
|
||||
|
||||
scenario 'I can register' do
|
||||
confirmation_email = open_email(instructeur_email)
|
||||
confirmation_email = emails_sent_to(instructeur_email).first
|
||||
token_params = confirmation_email.body.match(/token=[^"]+/)
|
||||
|
||||
visit "users/activate?#{token_params}"
|
||||
|
|
Loading…
Reference in a new issue