feat(mail): use contextualized Current.application_name

This commit is contained in:
Colin Darie 2024-03-26 17:23:42 +01:00
parent 8b9d4c87f7
commit 68ee4a3404
No known key found for this signature in database
GPG key ID: 8C76CADD40253590
45 changed files with 248 additions and 183 deletions

View file

@ -7,7 +7,7 @@ class APITokenMailer < ApplicationMailer
def expiration(api_token)
@api_token = api_token
user = api_token.administrateur.user
subject = "Votre jeton d'accès à la plateforme #{APPLICATION_NAME} expire le #{l(@api_token.expires_at, format: :long)}"
subject = "Votre jeton d'accès à la plateforme #{Current.application_name} expire le #{l(@api_token.expires_at, format: :long)}"
mail(to: user.email, subject:)
end

View file

@ -26,7 +26,8 @@ module MailerDefaultsConfigurableConcern
included do
before_action -> { self.class.save_original_defaults }
after_action -> { self.class.reset_original_defaults }
before_action :set_currents_for_legacy
after_action -> { self.class.reset_original_defaults }
def configure_defaults_for_user(user)
return if !user.is_a?(User) # not for super-admins

View file

@ -32,7 +32,7 @@ class InstructeurMailer < ApplicationMailer
def send_login_token(instructeur, login_token)
@instructeur_id = instructeur.id
@login_token = login_token
subject = "Connexion sécurisée à #{APPLICATION_NAME}"
subject = "Connexion sécurisée à #{Current.application_name}"
mail(to: instructeur.email, subject: subject)
end

View file

