mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #20758 from xijo/action_mailer_message_delivery_respects_i18n_locale
ActionMailer::MessageDelivery respects current I18n.locale
This commit is contained in:
commit
f2a8c23654
4 changed files with 25 additions and 9 deletions
|
@ -1,3 +1,9 @@
|
|||
* `deliver_later` now respects the current locale.
|
||||
|
||||
Fixes #20774.
|
||||
|
||||
*Johannes Opper*
|
||||
|
||||
* Add `config.action_mailer.deliver_later_queue_name` configuration to set the
|
||||
mailer queue name.
|
||||
|
||||
|
|
|
@ -6,8 +6,10 @@ module ActionMailer
|
|||
class DeliveryJob < ActiveJob::Base # :nodoc:
|
||||
queue_as { ActionMailer::Base.deliver_later_queue_name }
|
||||
|
||||
def perform(mailer, mail_method, delivery_method, *args) #:nodoc:
|
||||
mailer.constantize.public_send(mail_method, *args).send(delivery_method)
|
||||
def perform(mailer, mail_method, delivery_method, locale, *args) #:nodoc:
|
||||
I18n.with_locale(locale) do
|
||||
mailer.constantize.public_send(mail_method, *args).send(delivery_method)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -87,7 +87,7 @@ module ActionMailer
|
|||
private
|
||||
|
||||
def enqueue_delivery(delivery_method, options={})
|
||||
args = @mailer.name, @mail_method.to_s, delivery_method.to_s, *@args
|
||||
args = @mailer.name, @mail_method.to_s, delivery_method.to_s, I18n.locale.to_s, *@args
|
||||
ActionMailer::DeliveryJob.set(options).perform_later(*args)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -57,20 +57,20 @@ class MessageDeliveryTest < ActiveSupport::TestCase
|
|||
end
|
||||
|
||||
test 'should enqueue the email with :deliver_now delivery method' do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now', 1, 2, 3]) do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now', 'en', 1, 2, 3]) do
|
||||
@mail.deliver_later
|
||||
end
|
||||
end
|
||||
|
||||
test 'should enqueue the email with :deliver_now! delivery method' do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now!', 1, 2, 3]) do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now!', 'en', 1, 2, 3]) do
|
||||
@mail.deliver_later!
|
||||
end
|
||||
end
|
||||
|
||||
test 'should enqueue a delivery with a delay' do
|
||||
travel_to Time.new(2004, 11, 24, 01, 04, 44) do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, at: Time.current.to_f+600.seconds, args: ['DelayedMailer', 'test_message', 'deliver_now', 1, 2, 3]) do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, at: Time.current.to_f+600.seconds, args: ['DelayedMailer', 'test_message', 'deliver_now', 'en', 1, 2, 3]) do
|
||||
@mail.deliver_later wait: 600.seconds
|
||||
end
|
||||
end
|
||||
|
@ -78,20 +78,28 @@ class MessageDeliveryTest < ActiveSupport::TestCase
|
|||
|
||||
test 'should enqueue a delivery at a specific time' do
|
||||
later_time = Time.now.to_f + 3600
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, at: later_time, args: ['DelayedMailer', 'test_message', 'deliver_now', 1, 2, 3]) do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, at: later_time, args: ['DelayedMailer', 'test_message', 'deliver_now', 'en', 1, 2, 3]) do
|
||||
@mail.deliver_later wait_until: later_time
|
||||
end
|
||||
end
|
||||
|
||||
test 'should enqueue the job on the correct queue' do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now', 1, 2, 3], queue: "test_queue") do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now', 'en', 1, 2, 3], queue: "test_queue") do
|
||||
@mail.deliver_later
|
||||
end
|
||||
end
|
||||
|
||||
test 'can override the queue when enqueuing mail' do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now', 1, 2, 3], queue: "another_queue") do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now', 'en', 1, 2, 3], queue: "another_queue") do
|
||||
@mail.deliver_later(queue: :another_queue)
|
||||
end
|
||||
end
|
||||
|
||||
test 'should enqueue a delivery with the correct locale' do
|
||||
I18n.with_locale('de') do
|
||||
assert_performed_with(job: ActionMailer::DeliveryJob, args: ['DelayedMailer', 'test_message', 'deliver_now', 'de', 1, 2, 3]) do
|
||||
@mail.deliver_later
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue