mirror of https://github.com/rails/rails
87 lines
3.0 KiB
Ruby
87 lines
3.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "abstract_unit"
|
|
require "mailers/callback_mailer"
|
|
require "active_support/testing/stream"
|
|
|
|
class ActionMailerCallbacksTest < ActiveSupport::TestCase
|
|
include ActiveJob::TestHelper
|
|
include ActiveSupport::Testing::Stream
|
|
|
|
setup do
|
|
@previous_delivery_method = ActionMailer::Base.delivery_method
|
|
ActionMailer::Base.delivery_method = :test
|
|
CallbackMailer.rescue_from_error = nil
|
|
CallbackMailer.after_deliver_instance = nil
|
|
CallbackMailer.around_deliver_instance = nil
|
|
CallbackMailer.abort_before_deliver = nil
|
|
CallbackMailer.around_handles_error = nil
|
|
end
|
|
|
|
teardown do
|
|
ActionMailer::Base.deliveries.clear
|
|
ActionMailer::Base.delivery_method = @previous_delivery_method
|
|
CallbackMailer.rescue_from_error = nil
|
|
CallbackMailer.after_deliver_instance = nil
|
|
CallbackMailer.around_deliver_instance = nil
|
|
CallbackMailer.abort_before_deliver = nil
|
|
CallbackMailer.around_handles_error = nil
|
|
end
|
|
|
|
test "deliver_now should call after_deliver callback and can access sent message" do
|
|
mail_delivery = CallbackMailer.test_message
|
|
mail_delivery.deliver_now
|
|
|
|
assert_kind_of CallbackMailer, CallbackMailer.after_deliver_instance
|
|
assert_not_empty CallbackMailer.after_deliver_instance.message.message_id
|
|
assert_equal mail_delivery.message_id, CallbackMailer.after_deliver_instance.message.message_id
|
|
assert_equal "test-receiver@test.com", CallbackMailer.after_deliver_instance.message.to.first
|
|
end
|
|
|
|
test "deliver_now! should call after_deliver callback" do
|
|
CallbackMailer.test_message.deliver_now
|
|
|
|
assert_kind_of CallbackMailer, CallbackMailer.after_deliver_instance
|
|
end
|
|
|
|
test "before_deliver can abort the delivery and not run after_deliver callbacks" do
|
|
CallbackMailer.abort_before_deliver = true
|
|
|
|
mail_delivery = CallbackMailer.test_message
|
|
mail_delivery.deliver_now
|
|
|
|
assert_nil mail_delivery.message_id
|
|
assert_nil CallbackMailer.after_deliver_instance
|
|
end
|
|
|
|
test "deliver_later should call after_deliver callback and can access sent message" do
|
|
perform_enqueued_jobs do
|
|
silence_stream($stdout) do
|
|
CallbackMailer.test_message.deliver_later
|
|
end
|
|
end
|
|
assert_kind_of CallbackMailer, CallbackMailer.after_deliver_instance
|
|
assert_not_empty CallbackMailer.after_deliver_instance.message.message_id
|
|
end
|
|
|
|
test "around_deliver is called after rescue_from on action processing exceptions" do
|
|
CallbackMailer.around_handles_error = true
|
|
|
|
CallbackMailer.test_raise_action.deliver_now
|
|
assert CallbackMailer.rescue_from_error
|
|
end
|
|
|
|
test "around_deliver is called before rescue_from on deliver! exceptions" do
|
|
CallbackMailer.around_handles_error = true
|
|
|
|
stub_any_instance(Mail::TestMailer, instance: Mail::TestMailer.new({})) do |instance|
|
|
instance.stub(:deliver!, proc { raise "boom deliver exception" }) do
|
|
CallbackMailer.test_message.deliver_now
|
|
end
|
|
end
|
|
|
|
assert_kind_of CallbackMailer, CallbackMailer.after_deliver_instance
|
|
assert_nil CallbackMailer.rescue_from_error
|
|
end
|
|
end
|