Skip to content

Commit 8e7e077

Browse files
committed
Fix mail template preview using wrong locale
`render_template` used `member.language` to set the locale, ignoring the preview's `params[:locale]`. When the sampled basket belonged to a member with a different language (e.g. German), the French preview would render German content.
1 parent 7327a40 commit 8e7e077

2 files changed

Lines changed: 23 additions & 1 deletion

File tree

app/mailers/concerns/templatable.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ def template_mail(member, from: nil, to: nil, stream: "outbound", tag: nil, head
2222
end
2323

2424
def render_template(member, **data)
25-
I18n.with_locale(member.language) do
25+
locale = params[:locale] || member.language
26+
I18n.with_locale(locale) do
2627
set_data(data)
2728
yield render_subjet, render_content
2829
end

test/mailers/concerns/templatable_test.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,27 @@
33
require "test_helper"
44

55
class TemplatableTest < ActionMailer::TestCase
6+
# --- Locale override via params[:locale] (preview) ---
7+
8+
test "render_template uses params[:locale] over member language" do
9+
org(languages: %w[en fr])
10+
travel_to "2024-01-01"
11+
template = mail_templates(:basket_last_trial)
12+
membership = memberships(:john)
13+
basket = membership.baskets.first
14+
15+
assert_equal "en", membership.member.language
16+
17+
mail = BasketMailer.with(
18+
template: template,
19+
basket: basket,
20+
locale: "fr"
21+
).last_trial_email
22+
23+
assert_equal "Dernier panier à l'essai!", mail.subject
24+
assert_includes mail.body.to_s, "dernier jour de votre période d'essai"
25+
end
26+
627
# --- MailDelivery tracking via MailTemplate.deliver ---
728

829
test "deliver creates MailDelivery and MailDelivery::Email records" do

0 commit comments

Comments
 (0)