@ -2,19 +2,19 @@ class PreactivateUsersMailer < ApplicationMailer
layout 'mailers/layout'
def reinvite(model, model_name)
subject = "Votre compte #{model_name} est activé sur #{APPLICATION_NAME}"
subject = "Votre compte #{model_name} est activé sur #{Current.application_name}"
signature_separator = "-- "
body = <<~END_OF_MAIL
Bonjour,
les activations de compte #{model_name} sur #{APPLICATION_NAME}
les activations de compte #{model_name} sur #{Current.application_name}
ont connu depuis deux semaines un fonctionnement erratique, et nous
pensons que votre inscription sur #{APPLICATION_NAME} a pu sen
pensons que votre inscription sur #{Current.application_name} a pu sen
trouver affectée.
Nous avons maintenant rétabli un fonctionnement normal de lactivation
des comptes. Vous pouvez désormais vous connecter sans encombres à votre
compte #{model_name} sur #{APPLICATION_NAME}.
compte #{model_name} sur #{Current.application_name}.
Si toutefois des difficultés devaient persister, nhésitez pas à nous
en faire part.
@ -22,7 +22,7 @@ class PreactivateUsersMailer < ApplicationMailer
Cordialement
#{signature_separator}
Léquipe #{APPLICATION_NAME}
Léquipe #{Current.application_name}
END_OF_MAIL
mail(to: model.email,

View file

@ -25,7 +25,7 @@ class ResendAttestationMailer < ApplicationMailer
Cordialement,
Léquipe #{APPLICATION_NAME}
Léquipe #{Current.application_name}
HEREDOC
end
end

View file

@ -4,7 +4,7 @@
Bonjour,
%p
Vous avez fait la demande dun compte administrateur sur #{APPLICATION_NAME}.
Vous avez fait la demande dun compte administrateur sur #{Current.application_name}.
Votre compte a été créé mais reste inactif, il arrivera à expiration le #{try_format_date(@expiration_date)}
%p

View file

@ -7,7 +7,7 @@
Le règlement général sur la protection des données (RGPD) responsabilise les organismes publics et privés qui traitent leurs données.
%p
Dans le cadre du respect du RGPD, nous (la plateforme #{APPLICATION_NAME}) venons d'activer la suppression automatique des dossiers sur la démarche : "#{@procedure.libelle}".
Dans le cadre du respect du RGPD, nous (la plateforme #{Current.application_name}) venons d'activer la suppression automatique des dossiers sur la démarche : "#{@procedure.libelle}".
%p
Vous pouvez dores et déjà archiver ces données en accédant à

View file

@ -5,7 +5,7 @@
%p
Vous êtes administrateur sur la plateforme
= APPLICATION_NAME
= Current.application_name
et au moins un de vos services n'a pas son siret renseigné.
%p

View file

@ -1,5 +1,5 @@
%p
Un nouvel administrateur a été créé sur #{APPLICATION_NAME}.
Un nouvel administrateur a été créé sur #{Current.application_name}.
%ul
%li

View file

@ -8,10 +8,10 @@
%p
Pour les usagers ou les administrations publiques (collectivités, etc.) qui souhaitent remplir une démarche ou déposer un dossier en ligne, lentrée dans #{APPLICATION_NAME} se fait via un lien fourni par ladministration responsable, sur son propre site web. Ce lien vous permettra de créer un compte et de remplir le formulaire dans la foulée.
Pour les usagers ou les administrations publiques (collectivités, etc.) qui souhaitent remplir une démarche ou déposer un dossier en ligne, lentrée dans #{Current.application_name} se fait via un lien fourni par ladministration responsable, sur son propre site web. Ce lien vous permettra de créer un compte et de remplir le formulaire dans la foulée.
%p
Si par contre vous rencontrez des problèmes lors de l'utilisation de #{APPLICATION_NAME} en tant qu'usager, merci dexpliciter le problème rencontré sur notre
Si par contre vous rencontrez des problèmes lors de l'utilisation de #{Current.application_name} en tant qu'usager, merci dexpliciter le problème rencontré sur notre
= link_to("formulaire de contact", contact_url)
\.

View file

@ -8,7 +8,7 @@
%p
%strong Ce jeton expirera le #{l(@api_token.expires_at, format: :long)}.
%br
L'accès à l'API de #{APPLICATION_NAME} sera alors bloqué pour ce jeton.
L'accès à l'API de #{Current.application_name} sera alors bloqué pour ce jeton.
%p
Pour le renouveler, rendez-vous sur votre page de profil, dans la section « Jetons didentification de lAPI » :

View file

@ -2,7 +2,7 @@
- content_for(:footer) do
Merci de ne pas répondre à cet email. Donnez votre avis
= link_to("sur #{APPLICATION_NAME}", @url)
= link_to("sur #{Current.application_name}", @url)
ou
= succeed '.' do
= mail_to(@avis.claimant.email, "contactez la personne qui vous a invité")

View file

@ -5,7 +5,7 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
You have entered your details to create an account on #{APPLICATION_NAME}. To confirm your email and finish creating your account, select the following link:
You have entered your details to create an account on #{Current.application_name}. To confirm your email and finish creating your account, select the following link:
- link = confirmation_url(@user, confirmation_token: @token, procedure_id: @procedure&.id)
= link_to(link, link)
@ -15,7 +15,7 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
To confirm your account email change on #{APPLICATION_NAME}, select the following link:
To confirm your account email change on #{Current.application_name}, select the following link:
= link_to(confirmation_url(@user, confirmation_token: @token), confirmation_url(@user, confirmation_token: @token))
= render partial: "layouts/mailers/signature"

View file

@ -5,7 +5,7 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
Pour activer votre compte sur #{APPLICATION_NAME}, veuillez cliquer sur le lien suivant :
Pour activer votre compte sur #{Current.application_name}, veuillez cliquer sur le lien suivant :
- link = confirmation_url(@user, confirmation_token: @token, procedure_id: @procedure&.id, prefill_token: @prefill_token)
= link_to(link, link)

View file

@ -5,9 +5,9 @@
- unconfirmed_email = @resource.try(:unconfirmed_email?)
- if unconfirmed_email.present?
%p
We recieved a request to change the email address associated with your account #{@email} on #{APPLICATION_NAME}. The new email address will be #{unconfirmed_email}.
We recieved a request to change the email address associated with your account #{@email} on #{Current.application_name}. The new email address will be #{unconfirmed_email}.
- else
%p
A change to the email address associated with your account #{@email} was made on #{APPLICATION_NAME}. You can now connect with the email address #{@resource.email}.
A change to the email address associated with your account #{@email} was made on #{Current.application_name}. You can now connect with the email address #{@resource.email}.
= render partial: "layouts/mailers/signature"

View file

@ -6,13 +6,13 @@
- if unconfirmed_email.present?
%p
Nous avons reçu une demande de changement dadresse email pour votre
compte #{@email} sur #{APPLICATION_NAME}.
compte #{@email} sur #{Current.application_name}.
Une fois la demande prise en compte, la nouvelle adresse email de
votre compte sera #{unconfirmed_email}.
- else
%p
Le changement dadresse email de votre compte #{@email} sur
#{APPLICATION_NAME} a bien été pris en compte.
#{Current.application_name} a bien été pris en compte.
Vous pouvez désormais vous connecter avec ladresse #{@resource.email}.
= render partial: "layouts/mailers/signature"

View file

@ -3,6 +3,6 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
A request to change your password on #{APPLICATION_NAME} for the account #{@resource.email} was successfully processed.
A request to change your password on #{Current.application_name} for the account #{@resource.email} was successfully processed.
= render partial: "layouts/mailers/signature"

View file

@ -4,6 +4,6 @@
%p
La demande de changement de mot de passe pour votre compte #{@resource.email} sur
#{APPLICATION_NAME} a bien été prise en compte.
#{Current.application_name} a bien été prise en compte.
= render partial: "layouts/mailers/signature"

View file

@ -1,7 +1,7 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
Someone has requested to change your account password on #{APPLICATION_NAME}. To define a new password, select the following link:
Someone has requested to change your account password on #{Current.application_name}. To define a new password, select the following link:
= round_button 'Change the password', edit_password_url(@resource, reset_password_token: @token), :primary

View file

@ -1,7 +1,7 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
Vous avez demandé à changer votre mot de passe sur #{APPLICATION_NAME}. Pour ceci, merci de cliquer sur le lien suivant :
Vous avez demandé à changer votre mot de passe sur #{Current.application_name}. Pour ceci, merci de cliquer sur le lien suivant :
= round_button 'Changer mon mot de passe', edit_password_url(@resource, reset_password_token: @token), :primary

View file

@ -3,7 +3,7 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
Someone made too many unsuccessful attempts to connect to your account #{@resource.email} on #{APPLICATION_NAME}.
Someone made too many unsuccessful attempts to connect to your account #{@resource.email} on #{Current.application_name}.
As a security measure, we temporarily locked access to your account.
%p

View file

@ -4,7 +4,7 @@
%p
Quelquun a tenté de se connecter un grand nombre de fois sans succès à votre
compte #{@resource.email} sur #{APPLICATION_NAME}. Par mesure de précaution,
compte #{@resource.email} sur #{Current.application_name}. Par mesure de précaution,
nous avons temporairement désactivé laccès à votre compte.
%p

View file

@ -1,6 +1,6 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: APPLICATION_NAME)
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: Current.application_name)
= render partial: "layouts/mailers/signature"

View file

@ -1,6 +1,6 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: APPLICATION_NAME)
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: Current.application_name)
= render partial: "layouts/mailers/signature"

View file

@ -1,6 +1,6 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: APPLICATION_NAME)
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: Current.application_name)
= render partial: "layouts/mailers/signature"

View file

@ -1,6 +1,6 @@
%p= t(:hello, scope: [:views, :shared, :greetings])
%p
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: APPLICATION_NAME)
= t(".email_body", groupe_gestionnaire_name: @groupe_gestionnaire.name, email: @current_super_admin_email, application_name: Current.application_name)
= render partial: "layouts/mailers/signature"

View file

@ -2,7 +2,7 @@
Bonjour,
%p
Veuillez cliquer sur le lien sécurisé suivant pour vous connecter à #{APPLICATION_NAME} : 
Veuillez cliquer sur le lien sécurisé suivant pour vous connecter à #{Current.application_name} : 
= link_to(sign_in_by_link_url(@instructeur_id, jeton: @login_token), sign_in_by_link_url(@instructeur_id, jeton: @login_token))
%p

