mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
485e655082
Reverting because it feels backward to specify a delivery to not be performed while the e-mail is being composed. It is simpler (and makes more sense) to delegate the responsibility to the calling code.
172 lines
5.1 KiB
Ruby
172 lines
5.1 KiB
Ruby
require 'abstract_unit'
|
|
require 'mail'
|
|
|
|
class MyCustomDelivery
|
|
end
|
|
|
|
class BogusDelivery
|
|
def initialize(*)
|
|
end
|
|
|
|
def deliver!(mail)
|
|
raise "failed"
|
|
end
|
|
end
|
|
|
|
class DefaultsDeliveryMethodsTest < ActiveSupport::TestCase
|
|
test "default smtp settings" do
|
|
settings = { :address => "localhost",
|
|
:port => 25,
|
|
:domain => 'localhost.localdomain',
|
|
:user_name => nil,
|
|
:password => nil,
|
|
:authentication => nil,
|
|
:enable_starttls_auto => true }
|
|
assert_equal settings, ActionMailer::Base.smtp_settings
|
|
end
|
|
|
|
test "default file delivery settings" do
|
|
settings = {:location => "#{Dir.tmpdir}/mails"}
|
|
assert_equal settings, ActionMailer::Base.file_settings
|
|
end
|
|
|
|
test "default sendmail settings" do
|
|
settings = {:location => '/usr/sbin/sendmail',
|
|
:arguments => '-i -t'}
|
|
assert_equal settings, ActionMailer::Base.sendmail_settings
|
|
end
|
|
end
|
|
|
|
class CustomDeliveryMethodsTest < ActiveSupport::TestCase
|
|
def setup
|
|
@old_delivery_method = ActionMailer::Base.delivery_method
|
|
ActionMailer::Base.add_delivery_method :custom, MyCustomDelivery
|
|
end
|
|
|
|
def teardown
|
|
ActionMailer::Base.delivery_method = @old_delivery_method
|
|
new = ActionMailer::Base.delivery_methods.dup
|
|
new.delete(:custom)
|
|
ActionMailer::Base.delivery_methods = new
|
|
end
|
|
|
|
test "allow to add custom delivery method" do
|
|
ActionMailer::Base.delivery_method = :custom
|
|
assert_equal :custom, ActionMailer::Base.delivery_method
|
|
end
|
|
|
|
test "allow to customize custom settings" do
|
|
ActionMailer::Base.custom_settings = { :foo => :bar }
|
|
assert_equal Hash[:foo => :bar], ActionMailer::Base.custom_settings
|
|
end
|
|
|
|
test "respond to custom settings" do
|
|
assert_respond_to ActionMailer::Base, :custom_settings
|
|
assert_respond_to ActionMailer::Base, :custom_settings=
|
|
end
|
|
|
|
test "does not respond to unknown settings" do
|
|
assert_raise NoMethodError do
|
|
ActionMailer::Base.another_settings
|
|
end
|
|
end
|
|
end
|
|
|
|
class MailDeliveryTest < ActiveSupport::TestCase
|
|
class DeliveryMailer < ActionMailer::Base
|
|
DEFAULT_HEADERS = {
|
|
:to => 'mikel@test.lindsaar.net',
|
|
:from => 'jose@test.plataformatec.com'
|
|
}
|
|
|
|
def welcome(hash={})
|
|
mail(DEFAULT_HEADERS.merge(hash))
|
|
end
|
|
end
|
|
|
|
def setup
|
|
ActionMailer::Base.delivery_method = :smtp
|
|
end
|
|
|
|
def teardown
|
|
DeliveryMailer.delivery_method = :smtp
|
|
DeliveryMailer.perform_deliveries = true
|
|
DeliveryMailer.raise_delivery_errors = true
|
|
end
|
|
|
|
test "ActionMailer should be told when Mail gets delivered" do
|
|
DeliveryMailer.deliveries.clear
|
|
DeliveryMailer.expects(:deliver_mail).once
|
|
DeliveryMailer.welcome.deliver
|
|
end
|
|
|
|
test "delivery method can be customized per instance" do
|
|
email = DeliveryMailer.welcome.deliver
|
|
assert_instance_of Mail::SMTP, email.delivery_method
|
|
email = DeliveryMailer.welcome(:delivery_method => :test).deliver
|
|
assert_instance_of Mail::TestMailer, email.delivery_method
|
|
end
|
|
|
|
test "delivery method can be customized in subclasses not changing the parent" do
|
|
DeliveryMailer.delivery_method = :test
|
|
assert_equal :smtp, ActionMailer::Base.delivery_method
|
|
$BREAK = true
|
|
email = DeliveryMailer.welcome.deliver
|
|
assert_instance_of Mail::TestMailer, email.delivery_method
|
|
end
|
|
|
|
test "non registered delivery methods raises errors" do
|
|
DeliveryMailer.delivery_method = :unknown
|
|
assert_raise RuntimeError do
|
|
DeliveryMailer.welcome.deliver
|
|
end
|
|
end
|
|
|
|
test "does not perform deliveries if requested" do
|
|
DeliveryMailer.perform_deliveries = false
|
|
DeliveryMailer.deliveries.clear
|
|
Mail::Message.any_instance.expects(:deliver!).never
|
|
DeliveryMailer.welcome.deliver
|
|
end
|
|
|
|
test "does not append the deliveries collection if told not to perform the delivery" do
|
|
DeliveryMailer.perform_deliveries = false
|
|
DeliveryMailer.deliveries.clear
|
|
DeliveryMailer.welcome.deliver
|
|
assert_equal(0, DeliveryMailer.deliveries.length)
|
|
end
|
|
|
|
test "raise errors on bogus deliveries" do
|
|
DeliveryMailer.delivery_method = BogusDelivery
|
|
DeliveryMailer.deliveries.clear
|
|
assert_raise RuntimeError do
|
|
DeliveryMailer.welcome.deliver
|
|
end
|
|
end
|
|
|
|
test "does not increment the deliveries collection on error" do
|
|
DeliveryMailer.delivery_method = BogusDelivery
|
|
DeliveryMailer.deliveries.clear
|
|
assert_raise RuntimeError do
|
|
DeliveryMailer.welcome.deliver
|
|
end
|
|
assert_equal(0, DeliveryMailer.deliveries.length)
|
|
end
|
|
|
|
test "does not raise errors on bogus deliveries if set" do
|
|
DeliveryMailer.delivery_method = BogusDelivery
|
|
DeliveryMailer.raise_delivery_errors = false
|
|
assert_nothing_raised do
|
|
DeliveryMailer.welcome.deliver
|
|
end
|
|
end
|
|
|
|
test "does not increment the deliveries collection on bogus deliveries" do
|
|
DeliveryMailer.delivery_method = BogusDelivery
|
|
DeliveryMailer.raise_delivery_errors = false
|
|
DeliveryMailer.deliveries.clear
|
|
DeliveryMailer.welcome.deliver
|
|
assert_equal(0, DeliveryMailer.deliveries.length)
|
|
end
|
|
|
|
end
|