From cbf072961c7a725324c2e6cc85915ece2578140d Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Tue, 14 Feb 2023 11:17:52 +0100 Subject: [PATCH 1/4] feat(groupe instructeur mailer): add emailing to removed instructeurs --- .../groupe_instructeurs_controller.rb | 4 +++ .../groupe_instructeurs_controller.rb | 4 +++ ...oupe_instructeur_supprimer_instructeurs.rb | 4 +++ app/mailers/groupe_instructeur_mailer.rb | 10 +++++++ .../remove_instructeur.html.haml | 6 +--- .../remove_instructeurs.html.haml | 2 +- .../groupe_instructeurs/en.yml | 4 ++- .../groupe_instructeurs/fr.yml | 4 ++- .../groupe_instructeurs_controller_spec.rb | 13 ++++++++- .../mailers/groupe_instructeur_mailer_spec.rb | 29 ++++++++++++++++--- .../groupe_instructeur_mailer_preview.rb | 8 +++++ 11 files changed, 75 insertions(+), 13 deletions(-) diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 63390b1f1..35e89221f 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -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 diff --git a/app/controllers/instructeurs/groupe_instructeurs_controller.rb b/app/controllers/instructeurs/groupe_instructeurs_controller.rb index 6eb25e131..20519c8af 100644 --- a/app/controllers/instructeurs/groupe_instructeurs_controller.rb +++ b/app/controllers/instructeurs/groupe_instructeurs_controller.rb @@ -34,6 +34,10 @@ module Instructeurs instructeur = Instructeur.find(instructeur_id) if groupe_instructeur.remove(instructeur) flash[:notice] = "L’instructeur « #{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 diff --git a/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb b/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb index 864f0c3c3..f8c14542a 100644 --- a/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb +++ b/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb @@ -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 diff --git a/app/mailers/groupe_instructeur_mailer.rb b/app/mailers/groupe_instructeur_mailer.rb index cb2865bb8..9674faae2 100644 --- a/app/mailers/groupe_instructeur_mailer.rb +++ b/app/mailers/groupe_instructeur_mailer.rb @@ -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 diff --git a/app/views/groupe_instructeur_mailer/remove_instructeur.html.haml b/app/views/groupe_instructeur_mailer/remove_instructeur.html.haml index 9e7770919..d541c0fd9 100644 --- a/app/views/groupe_instructeur_mailer/remove_instructeur.html.haml +++ b/app/views/groupe_instructeur_mailer/remove_instructeur.html.haml @@ -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" diff --git a/app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml b/app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml index d5a73e165..1d3b218da 100644 --- a/app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml +++ b/app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml @@ -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 : diff --git a/config/locales/views/administrateurs/groupe_instructeurs/en.yml b/config/locales/views/administrateurs/groupe_instructeurs/en.yml index 208cd053f..7564938d2 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/en.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/en.yml @@ -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" diff --git a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml index dc26ca649..f5f978ecf 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml @@ -25,10 +25,12 @@ fr: 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} »." - remove_instructeur: + remove_instructeurs: email_body: one: "L’instructeur %{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" diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index 90e3a193f..3835696d2 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -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 diff --git a/spec/mailers/groupe_instructeur_mailer_spec.rb b/spec/mailers/groupe_instructeur_mailer_spec.rb index 9157f03ef..94b8b06ff 100644 --- a/spec/mailers/groupe_instructeur_mailer_spec.rb +++ b/spec/mailers/groupe_instructeur_mailer_spec.rb @@ -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 diff --git a/spec/mailers/previews/groupe_instructeur_mailer_preview.rb b/spec/mailers/previews/groupe_instructeur_mailer_preview.rb index 1b6c006a1..5a5f7ca30 100644 --- a/spec/mailers/previews/groupe_instructeur_mailer_preview.rb +++ b/spec/mailers/previews/groupe_instructeur_mailer_preview.rb @@ -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 From 5be58c8223c7398fb62466b1b57f9547d332581b Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Tue, 14 Feb 2023 15:19:58 +0100 Subject: [PATCH 2/4] refactor(groupe instructeur mailer): rename mailer methods --- .../administrateurs/groupe_instructeurs_controller.rb | 4 ++-- .../instructeurs/groupe_instructeurs_controller.rb | 4 ++-- .../groupe_instructeur_supprimer_instructeurs.rb | 4 ++-- app/mailers/groupe_instructeur_mailer.rb | 6 +++--- .../notify_group_when_instructeurs_removed.html.haml | 11 +++++++++++ .../notify_removed_instructeurs.html.haml | 7 +++++++ .../remove_instructeur.html.haml | 7 ------- .../remove_instructeurs.html.haml | 11 ----------- .../views/administrateurs/groupe_instructeurs/en.yml | 4 ++-- .../views/administrateurs/groupe_instructeurs/fr.yml | 4 ++-- .../groupe_instructeurs_controller_spec.rb | 4 ++-- spec/mailers/groupe_instructeur_mailer_spec.rb | 8 ++++---- .../previews/groupe_instructeur_mailer_preview.rb | 2 +- 13 files changed, 38 insertions(+), 38 deletions(-) create mode 100644 app/views/groupe_instructeur_mailer/notify_group_when_instructeurs_removed.html.haml create mode 100644 app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml delete mode 100644 app/views/groupe_instructeur_mailer/remove_instructeur.html.haml delete mode 100644 app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 35e89221f..1842174d8 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -148,11 +148,11 @@ module Administrateurs if groupe_instructeur.remove(instructeur) flash[:notice] = if procedure.routing_enabled? GroupeInstructeurMailer - .remove_instructeur(groupe_instructeur, [instructeur], current_administrateur.email) + .notify_removed_instructeurs(groupe_instructeur, [instructeur], current_administrateur.email) .deliver_later GroupeInstructeurMailer - .remove_instructeurs(groupe_instructeur, [instructeur], current_administrateur.email) + .notify_group_when_instructeurs_removed(groupe_instructeur, [instructeur], current_administrateur.email) .deliver_later "L’instructeur « #{instructeur.email} » a été retiré du groupe." diff --git a/app/controllers/instructeurs/groupe_instructeurs_controller.rb b/app/controllers/instructeurs/groupe_instructeurs_controller.rb index 20519c8af..cfa180c22 100644 --- a/app/controllers/instructeurs/groupe_instructeurs_controller.rb +++ b/app/controllers/instructeurs/groupe_instructeurs_controller.rb @@ -35,11 +35,11 @@ module Instructeurs if groupe_instructeur.remove(instructeur) flash[:notice] = "L’instructeur « #{instructeur.email} » a été retiré du groupe." GroupeInstructeurMailer - .remove_instructeur(groupe_instructeur, [instructeur], current_administrateur.email) + .notify_removed_instructeurs(groupe_instructeur, [instructeur], current_user.email) .deliver_later GroupeInstructeurMailer - .remove_instructeurs(groupe_instructeur, [instructeur], current_user.email) + .notify_group_when_instructeurs_removed(groupe_instructeur, [instructeur], current_user.email) .deliver_later else flash[:alert] = "L’instructeur « #{instructeur.email} » n’est pas dans le groupe." diff --git a/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb b/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb index f8c14542a..ba41a870b 100644 --- a/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb +++ b/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb @@ -17,11 +17,11 @@ module Mutations if groupe_instructeur.procedure.routing_enabled? && instructeurs.present? GroupeInstructeurMailer - .remove_instructeur(groupe_instructeur, instructeurs, current_administrateur.email) + .notify_removed_instructeurs(groupe_instructeur, instructeurs, current_administrateur.email) .deliver_later GroupeInstructeurMailer - .remove_instructeurs(groupe_instructeur, instructeurs, current_administrateur.email) + .notify_group_when_instructeurs_removed(groupe_instructeur, instructeurs, current_administrateur.email) .deliver_later end diff --git a/app/mailers/groupe_instructeur_mailer.rb b/app/mailers/groupe_instructeur_mailer.rb index 9674faae2..821b41c03 100644 --- a/app/mailers/groupe_instructeur_mailer.rb +++ b/app/mailers/groupe_instructeur_mailer.rb @@ -1,7 +1,7 @@ class GroupeInstructeurMailer < ApplicationMailer layout 'mailers/layout' - def remove_instructeurs(group, removed_instructeurs, current_instructeur_email) + def notify_group_when_instructeurs_removed(group, removed_instructeurs, current_instructeur_email) @removed_instructeur_emails = removed_instructeurs.map(&:email) @group = group @current_instructeur_email = current_instructeur_email @@ -12,12 +12,12 @@ class GroupeInstructeurMailer < ApplicationMailer mail(bcc: emails, subject: subject) end - def remove_instructeur(group, removed_instructeurs, current_instructeur_email) + def notify_removed_instructeurs(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}\"" + subject = "Vous avez été retiré du groupe \"#{group.label}\" de la démarche \"#{group.procedure.libelle}\"" mail(bcc: removed_instructeur_emails, subject: subject) end diff --git a/app/views/groupe_instructeur_mailer/notify_group_when_instructeurs_removed.html.haml b/app/views/groupe_instructeur_mailer/notify_group_when_instructeurs_removed.html.haml new file mode 100644 index 000000000..50ba415ef --- /dev/null +++ b/app/views/groupe_instructeur_mailer/notify_group_when_instructeurs_removed.html.haml @@ -0,0 +1,11 @@ +%p + Bonjour, + +%p + = t('administrateurs.groupe_instructeurs.notify_group_when_instructeurs_removed.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 : + = link_to(@group.label, admin_procedure_groupe_instructeur_url(@group.procedure, @group)) + += render partial: "layouts/mailers/signature" diff --git a/app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml b/app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml new file mode 100644 index 000000000..0ed0e9e49 --- /dev/null +++ b/app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml @@ -0,0 +1,7 @@ +%p + Bonjour, + +%p + = t('administrateurs.groupe_instructeurs.notify_removed_instructeurs.email_body', groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle) + += render partial: "layouts/mailers/signature" diff --git a/app/views/groupe_instructeur_mailer/remove_instructeur.html.haml b/app/views/groupe_instructeur_mailer/remove_instructeur.html.haml deleted file mode 100644 index d541c0fd9..000000000 --- a/app/views/groupe_instructeur_mailer/remove_instructeur.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -%p - Bonjour, - -%p - = t('administrateurs.groupe_instructeurs.remove_instructeur.email_body', groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle) - -= render partial: "layouts/mailers/signature" diff --git a/app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml b/app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml deleted file mode 100644 index 1d3b218da..000000000 --- a/app/views/groupe_instructeur_mailer/remove_instructeurs.html.haml +++ /dev/null @@ -1,11 +0,0 @@ -%p - Bonjour, - -%p - = 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 : - = link_to(@group.label, admin_procedure_groupe_instructeur_url(@group.procedure, @group)) - -= render partial: "layouts/mailers/signature" diff --git a/config/locales/views/administrateurs/groupe_instructeurs/en.yml b/config/locales/views/administrateurs/groupe_instructeurs/en.yml index 7564938d2..49974b871 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/en.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/en.yml @@ -19,11 +19,11 @@ 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_instructeurs: + notify_group_when_instructeurs_removed: 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: + notify_removed_instructeurs: email_body: "You were removed from the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »." reaffecter_dossiers: existing_groupe: diff --git a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml index f5f978ecf..07fa50d4e 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml @@ -25,11 +25,11 @@ fr: 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} »." - remove_instructeurs: + 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} »." other: "Les instructeurs %{emails} ont été retirés du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »." - remove_instructeur: + notify_removed_instructeurs: email_body: "Vous avez été retiré du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »." reaffecter_dossiers: existing_groupe: diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index 3835696d2..6a585d51f 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -321,7 +321,7 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do context 'when there are many instructeurs' do before do - allow(GroupeInstructeurMailer).to receive(:remove_instructeur) + allow(GroupeInstructeurMailer).to receive(:notify_removed_instructeurs) .and_return(double(deliver_later: true)) remove_instructeur(admin.instructeur) end @@ -330,7 +330,7 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do 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( + expect(GroupeInstructeurMailer).to have_received(:notify_removed_instructeurs).with( gi_1_1, [admin.instructeur], admin.email diff --git a/spec/mailers/groupe_instructeur_mailer_spec.rb b/spec/mailers/groupe_instructeur_mailer_spec.rb index 94b8b06ff..424620b04 100644 --- a/spec/mailers/groupe_instructeur_mailer_spec.rb +++ b/spec/mailers/groupe_instructeur_mailer_spec.rb @@ -1,5 +1,5 @@ RSpec.describe GroupeInstructeurMailer, type: :mailer do - describe '#remove_instructeurs' do + describe '#notify_group_when_instructeurs_removed' do let(:groupe_instructeur) do gi = GroupeInstructeur.create(label: 'gi1', procedure: create(:procedure)) gi.instructeurs << create(:instructeur, email: 'int1@g') @@ -13,13 +13,13 @@ RSpec.describe GroupeInstructeurMailer, type: :mailer do 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) } + subject { described_class.notify_group_when_instructeurs_removed(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 include('int1@g', 'int2@g') } end - describe '#remove_instructeur' do + describe '#notify_removed_instructeurs' do let(:groupe_instructeur) do gi = GroupeInstructeur.create(label: 'gi1', procedure: create(:procedure)) gi.instructeurs << create(:instructeur, email: 'int1@g') @@ -33,7 +33,7 @@ RSpec.describe GroupeInstructeurMailer, type: :mailer do 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) } + subject { described_class.notify_removed_instructeurs(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']) } diff --git a/spec/mailers/previews/groupe_instructeur_mailer_preview.rb b/spec/mailers/previews/groupe_instructeur_mailer_preview.rb index 5a5f7ca30..a099a206a 100644 --- a/spec/mailers/previews/groupe_instructeur_mailer_preview.rb +++ b/spec/mailers/previews/groupe_instructeur_mailer_preview.rb @@ -4,7 +4,7 @@ class GroupeInstructeurMailerPreview < ActionMailer::Preview groupe = GroupeInstructeur.new(id: 1, label: 'Val-De-Marne', procedure:) current_instructeur_email = 'admin@dgfip.com' instructeurs = Instructeur.limit(2) - GroupeInstructeurMailer.remove_instructeurs(groupe, instructeurs, current_instructeur_email) + GroupeInstructeurMailer.notify_group_when_instructeurs_removed(groupe, instructeurs, current_instructeur_email) end def remove_instructeur From a46faf8cdf07f6a376427f5016cae12399f74919 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Wed, 15 Feb 2023 11:57:35 +0100 Subject: [PATCH 3/4] feat(groupe instructeur mailer): make two kind of notifications for removed instructeur --- .../groupe_instructeurs_controller.rb | 17 ++++---- .../groupe_instructeurs_controller.rb | 2 +- ...oupe_instructeur_supprimer_instructeurs.rb | 4 -- app/mailers/groupe_instructeur_mailer.rb | 13 ++++--- .../notify_removed_instructeur.html.haml | 8 ++++ .../notify_removed_instructeurs.html.haml | 7 ---- .../groupe_instructeurs/en.yml | 7 +++- .../groupe_instructeurs/fr.yml | 7 +++- .../groupe_instructeurs_controller_spec.rb | 6 +-- .../mailers/groupe_instructeur_mailer_spec.rb | 39 +++++++++++++------ 10 files changed, 66 insertions(+), 44 deletions(-) create mode 100644 app/views/groupe_instructeur_mailer/notify_removed_instructeur.html.haml delete mode 100644 app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 1842174d8..6ac2e3205 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -146,19 +146,18 @@ module Administrateurs instructeur = groupe_instructeur.instructeurs.find_by(id: instructeur_id) if groupe_instructeur.remove(instructeur) - flash[:notice] = if procedure.routing_enabled? - GroupeInstructeurMailer - .notify_removed_instructeurs(groupe_instructeur, [instructeur], current_administrateur.email) - .deliver_later - - GroupeInstructeurMailer - .notify_group_when_instructeurs_removed(groupe_instructeur, [instructeur], current_administrateur.email) - .deliver_later - + flash[:notice] = if instructeur.in?(procedure.instructeurs) "L’instructeur « #{instructeur.email} » a été retiré du groupe." else "L’instructeur a bien été désaffecté de la démarche" end + GroupeInstructeurMailer + .notify_removed_instructeur(groupe_instructeur, instructeur, current_administrateur.email) + .deliver_later + + GroupeInstructeurMailer + .notify_group_when_instructeurs_removed(groupe_instructeur, [instructeur], current_administrateur.email) + .deliver_later else flash[:alert] = if procedure.routing_enabled? if instructeur.present? diff --git a/app/controllers/instructeurs/groupe_instructeurs_controller.rb b/app/controllers/instructeurs/groupe_instructeurs_controller.rb index cfa180c22..631b37afc 100644 --- a/app/controllers/instructeurs/groupe_instructeurs_controller.rb +++ b/app/controllers/instructeurs/groupe_instructeurs_controller.rb @@ -35,7 +35,7 @@ module Instructeurs if groupe_instructeur.remove(instructeur) flash[:notice] = "L’instructeur « #{instructeur.email} » a été retiré du groupe." GroupeInstructeurMailer - .notify_removed_instructeurs(groupe_instructeur, [instructeur], current_user.email) + .notify_removed_instructeur(groupe_instructeur, instructeur, current_user.email) .deliver_later GroupeInstructeurMailer diff --git a/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb b/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb index ba41a870b..0c1b1617d 100644 --- a/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb +++ b/app/graphql/mutations/groupe_instructeur_supprimer_instructeurs.rb @@ -16,10 +16,6 @@ module Mutations groupe_instructeur.reload if groupe_instructeur.procedure.routing_enabled? && instructeurs.present? - GroupeInstructeurMailer - .notify_removed_instructeurs(groupe_instructeur, instructeurs, current_administrateur.email) - .deliver_later - GroupeInstructeurMailer .notify_group_when_instructeurs_removed(groupe_instructeur, instructeurs, current_administrateur.email) .deliver_later diff --git a/app/mailers/groupe_instructeur_mailer.rb b/app/mailers/groupe_instructeur_mailer.rb index 821b41c03..fa438399d 100644 --- a/app/mailers/groupe_instructeur_mailer.rb +++ b/app/mailers/groupe_instructeur_mailer.rb @@ -12,13 +12,16 @@ class GroupeInstructeurMailer < ApplicationMailer mail(bcc: emails, subject: subject) end - def notify_removed_instructeurs(group, removed_instructeurs, current_instructeur_email) - removed_instructeur_emails = removed_instructeurs.map(&:email) + def notify_removed_instructeur(group, removed_instructeur, current_instructeur_email) @group = group @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}\"" + else + "Vous avez été désaffecté de la démarche \"#{group.procedure.libelle}\"" + end - subject = "Vous avez été retiré du groupe \"#{group.label}\" de la démarche \"#{group.procedure.libelle}\"" - - mail(bcc: removed_instructeur_emails, subject: subject) + mail(to: removed_instructeur.email, subject: subject) end end diff --git a/app/views/groupe_instructeur_mailer/notify_removed_instructeur.html.haml b/app/views/groupe_instructeur_mailer/notify_removed_instructeur.html.haml new file mode 100644 index 000000000..e093dadcd --- /dev/null +++ b/app/views/groupe_instructeur_mailer/notify_removed_instructeur.html.haml @@ -0,0 +1,8 @@ +%p + Bonjour, + +%p + - assignment_state = @still_assigned_to_procedure ? 'assigned' : 'unassigned' + = t("administrateurs.groupe_instructeurs.notify_removed_instructeur.#{assignment_state}.email_body", groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle) + += render partial: "layouts/mailers/signature" diff --git a/app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml b/app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml deleted file mode 100644 index 0ed0e9e49..000000000 --- a/app/views/groupe_instructeur_mailer/notify_removed_instructeurs.html.haml +++ /dev/null @@ -1,7 +0,0 @@ -%p - Bonjour, - -%p - = t('administrateurs.groupe_instructeurs.notify_removed_instructeurs.email_body', groupe: @group.label, email: @current_instructeur_email, procedure: @group.procedure.libelle) - -= render partial: "layouts/mailers/signature" diff --git a/config/locales/views/administrateurs/groupe_instructeurs/en.yml b/config/locales/views/administrateurs/groupe_instructeurs/en.yml index 49974b871..49b54a6db 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/en.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/en.yml @@ -23,8 +23,11 @@ en: 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} »." - notify_removed_instructeurs: - email_body: "You were removed from the group « %{groupe} » by « %{email} », in charge of procedure « %{procedure} »." + notify_removed_instructeur: + unassigned: + 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} »." reaffecter_dossiers: existing_groupe: one: "%{count} group exist" diff --git a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml index 07fa50d4e..7ebd44c7d 100644 --- a/config/locales/views/administrateurs/groupe_instructeurs/fr.yml +++ b/config/locales/views/administrateurs/groupe_instructeurs/fr.yml @@ -29,8 +29,11 @@ fr: email_body: one: "L’instructeur %{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} »." - notify_removed_instructeurs: - email_body: "Vous avez été retiré du groupe « %{groupe} » par « %{email} », en charge de la démarche « %{procedure} »." + notify_removed_instructeur: + assigned: + 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} »." reaffecter_dossiers: existing_groupe: one: "%{count} groupe existe" diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index 6a585d51f..384a24756 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -321,7 +321,7 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do context 'when there are many instructeurs' do before do - allow(GroupeInstructeurMailer).to receive(:notify_removed_instructeurs) + allow(GroupeInstructeurMailer).to receive(:notify_removed_instructeur) .and_return(double(deliver_later: true)) remove_instructeur(admin.instructeur) end @@ -330,9 +330,9 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do 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(:notify_removed_instructeurs).with( + expect(GroupeInstructeurMailer).to have_received(:notify_removed_instructeur).with( gi_1_1, - [admin.instructeur], + admin.instructeur, admin.email ) end diff --git a/spec/mailers/groupe_instructeur_mailer_spec.rb b/spec/mailers/groupe_instructeur_mailer_spec.rb index 424620b04..6cf1ed75e 100644 --- a/spec/mailers/groupe_instructeur_mailer_spec.rb +++ b/spec/mailers/groupe_instructeur_mailer_spec.rb @@ -15,28 +15,45 @@ RSpec.describe GroupeInstructeurMailer, type: :mailer do subject { described_class.notify_group_when_instructeurs_removed(groupe_instructeur, instructeurs_to_remove, current_instructeur_email) } + before { instructeurs_to_remove.each { groupe_instructeur.remove(_1) } } + it { expect(subject.body).to include('Les instructeurs int3@g, int4@g ont été retirés du groupe') } - it { expect(subject.bcc).to include('int1@g', 'int2@g') } + it { expect(subject.bcc).to match_array(['int1@g', 'int2@g']) } end - describe '#notify_removed_instructeurs' do + describe '#notify_removed_instructeur' do + let(:procedure) { create(:procedure) } let(:groupe_instructeur) do - gi = GroupeInstructeur.create(label: 'gi1', procedure: create(:procedure)) + gi = GroupeInstructeur.create(label: 'gi1', procedure: procedure) gi.instructeurs << create(:instructeur, email: 'int1@g') gi.instructeurs << create(:instructeur, email: 'int2@g') - gi.instructeurs << instructeurs_to_remove + gi.instructeurs << instructeur_to_remove gi end - let(:instructeur_3) { create(:instructeur, email: 'int3@g') } - let(:instructeur_4) { create(:instructeur, email: 'int4@g') } + let(:instructeur_to_remove) { create(:instructeur, email: 'int3@g') } - let(:instructeurs_to_remove) { [instructeur_3, instructeur_4] } let(:current_instructeur_email) { 'toto@email.com' } - subject { described_class.notify_removed_instructeurs(groupe_instructeur, instructeurs_to_remove, current_instructeur_email) } + subject { described_class.notify_removed_instructeur(groupe_instructeur, instructeur_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']) } + 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.to).to include('int3@g') } + it { expect(subject.to).not_to include('int1@g', 'int2@g') } + end + + context 'when instructeur is removed from one group but still affected to procedure' do + let!(:groupe_instructeur_2) do + gi2 = GroupeInstructeur.create(label: 'gi2', procedure: procedure) + gi2.instructeurs << instructeur_to_remove + gi2 + end + + it { expect(subject.body).to include('Vous avez été retiré 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 end From 4926fbff19e08b93bdcb7a0959b044bb73926b05 Mon Sep 17 00:00:00 2001 From: Eric Leroy-Terquem Date: Wed, 15 Feb 2023 13:59:10 +0100 Subject: [PATCH 4/4] fix(groupe instructeur mailer): fix mailers preview --- .../mailers/previews/groupe_instructeur_mailer_preview.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/mailers/previews/groupe_instructeur_mailer_preview.rb b/spec/mailers/previews/groupe_instructeur_mailer_preview.rb index a099a206a..4eab9b7d7 100644 --- a/spec/mailers/previews/groupe_instructeur_mailer_preview.rb +++ b/spec/mailers/previews/groupe_instructeur_mailer_preview.rb @@ -1,5 +1,5 @@ class GroupeInstructeurMailerPreview < ActionMailer::Preview - def remove_instructeurs + def notify_group_when_instructeurs_removed 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' @@ -7,11 +7,11 @@ class GroupeInstructeurMailerPreview < ActionMailer::Preview GroupeInstructeurMailer.notify_group_when_instructeurs_removed(groupe, instructeurs, current_instructeur_email) end - def remove_instructeur + def notify_removed_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) + instructeur = Instructeur.last + GroupeInstructeurMailer.notify_removed_instructeur(groupe, instructeur, current_instructeur_email) end end