View file

@ -4,7 +4,7 @@
Bonjour,
%p
Vous avez du nouveau sur #{APPLICATION_NAME} depuis
Vous avez du nouveau sur #{Current.application_name} depuis
= Date.today.monday? ? "vendredi dernier" : "hier"
%ul

View file

@ -2,7 +2,7 @@
Bonjour,
%p
Vous venez dêtre nommé instructeur sur #{APPLICATION_NAME}.
Vous venez dêtre nommé instructeur sur #{Current.application_name}.
= "Votre compte (#{@email}) vous donnera désormais aussi accès à lespace instructeur."
= render partial: "layouts/mailers/signature"

View file

@ -6,7 +6,7 @@
= @invite.email_sender
souhaite que vous participiez à lélaboration dun dossier pour la démarche
%strong= @invite.dossier.procedure.libelle
sur #{APPLICATION_NAME}.
sur #{Current.application_name}.
- if @invite.message.present?
%blockquote

View file

@ -4,7 +4,7 @@
%p
Lutilisateur
= @invite.email_sender
souhaite que vous participiez à l'élaboration dun dossier sur #{APPLICATION_NAME}.
souhaite que vous participiez à l'élaboration dun dossier sur #{Current.application_name}.
- if @invite.message.present?
%blockquote

View file

@ -4,7 +4,7 @@ Cordialement,
= author_name
%br
%br
Équipe #{APPLICATION_NAME}
Équipe #{Current.application_name}
%br
Téléphone (standard) :
= CONTACT_PHONE

View file

@ -1,2 +1,2 @@
%strong
= t('.do_not_reply_html', application_name: APPLICATION_NAME, sender_email: @sender_email)
= t('.do_not_reply_html', application_name: Current.application_name, sender_email: @sender_email)

View file

@ -6,4 +6,4 @@
- else
-# The WORD JOINER unicode entity (&#8288;) prevents email clients from auto-linking the signature
= t('.team')
#{APPLICATION_NAME.gsub(".","&#8288;.").html_safe}
#{Current.application_name.gsub(".","&#8288;.").html_safe}

View file

@ -50,7 +50,7 @@
<tr>
<td style="word-wrap:break-word;font-size:0px;padding:0;padding-top:0px;padding-bottom:0px;" align="left">
<div class="" style="cursor:auto;color:#55575d;font-family:Helvetica, Arial, sans-serif;font-size:11px;text-align:left;">
<img align="middle" alt="Logo <%= "#{APPLICATION_NAME}" %>" src="<%= image_url("#{MAILER_LOGO_SRC}") %>" style="max-width=600px; padding=30px 0; display=inline !important; vertical-align=bottom; border=0; height=auto; outline=none; text-decoration=none; -ms-interpolation-mode=bicubic;" />
<img align="middle" alt="Logo <%= "#{Current.application_name}" %>" src="<%= image_url("#{MAILER_LOGO_SRC}") %>" style="max-width=600px; padding=30px 0; display=inline !important; vertical-align=bottom; border=0; height=auto; outline=none; text-decoration=none; -ms-interpolation-mode=bicubic;" />
</div>
</td>
</tr>
@ -168,7 +168,7 @@
<tr>
<td style="word-wrap:break-word;font-size:0px;padding:0px 20px 0px 20px;padding-top:0px;padding-bottom:0px;" align="center">
<div class="" style="cursor:auto;color:#55575d;font-family:Helvetica, Arial, sans-serif;font-size:11px;line-height:22px;text-align:center;">
<img align="middle" alt="Logo <%= "#{APPLICATION_NAME}" %>" src="<%= image_url("#{MAILER_FOOTER_LOGO_SRC}") %>" style="max-width=125px; padding=30px 0; display=inline !important; vertical-align=bottom; border=0; height=auto; outline=none; text-decoration=none; -ms-interpolation-mode=bicubic;" />
<img align="middle" alt="Logo <%= "#{Current.application_name}" %>" src="<%= image_url("#{MAILER_FOOTER_LOGO_SRC}") %>" style="max-width=125px; padding=30px 0; display=inline !important; vertical-align=bottom; border=0; height=auto; outline=none; text-decoration=none; -ms-interpolation-mode=bicubic;" />
</div>
</td>
</tr>

View file

@ -145,7 +145,7 @@
<tr>
<td style="word-wrap:break-word;font-size:0px;padding:0px 20px 0px 20px;padding-top:0px;padding-bottom:0px;" align="center">
<div class="" style="cursor:auto;color:#55575d;font-family:Helvetica, Arial, sans-serif;font-size:11px;line-height:22px;text-align:center;">
<%= "#{APPLICATION_NAME}" %> est un service fourni par <%= t("links.provider.provided_by") %>
<%= "#{Current.application_name}" %> est un service fourni par <%= t("links.provider.provided_by") %>
</div>
</td>
</tr>

View file

@ -26,4 +26,4 @@
= t(:best_regards, scope: [:views, :shared, :greetings])
%br
= t('layouts.mailers.signature.team')
#{APPLICATION_NAME.gsub(".","&#8288;.").html_safe}
#{Current.application_name.gsub(".","&#8288;.").html_safe}

View file

@ -4,7 +4,7 @@
Bonjour,
%p
Vous venez dêtre nommé gestionnaire du groupe gestionnaire #{@groupe_gestionnaire.name} sur #{APPLICATION_NAME}.
Vous venez dêtre nommé gestionnaire du groupe gestionnaire #{@groupe_gestionnaire.name} sur #{Current.application_name}.
%p
Votre compte a été créé pour l'adresse email #{@user.email}. Pour lactiver, nous vous invitons à cliquer sur le lien suivant : 

View file

