aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/test/delivery_methods_test.rb
diff options
context:
space:
mode:
authorJosé Valim and Mikel Lindsaar <pair@programming.com>2010-01-24 19:36:42 +0100
committerJosé Valim and Mikel Lindsaar <pair@programming.com>2010-01-24 19:36:42 +0100
commitbd96614101262e0ad0cc176ed8e2d95a5c17936b (patch)
tree1612a3baaf634bd180b2b145db12b7eeb3096010 /actionmailer/test/delivery_methods_test.rb
parent99f960a3d73b62a957988bbee0906264f35afc2e (diff)
downloadrails-bd96614101262e0ad0cc176ed8e2d95a5c17936b.tar.gz
rails-bd96614101262e0ad0cc176ed8e2d95a5c17936b.tar.bz2
rails-bd96614101262e0ad0cc176ed8e2d95a5c17936b.zip
Move old tests to a specific folder and add some delivery method tests.
Diffstat (limited to 'actionmailer/test/delivery_methods_test.rb')
-rw-r--r--actionmailer/test/delivery_methods_test.rb112
1 files changed, 95 insertions, 17 deletions
diff --git a/actionmailer/test/delivery_methods_test.rb b/actionmailer/test/delivery_methods_test.rb
index de3d54197d..5b2ce61ca9 100644
--- a/actionmailer/test/delivery_methods_test.rb
+++ b/actionmailer/test/delivery_methods_test.rb
@@ -4,20 +4,17 @@ require 'mail'
class MyCustomDelivery
end
-class DefaultsDeliveryMethodsTest < ActionMailer::TestCase
- def setup
- set_delivery_method :smtp
+class BogusDelivery
+ def initialize(*)
end
- def teardown
- restore_delivery_method
- end
-
- def test_should_be_the_default_smtp
- assert_equal :smtp, ActionMailer::Base.delivery_method
+ def deliver!(mail)
+ raise "failed"
end
+end
- def test_should_have_default_smtp_delivery_method_settings
+class DefaultsDeliveryMethodsTest < ActiveSupport::TestCase
+ test "default smtp settings" do
settings = { :address => "localhost",
:port => 25,
:domain => 'localhost.localdomain',
@@ -28,45 +25,126 @@ class DefaultsDeliveryMethodsTest < ActionMailer::TestCase
assert_equal settings, ActionMailer::Base.smtp_settings
end
- def test_should_have_default_file_delivery_method_settings
+ test "default file delivery settings" do
settings = {:location => "#{Dir.tmpdir}/mails"}
assert_equal settings, ActionMailer::Base.file_settings
end
- def test_should_have_default_sendmail_delivery_method_settings
+ test "default sendmail settings" do
settings = {:location => '/usr/sbin/sendmail',
:arguments => '-i -t'}
assert_equal settings, ActionMailer::Base.sendmail_settings
end
end
-class CustomDeliveryMethodsTest < ActionMailer::TestCase
+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
ActionMailer::Base.delivery_methods.delete(:custom)
end
- def test_allow_to_add_a_custom_delivery_method
+ test "allow to add custom delivery method" do
ActionMailer::Base.delivery_method = :custom
assert_equal :custom, ActionMailer::Base.delivery_method
end
- def test_allow_to_customize_custom_settings
+ test "allow to customize custom settings" do
ActionMailer::Base.custom_settings = { :foo => :bar }
assert_equal Hash[:foo => :bar], ActionMailer::Base.custom_settings
end
- def test_respond_to_custom_method_settings
+ test "respond to custom settings" do
assert_respond_to ActionMailer::Base, :custom_settings
assert_respond_to ActionMailer::Base, :custom_settings=
end
- def test_should_not_respond_for_invalid_method_settings
+ test "does not respond to unknown settings" do
assert_raise NoMethodError do
ActionMailer::Base.another_settings
end
end
end
+
+class MailDeliveryTest < ActiveSupport::TestCase
+ class DeliverMail < 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
+ DeliverMail.delivery_method = :smtp
+ DeliverMail.perform_deliveries = true
+ DeliverMail.raise_delivery_errors = true
+ end
+
+ test "ActionMailer should be told when Mail gets delivered" do
+ DeliverMail.deliveries.clear
+ DeliverMail.expects(:delivered_email).once
+ DeliverMail.welcome.deliver
+ assert_equal(1, DeliverMail.deliveries.length)
+ end
+
+ test "delivery method can be customized per instance" do
+ email = DeliverMail.welcome.deliver
+ assert_instance_of Mail::SMTP, email.delivery_method
+ email = DeliverMail.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
+ DeliverMail.delivery_method = :test
+ assert_equal :smtp, ActionMailer::Base.delivery_method
+ $BREAK = true
+ email = DeliverMail.welcome.deliver
+ assert_instance_of Mail::TestMailer, email.delivery_method
+ end
+
+ test "non registered delivery methods raises errors" do
+ DeliverMail.delivery_method = :unknown
+ assert_raise RuntimeError do
+ DeliverMail.welcome.deliver
+ end
+ end
+
+ test "does not perform deliveries if requested" do
+ DeliverMail.perform_deliveries = false
+ DeliverMail.deliveries.clear
+ DeliverMail.expects(:delivered_email).never
+ DeliverMail.welcome.deliver
+ assert_equal(0, DeliverMail.deliveries.length)
+ end
+
+ test "raise errors on bogus deliveries" do
+ DeliverMail.delivery_method = BogusDelivery
+ DeliverMail.deliveries.clear
+ DeliverMail.expects(:delivered_email).never
+ assert_raise RuntimeError do
+ DeliverMail.welcome.deliver
+ end
+ assert_equal(0, DeliverMail.deliveries.length)
+ end
+
+ test "does not raise errors on bogus deliveries if set" do
+ DeliverMail.delivery_method = BogusDelivery
+ DeliverMail.raise_delivery_errors = false
+ DeliverMail.deliveries.clear
+ DeliverMail.expects(:delivered_email).once
+ DeliverMail.welcome.deliver
+ assert_equal(1, DeliverMail.deliveries.length)
+ end
+end \ No newline at end of file