@ -4,7 +4,7 @@
Bonjour,
%p
Vous venez dêtre nommé instructeur sur #{APPLICATION_NAME}.
Vous venez dêtre nommé instructeur sur #{Current.application_name}.
%p
Votre compte a été créé pour l'adresse email
@ -15,7 +15,7 @@
= link_to(users_activate_url(token: @reset_password_token), users_activate_url(token: @reset_password_token))
%p
Lors de vos prochaines connexions sur #{APPLICATION_NAME} cliquez sur le bouton « Se connecter » positionné sur le haut de page ou bien sur ce lien : 
Lors de vos prochaines connexions sur #{Current.application_name} cliquez sur le bouton « Se connecter » positionné sur le haut de page ou bien sur ce lien : 
= link_to new_user_session_url, new_user_session_url
- if AgentConnectService.enabled?

View file

@ -4,7 +4,7 @@
Bonjour,
%p
Une demande de création de compte a été réalisée sur le site #{APPLICATION_NAME} pour l'email #{@user.email}.
Une demande de création de compte a été réalisée sur le site #{Current.application_name} pour l'email #{@user.email}.
%p
%strong Votre compte existe déjà.

View file

@ -4,7 +4,7 @@
Bonjour,
%p
Cela fait plus de deux ans que vous ne vous êtes pas connecté à #{APPLICATION_NAME}.
Cela fait plus de deux ans que vous ne vous êtes pas connecté à #{Current.application_name}.
- if @user.dossiers.not_brouillon.count == 0
Aussi vous n'avez plus de dossier sur la plateforme.

View file

@ -17,19 +17,21 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.with(dossier:).notify_new_draft }
it { expect(subject.subject).to include("brouillon") }
it { expect(subject.subject).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include(dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY"))) }
it { expect(subject.body).to include("Vous pouvez déposer votre dossier jusquau") }
it { expect(subject.body).to include("heure de") }
it 'includes the correct subject and body content' do
expect(subject.subject).to include("brouillon")
expect(subject.subject).to include(dossier.procedure.libelle)
expect(subject.body).to include(dossier.procedure.libelle)
expect(subject.body).to include(dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY")))
expect(subject.body).to include("Vous pouvez déposer votre dossier jusquau")
expect(subject.body).to include("heure de")
end
it_behaves_like 'a dossier notification'
context "user prefers new domain" do
context "when user prefers new domain" do
let(:user) { create(:user, preferred_domain: :demarches_gouv_fr) }
it do
it 'includes the correct body content and sender email' do
expect(subject.body).to include(dossier_url(dossier, host: ENV.fetch('APP_HOST')))
expect(header_value("From", subject)).to include("ne-pas-repondre@demarches.gouv.fr")
end
@ -43,10 +45,12 @@ RSpec.describe DossierMailer, type: :mailer do
let(:commentaire) { create(:commentaire, dossier: dossier) }
subject { described_class.with(commentaire: commentaire).notify_new_answer }
it { expect(subject.subject).to include("Nouveau message") }
it { expect(subject.subject).to include(dossier.id.to_s) }
it { expect(subject.body).to include(dossier.procedure.service.email) }
it { expect(subject.body).not_to include(messagerie_dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY"))) }
it 'checks email subject and body for correct inclusions and exclusions' do
expect(subject.subject).to include("Nouveau message")
expect(subject.subject).to include(dossier.id.to_s)
expect(subject.body).to include(dossier.procedure.service.email)
expect(subject.body).not_to include(messagerie_dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY")))
end
it_behaves_like 'a dossier notification'
@ -62,9 +66,11 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.with(commentaire: commentaire).notify_new_answer }
it { expect(subject.subject).to include("Nouveau message") }
it { expect(subject.subject).to include(dossier.id.to_s) }
it { expect(subject.body).to include(messagerie_dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY"))) }
it 'checks email subject and body for correct inclusions' do
expect(subject.subject).to include("Nouveau message")
expect(subject.subject).to include(dossier.id.to_s)
expect(subject.body).to include(messagerie_dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY")))
end
it_behaves_like 'a dossier notification'
end
@ -90,10 +96,12 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_deletion_to_administration(deleted_dossier, to_email) }
it { expect(subject.subject).to eq("Le dossier nº #{deleted_dossier.dossier_id} a été supprimé à la demande de lusager") }
it { expect(subject.body).to include("À la demande de lusager") }
it { expect(subject.body).to include(deleted_dossier.dossier_id) }
it { expect(subject.body).to include(deleted_dossier.procedure.libelle) }
it 'verifies subject and body content for deletion notification' do
expect(subject.subject).to eq("Le dossier nº #{deleted_dossier.dossier_id} a été supprimé à la demande de lusager")
expect(subject.body).to include("À la demande de lusager")
expect(subject.body).to include(deleted_dossier.dossier_id)
expect(subject.body).to include(deleted_dossier.procedure.libelle)
end
end
describe '.notify_brouillon_near_deletion' do
@ -101,8 +109,10 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_brouillon_near_deletion([dossier], dossier.user.email) }
it { expect(subject.body).to include(" #{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it 'checks email body for correct inclusions regarding brouillon nearing deletion' do
expect(subject.body).to include(" #{dossier.id} ")
expect(subject.body).to include(dossier.procedure.libelle)
end
end
describe '.notify_brouillon_deletion' do
@ -110,8 +120,10 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_brouillon_deletion([dossier.hash_for_deletion_mail], dossier.user.email) }
it { expect(subject.subject).to eq("Un dossier en brouillon a été supprimé automatiquement") }
it { expect(subject.body).to include(" #{dossier.id} (#{dossier.procedure.libelle})") }
it 'verifies subject and body content for brouillon deletion notification' do
expect(subject.subject).to eq("Un dossier en brouillon a été supprimé automatiquement")
expect(subject.body).to include(" #{dossier.id} (#{dossier.procedure.libelle})")
end
end
describe '.notify_automatic_deletion_to_user' do
@ -122,11 +134,13 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_automatic_deletion_to_user([deleted_dossier], dossier.user.email) }
it { expect(subject.to).to eq([dossier.user.email]) }
it { expect(subject.subject).to eq("Un dossier a été supprimé automatiquement de votre compte") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("nous nous excusons de la gêne occasionnée") }
it 'checks email subject, to, and body for correct inclusions and exclusions for en_construction status' do
expect(subject.to).to eq([dossier.user.email])
expect(subject.subject).to eq("Un dossier a été supprimé automatiquement de votre compte")
expect(subject.body).to include("#{dossier.id} ")
expect(subject.body).to include(dossier.procedure.libelle)
expect(subject.body).to include("nous nous excusons de la gêne occasionnée")
end
end
describe 'termine' do
@ -134,11 +148,13 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_automatic_deletion_to_user([deleted_dossier], dossier.user.email) }
it { expect(subject.to).to eq([dossier.user.email]) }
it { expect(subject.subject).to eq("Un dossier a été supprimé automatiquement de votre compte") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).not_to include("nous nous excusons de la gène occasionnée") }
it 'checks email subject, to, and body for correct inclusions and exclusions for termine status' do
expect(subject.to).to eq([dossier.user.email])
expect(subject.subject).to eq("Un dossier a été supprimé automatiquement de votre compte")
expect(subject.body).to include("#{dossier.id} ")
expect(subject.body).to include(dossier.procedure.libelle)
expect(subject.body).not_to include("nous nous excusons de la gêne occasionnée")
end
end
end
@ -148,8 +164,10 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_automatic_deletion_to_administration([deleted_dossier], dossier.user.email) }
it { expect(subject.subject).to eq("Un dossier a été supprimé automatiquement") }
it { expect(subject.body).to include("#{dossier.id} (#{dossier.procedure.libelle})") }
it 'verifies subject and body content for automatic deletion notification' do
expect(subject.subject).to eq("Un dossier a été supprimé automatiquement")
expect(subject.body).to include("#{dossier.id} (#{dossier.procedure.libelle})")
end
end
describe '.notify_near_deletion_to_administration' do
@ -158,11 +176,13 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_near_deletion_to_administration([dossier], dossier.user.email) }
it { expect(subject.subject).to eq("Un dossier en construction va bientôt être supprimé") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("PDF") }
it { expect(subject.body).to include("Vous avez <b>14 jours</b> pour commencer linstruction du dossier.") }
it 'checks email subject and body for correct inclusions for en_construction status' do
expect(subject.subject).to eq("Un dossier en construction va bientôt être supprimé")
expect(subject.body).to include("#{dossier.id} ")
expect(subject.body).to include(dossier.procedure.libelle)
expect(subject.body).to include("PDF")
expect(subject.body).to include("Vous avez <b>14 jours</b> pour commencer linstruction du dossier.")
end
end
describe 'termine' do
@ -170,9 +190,11 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_near_deletion_to_administration([dossier], dossier.user.email) }
it { expect(subject.subject).to eq("Un dossier dont le traitement est terminé va bientôt être supprimé") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it 'verifies subject and body content for near deletion notification of completed cases' do
expect(subject.subject).to eq("Un dossier dont le traitement est terminé va bientôt être supprimé")
expect(subject.body).to include("#{dossier.id} ")
expect(subject.body).to include(dossier.procedure.libelle)
end
end
end
@ -182,12 +204,14 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_near_deletion_to_user([dossier], dossier.user.email) }
it { expect(subject.to).to eq([dossier.user.email]) }
it { expect(subject.subject).to eq("Un dossier en construction va bientôt être supprimé") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("Votre compte reste activé") }
it { expect(subject.body).to include("Si vous souhaitez conserver votre dossier plus longtemps, vous pouvez <b>prolonger sa durée de conservation</b> dans linterface.") }
it 'verifies email subject, to, and body for correct inclusions for en_construction status' do
expect(subject.to).to eq([dossier.user.email])
expect(subject.subject).to eq("Un dossier en construction va bientôt être supprimé")
expect(subject.body).to include("#{dossier.id} ")
expect(subject.body).to include(dossier.procedure.libelle)
expect(subject.body).to include("Votre compte reste activé")
expect(subject.body).to include("Si vous souhaitez conserver votre dossier plus longtemps, vous pouvez <b>prolonger sa durée de conservation</b> dans linterface.")
end
end
describe 'termine' do
@ -195,12 +219,14 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_near_deletion_to_user([dossier], dossier.user.email) }
it { expect(subject.to).to eq([dossier.user.email]) }
it { expect(subject.subject).to eq("Un dossier dont le traitement est terminé va bientôt être supprimé") }
it { expect(subject.body).to include("#{dossier.id} ") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("Votre compte reste activé") }
it { expect(subject.body).to include("PDF") }
it 'checks email subject, to, and body for correct inclusions for termine status' do
expect(subject.to).to eq([dossier.user.email])
expect(subject.subject).to eq("Un dossier dont le traitement est terminé va bientôt être supprimé")
expect(subject.body).to include("#{dossier.id} ")
expect(subject.body).to include(dossier.procedure.libelle)
expect(subject.body).to include("Votre compte reste activé")
expect(subject.body).to include("PDF")
end
end
describe 'multiple termines' do
@ -208,10 +234,12 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_near_deletion_to_user(dossiers, dossiers[0].user.email) }
it { expect(subject.subject).to eq("Des dossiers dont le traitement est terminé vont bientôt être supprimés") }
it { expect(subject.body).to include("#{dossiers[0].id} ") }
it { expect(subject.body).to include("#{dossiers[1].id} ") }
it { expect(subject.body).to include("#{dossiers[2].id} ") }
it 'verifies email subject and body contain correct dossier numbers for multiple termine status' do
expect(subject.subject).to eq("Des dossiers dont le traitement est terminé vont bientôt être supprimés")
dossiers.each do |dossier|
expect(subject.body).to include("#{dossier.id} ")
end
end
end
end
@ -221,10 +249,12 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.notify_groupe_instructeur_changed(instructeur, dossier) }
it { expect(subject.subject).to eq("Le dossier nº #{dossier.id} a changé de groupe dinstructeurs") }
it { expect(subject.body).to include("#{dossier.id}") }
it { expect(subject.body).to include(dossier.procedure.libelle) }
it { expect(subject.body).to include("Suite à cette modification, vous ne suivez plus ce dossier.") }
it 'verifies subject and body content for groupe instructeur change notification' do
expect(subject.subject).to eq("Le dossier nº #{dossier.id} a changé de groupe dinstructeurs")
expect(subject.body).to include("#{dossier.id}")
expect(subject.body).to include(dossier.procedure.libelle)
expect(subject.body).to include("Suite à cette modification, vous ne suivez plus ce dossier.")
end
end
describe '.notify_pending_correction' do
@ -240,19 +270,23 @@ RSpec.describe DossierMailer, type: :mailer do
}
context 'reason is incorrect' do
it { expect(subject.subject).to eq("Vous devez corriger votre dossier nº #{dossier.id} « #{dossier.procedure.libelle} »") }
it { expect(subject.body).to include("apporter des corrections") }
it { expect(subject.body).not_to include("Silence") }
it 'checks email subject and body for corrections without Silence Vaut Accord' do
expect(subject.subject).to eq("Vous devez corriger votre dossier nº #{dossier.id} « #{dossier.procedure.libelle} »")
expect(subject.body).to include("apporter des corrections")
expect(subject.body).not_to include("Silence")
end
end
context 'sva with reason is incorrect' do
let(:sva_svr_decision_on) { Date.tomorrow }
let(:procedure) { create(:procedure, :sva) }
it { expect(subject.subject).to eq("Vous devez corriger votre dossier nº #{dossier.id} « #{dossier.procedure.libelle} »") }
it { expect(subject.body).to include("apporter des corrections") }
it { expect(subject.body).to include("Silence Vaut Accord") }
it { expect(subject.body).to include("suspendu") }
it 'includes Silence Vaut Accord and mentions suspension for incorrect reason' do
expect(subject.subject).to eq("Vous devez corriger votre dossier nº #{dossier.id} « #{dossier.procedure.libelle} »")
expect(subject.body).to include("apporter des corrections")
expect(subject.body).to include("Silence Vaut Accord")
expect(subject.body).to include("suspendu")
end
end
context 'sva with reason is incomplete' do
@ -260,9 +294,11 @@ RSpec.describe DossierMailer, type: :mailer do
let(:reason) { :incomplete }
let(:procedure) { create(:procedure, :sva) }
it { expect(subject.body).to include("compléter") }
it { expect(subject.body).to include("Silence Vaut Accord") }
it { expect(subject.body).to include("réinitialisé") }
it 'mentions the need to complete the dossier and includes Silence Vaut Accord with reset message' do
expect(subject.body).to include("compléter")
expect(subject.body).to include("Silence Vaut Accord")
expect(subject.body).to include("réinitialisé")
end
end
context 'svr with reason is incomplete' do
@ -270,9 +306,11 @@ RSpec.describe DossierMailer, type: :mailer do
let(:reason) { :incomplete }
let(:procedure) { create(:procedure, :svr) }
it { expect(subject.body).to include("compléter") }
it { expect(subject.body).to include("Silence Vaut Rejet") }
it { expect(subject.body).to include("réinitialisé") }
it 'mentions the need to complete the dossier and includes Silence Vaut Rejet with reset message' do
expect(subject.body).to include("compléter")
expect(subject.body).to include("Silence Vaut Rejet")
expect(subject.body).to include("réinitialisé")
end
end
end
@ -285,20 +323,26 @@ RSpec.describe DossierMailer, type: :mailer do
subject { described_class.with(dossier_transfer: dossier_transfer).notify_transfer }
context 'when it is a transfer of one dossier' do
it { expect(subject.subject).to include("Vous avez une demande de transfert en attente.") }
it { expect(subject.body).to include("#{user.email} vous adresse une demande de transfert pour le dossier n° #{dossier.id} sur la démarche") }
it { expect(subject.body).to include(procedure.libelle.to_s) }
it 'includes relevant details about the single dossier transfer request' do
expect(subject.subject).to include("Vous avez une demande de transfert en attente.")
expect(subject.body).to include("#{user.email} vous adresse une demande de transfert pour le dossier n° #{dossier.id} sur la démarche")
expect(subject.body).to include(procedure.libelle.to_s)
end
end
context 'when recipient has preferred domain' do
let(:dossier_transfer) { create(:dossier_transfer, email: create(:user, preferred_domain: :demarches_gouv_fr).email) }
it { expect(subject.body).to include(dossiers_url(statut: "dossiers-transferes", host: ENV.fetch("APP_HOST"))) }
it 'includes a link with the preferred domain in the email body' do
expect(subject.body).to include(dossiers_url(statut: "dossiers-transferes", host: ENV.fetch("APP_HOST")))
end
end
context 'when it is a transfer of multiple dossiers' do
let!(:dossier2) { create(:dossier, user: user, transfer: dossier_transfer, procedure: procedure) }
it { expect(subject.subject).to include("Vous avez une demande de transfert en attente.") }
it { expect(subject.body).to include("#{user.email} vous adresse une demande de transfert pour 2 dossiers.") }
it 'includes a summary of multiple dossiers transfer request' do
expect(subject.subject).to include("Vous avez une demande de transfert en attente.")
expect(subject.body).to include("#{user.email} vous adresse une demande de transfert pour 2 dossiers.")
end
end
context 'when it is a transfer of one dossier from super admin' do
@ -306,8 +350,10 @@ RSpec.describe DossierMailer, type: :mailer do
dossier_transfer.update!(from_support: true)
end
it { expect(subject.subject).to include("Vous avez une demande de transfert en attente.") }
it { expect(subject.body).to include("Le support technique vous adresse une demande de transfert") }
it 'includes details indicating the transfer request is from support' do
expect(subject.subject).to include("Vous avez une demande de transfert en attente.")
expect(subject.body).to include("Le support technique vous adresse une demande de transfert")
end
end
context 'when dossiers have been dissociated from transfer' do

View file

@ -8,10 +8,12 @@ RSpec.describe NotificationMailer, type: :mailer do
subject { described_class.send_notification_for_tiers(dossier_for_tiers) }
it { expect(subject.subject).to include("Votre dossier rempli par le mandataire #{dossier_for_tiers.mandataire_first_name} #{dossier_for_tiers.mandataire_last_name} a été mis à jour") }
it { expect(subject.to).to eq([dossier_for_tiers.individual.email]) }
it { expect(subject.body).to include("a été déposé le") }
it { expect(subject.body).to include("Pour en savoir plus, veuillez vous rapprocher de\r\n<a href=\"mailto:#{dossier_for_tiers.user.email}\">#{dossier_for_tiers.user.email}</a>.") }
it 'verifies email subject, recipient, and body content for updated dossier by mandataire' do
expect(subject.subject).to include("Votre dossier rempli par le mandataire #{dossier_for_tiers.mandataire_first_name} #{dossier_for_tiers.mandataire_last_name} a été mis à jour")
expect(subject.to).to eq([dossier_for_tiers.individual.email])
expect(subject.body).to include("a été déposé le")
expect(subject.body).to include("Pour en savoir plus, veuillez vous rapprocher de\r\n<a href=\"mailto:#{dossier_for_tiers.user.email}\">#{dossier_for_tiers.user.email}</a>.")
end
end
describe 'send_notification_for_tiers for repasser_en_instruction' do
@ -19,10 +21,12 @@ RSpec.describe NotificationMailer, type: :mailer do
subject { described_class.send_notification_for_tiers(dossier_for_tiers, repasser_en_instruction: true) }
it { expect(subject.subject).to include("Votre dossier rempli par le mandataire #{dossier_for_tiers.mandataire_first_name} #{dossier_for_tiers.mandataire_last_name} a été mis à jour") }
it { expect(subject.to).to eq([dossier_for_tiers.individual.email]) }
it { expect(subject.body).to include("va être réexaminé, la précédente décision sur ce dossier est caduque.") }
it { expect(subject.body).to include("Pour en savoir plus, veuillez vous rapprocher de\r\n<a href=\"mailto:#{dossier_for_tiers.user.email}\">#{dossier_for_tiers.user.email}</a>.") }
it 'verifies email subject, recipient, and body content for dossier re-examination notification' do
expect(subject.subject).to include("Votre dossier rempli par le mandataire #{dossier_for_tiers.mandataire_first_name} #{dossier_for_tiers.mandataire_last_name} a été mis à jour")
expect(subject.to).to eq([dossier_for_tiers.individual.email])
expect(subject.body).to include("va être réexaminé, la précédente décision sur ce dossier est caduque.")
expect(subject.body).to include("Pour en savoir plus, veuillez vous rapprocher de\r\n<a href=\"mailto:#{dossier_for_tiers.user.email}\">#{dossier_for_tiers.user.email}</a>.")
end
end
describe 'send_en_construction_notification' do
@ -66,13 +70,13 @@ RSpec.describe NotificationMailer, type: :mailer do
subject(:mail) { described_class.send_en_instruction_notification(dossier) }
it 'renders the template' do
it 'renders the template with subject and body' do
expect(mail.subject).to eq('Email subject')
expect(mail.body).to include('Your dossier was processed')
expect(mail.body).to have_link('messagerie')
end
it 'renders the actions' do
it 'renders the actions with links to dossier and messagerie' do
expect(mail.body).to have_link('Consulter mon dossier', href: dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY")))
expect(mail.body).to have_link('Jai une question', href: messagerie_dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY")))
end
@ -80,19 +84,16 @@ RSpec.describe NotificationMailer, type: :mailer do
context 'when the template body contains tags' do
let(:email_template) { create(:received_mail, subject: 'Email subject', body: 'Hello --nom--, your dossier --lien dossier-- was processed.', procedure:) }
it 'replaces value tags with the proper value' do
expect(mail.body).to have_content(dossier.individual.nom)
end
it 'replaces link tags with a clickable link' do
expect(mail.body).to have_link(dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY")))
it 'replaces value tags with the proper value and renders links correctly' do
expect(mail.body).to include(dossier.individual.nom)
expect(mail.body).to have_link(href: dossier_url(dossier, host: ENV.fetch("APP_HOST_LEGACY")))
end
context "when user has preferred domain" do
let(:user) { create(:user, preferred_domain: :demarches_gouv_fr) }
it do
expect(mail.body).to have_link(dossier_url(dossier, host: ENV.fetch("APP_HOST")))
it 'adjusts links and sender email for user preferred domain' do
expect(mail.body).to have_link(href: dossier_url(dossier, host: ENV.fetch("APP_HOST")))
expect(header_value("From", mail)).to include("@demarches.gouv.fr")
end
end
@ -101,11 +102,8 @@ RSpec.describe NotificationMailer, type: :mailer do
context 'when the template body contains HTML' do
let(:email_template) { create(:received_mail, body: 'Your <b>dossier</b> was processed. <iframe src="#">Foo</iframe>', procedure:) }
it 'allows basic formatting tags' do
it 'allows basic formatting tags but sanitizes sensitive content' do
expect(mail.body).to include('<b>dossier</b>')
end
it 'sanitizes sensitive content' do
expect(mail.body).not_to include('iframe')
end
end
@ -126,15 +124,17 @@ RSpec.describe NotificationMailer, type: :mailer do
subject(:mail) { described_class.send_accepte_notification(dossier) }
context "subject is too long" do
context "when the subject is too long" do
let(:subject) { 'Un long libellé --libellé démarche--' }
it { expect(mail.subject.length).to be <= 100 }
end
context "subject should fallback to default" do
context "when the subject should fallback to default" do
let(:subject) { "" }
it { expect(mail.subject).to match(/^Votre dossier .+ a été accepté \(My super long title/) }
it { expect(mail.subject.length).to be <= 100 }
it 'provides a default subject within the length limit including procedure title beginning' do
expect(mail.subject).to match(/^Votre dossier .+ a été accepté \(My super long title/)
expect(mail.subject.length).to be <= 100
end
end
end
@ -149,9 +149,11 @@ RSpec.describe NotificationMailer, type: :mailer do
subject(:mail) { described_class.send_en_instruction_notification(dossier) }
context "subject has a special character should not be escaped" do
context "when the subject has a special character that should not be escaped" do
let(:subject) { '--libellé démarche--' }
it { expect(mail.subject).to eq("Mon titre avec l'apostrophe") }
it 'includes the apostrophe without escaping it' do
expect(mail.subject).to eq("Mon titre avec l'apostrophe")
end
end
end
end

View file

@ -4,9 +4,11 @@ RSpec.describe UserMailer, type: :mailer do
describe '.new_account_warning' do
subject { described_class.new_account_warning(user) }
it { expect(subject.to).to eq([user.email]) }
it { expect(subject.body).to include(user.email) }
it { expect(subject.body).to have_link('Jai oublié mon mot de passe') }
it 'sends email to the correct user with expected body content and link' do
expect(subject.to).to eq([user.email])
expect(subject.body).to include(user.email)
expect(subject.body).to have_link('Jai oublié mon mot de passe')
end
context 'when a procedure is provided' do
let(:procedure) { build(:procedure) }
@ -47,8 +49,10 @@ RSpec.describe UserMailer, type: :mailer do
subject { described_class.ask_for_merge(user, requested_email) }
it { expect(subject.to).to eq([requested_email]) }
it { expect(subject.body).to include(requested_email) }
it 'correctly addresses the email and includes the requested email in the body' do
expect(subject.to).to eq([requested_email])
expect(subject.body).to include(requested_email)
end
context 'without SafeMailer configured' do
it { expect(subject[BalancerDeliveryMethod::FORCE_DELIVERY_METHOD_HEADER]&.value).to eq(nil) }
@ -68,13 +72,15 @@ RSpec.describe UserMailer, type: :mailer do
end
describe '.france_connect_merge_confirmation' do
let(:email) { 'new.exemple.fr' }
let(:email) { 'new@exemple.fr' }
let(:code) { '123456' }
subject { described_class.france_connect_merge_confirmation(email, code, 15.minutes.from_now) }
it { expect(subject.to).to eq([email]) }
it { expect(subject.body).to include(france_connect_particulier_mail_merge_with_existing_account_url(email_merge_token: code))) }
it 'sends to correct email with merge link' do
expect(subject.to).to eq([email])
expect(subject.body).to include(france_connect_particulier_mail_merge_with_existing_account_url(email_merge_token: code))
end
context 'without SafeMailer configured' do
it { expect(subject[BalancerDeliveryMethod::FORCE_DELIVERY_METHOD_HEADER]&.value).to eq(nil) }
@ -100,16 +106,20 @@ RSpec.describe UserMailer, type: :mailer do
context 'instructeur' do
let(:role) { create(:instructeur) }
it { expect(subject.to).to eq([role.user.email]) }
it { expect(subject.body).to have_link('Consulter mes archives', href: instructeur_archives_url(procedure, host: ENV.fetch("APP_HOST_LEGACY"))) }
it { expect(subject.body).to have_link("#{procedure.id} #{procedure.libelle}", href: instructeur_procedure_url(procedure, host: ENV.fetch("APP_HOST_LEGACY"))) }
it 'sends email with correct links to instructeur' do
expect(subject.to).to eq([role.user.email])
expect(subject.body).to have_link('Consulter mes archives', href: instructeur_archives_url(procedure, host: ENV.fetch("APP_HOST_LEGACY")))
expect(subject.body).to have_link("#{procedure.id} #{procedure.libelle}", href: instructeur_procedure_url(procedure, host: ENV.fetch("APP_HOST_LEGACY")))
end
end
context 'instructeur' do
context 'administrateur' do
let(:role) { create(:administrateur) }
it { expect(subject.to).to eq([role.user.email]) }
it { expect(subject.body).to have_link('Consulter mes archives', href: admin_procedure_archives_url(procedure, host: ENV.fetch("APP_HOST_LEGACY"))) }
it { expect(subject.body).to have_link("#{procedure.id} #{procedure.libelle}", href: admin_procedure_url(procedure, host: ENV.fetch("APP_HOST_LEGACY"))) }
it 'sends email with correct links to administrateur' do
expect(subject.to).to eq([role.user.email])
expect(subject.body).to have_link('Consulter mes archives', href: admin_procedure_archives_url(procedure, host: ENV.fetch("APP_HOST_LEGACY")))
expect(subject.body).to have_link("#{procedure.id} #{procedure.libelle}", href: admin_procedure_url(procedure, host: ENV.fetch("APP_HOST_LEGACY")))
end
end
context 'when perform_later is called' do
@ -125,8 +135,10 @@ RSpec.describe UserMailer, type: :mailer do
describe '.notify_inactive_close_to_deletion' do
subject { described_class.notify_inactive_close_to_deletion(user) }
it { expect(subject.to).to eq([user.email]) }
it { expect(subject.body).to include("Cela fait plus de deux ans que vous ne vous êtes pas connecté à #{APPLICATION_NAME}.") }
it 'alerts user of inactivity with correct recipient and message' do
expect(subject.to).to eq([user.email])
expect(subject.body).to include("Cela fait plus de deux ans que vous ne vous êtes pas connecté à #{APPLICATION_NAME}.")
end
context 'when perform_later is called' do
let(:custom_queue) { 'low_priority' }
@ -142,9 +154,11 @@ RSpec.describe UserMailer, type: :mailer do
let(:content) { "Bonjour,\r\nsaut de ligne" }
subject { described_class.notify_after_closing(user, content, procedure) }
it { expect(subject.to).to eq([user.email]) }
it { expect(subject.body).to include("Clôture d&#39;une démarche sur Démarches simplifiées") }
it { expect(subject.body).to include("Bonjour,\r\n<br />saut de ligne") }
it 'notifies user about procedure closing with detailed message' do
expect(subject.to).to eq([user.email])
expect(subject.body).to include("Clôture d&#39;une démarche sur Démarches simplifiées")
expect(subject.body).to include("Bonjour,\r\n<br />saut de ligne")
end
context 'when perform_later is called' do
let(:custom_queue) { 'low_priority' }

View file

@ -4,6 +4,8 @@ describe 'instructeur_mailer/send_notifications', type: :view do
before do
assign(:data, data)
allow(Current).to receive(:application_name).and_return(APPLICATION_NAME)
render
end