From ace74974cf3575bbd3bf7ff4d8a83c3100fd22a9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Valim=20and=20Mikel=20Lindsaar?=
 <pair@programming.com>
Date: Mon, 25 Jan 2010 21:47:03 +1100
Subject: Got AM working with Mail yield on delivery_handler and updated tests

---
 actionmailer/actionmailer.gemspec                  | 2 +-
 actionmailer/lib/action_mailer/base.rb             | 9 +--------
 actionmailer/lib/action_mailer/delivery_methods.rb | 4 ++--
 actionmailer/test/base_test.rb                     | 7 +++++++
 actionmailer/test/delivery_methods_test.rb         | 4 ++--
 actionmailer/test/old_base/mail_service_test.rb    | 8 ++++++++
 actionmailer/test/old_base/url_test.rb             | 2 ++
 7 files changed, 23 insertions(+), 13 deletions(-)

(limited to 'actionmailer')

diff --git a/actionmailer/actionmailer.gemspec b/actionmailer/actionmailer.gemspec
index 4f53c709c4..a3d466c986 100644
--- a/actionmailer/actionmailer.gemspec
+++ b/actionmailer/actionmailer.gemspec
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
   s.homepage = "http://www.rubyonrails.org"
 
   s.add_dependency('actionpack', '= 3.0.pre')
-  s.add_dependency('mail', '~> 2.0.5')
+  s.add_dependency('mail', '~> 2.0.6')
 
   s.files = Dir['CHANGELOG', 'README', 'MIT-LICENSE', 'lib/**/*']
   s.has_rdoc = true
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index 4e5e1bbb29..47d0ffaf68 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -330,14 +330,7 @@ module ActionMailer #:nodoc:
         ActiveSupport::Notifications.instrument("action_mailer.deliver") do |payload|
           self.set_payload_for_mail(payload, mail)
 
-          if mail.perform_deliveries
-            begin
-              mail.deliver!
-            rescue Exception => e
-              raise e if mail.raise_delivery_errors
-            end
-            Mail.deliveries << mail
-          end
+          yield # Let Mail do the delivery actions
 
         end
       end
diff --git a/actionmailer/lib/action_mailer/delivery_methods.rb b/actionmailer/lib/action_mailer/delivery_methods.rb
index 7a6b410932..34bfe6000a 100644
--- a/actionmailer/lib/action_mailer/delivery_methods.rb
+++ b/actionmailer/lib/action_mailer/delivery_methods.rb
@@ -40,8 +40,8 @@ module ActionMailer
     end
 
     module ClassMethods
-      # Provides a list of emails that have been delivered by Mail
-      delegate :deliveries, :deliveries=, :to => Mail
+      # Provides a list of emails that have been delivered by Mail::TestMailer
+      delegate :deliveries, :deliveries=, :to => Mail::TestMailer
 
       # Adds a new delivery method through the given class using the given symbol
       # as alias and the default options supplied:
diff --git a/actionmailer/test/base_test.rb b/actionmailer/test/base_test.rb
index 81e1df3911..0705f22df8 100644
--- a/actionmailer/test/base_test.rb
+++ b/actionmailer/test/base_test.rb
@@ -363,6 +363,13 @@ class BaseTest < ActiveSupport::TestCase
     BaseMailer.welcome.deliver
     assert_equal(1, BaseMailer.deliveries.length)
   end
+  
+  test "calling deliver, ActionMailer should yield back to mail to let it call :do_delivery on itself" do
+    mail = Mail::Message.new
+    mail.expects(:do_delivery).once
+    BaseMailer.expects(:welcome).returns(mail)
+    BaseMailer.welcome.deliver
+  end
 
   protected
 
diff --git a/actionmailer/test/delivery_methods_test.rb b/actionmailer/test/delivery_methods_test.rb
index e70e8acd9b..4907ca0903 100644
--- a/actionmailer/test/delivery_methods_test.rb
+++ b/actionmailer/test/delivery_methods_test.rb
@@ -159,12 +159,12 @@ class MailDeliveryTest < ActiveSupport::TestCase
     end
   end
   
-  test "increments the deliveries collection on bogus deliveries if set to ignore" do
+  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(1, DeliveryMailer.deliveries.length)
+    assert_equal(0, DeliveryMailer.deliveries.length)
   end
   
 end
\ No newline at end of file
diff --git a/actionmailer/test/old_base/mail_service_test.rb b/actionmailer/test/old_base/mail_service_test.rb
index 2e33abf9d6..fb784328bc 100644
--- a/actionmailer/test/old_base/mail_service_test.rb
+++ b/actionmailer/test/old_base/mail_service_test.rb
@@ -387,6 +387,8 @@ class ActionMailerTest < Test::Unit::TestCase
   end
 
   def test_signed_up
+    TestMailer.delivery_method = :test
+
     Time.stubs(:now => Time.now)
 
     expected = new_mail
@@ -533,6 +535,8 @@ class ActionMailerTest < Test::Unit::TestCase
   end
 
   def test_reply_to
+    TestMailer.delivery_method = :test
+
     expected = new_mail
 
     expected.to       = @recipient
@@ -567,6 +571,8 @@ class ActionMailerTest < Test::Unit::TestCase
   end
 
   def test_iso_charset
+    TestMailer.delivery_method = :test
+
     expected = new_mail( "iso-8859-1" )
     expected.to      = @recipient
     expected.subject = encode "testing isø charsets", "iso-8859-1"
@@ -601,6 +607,7 @@ class ActionMailerTest < Test::Unit::TestCase
   end
 
   def test_unencoded_subject
+    TestMailer.delivery_method = :test
     expected = new_mail
     expected.to      = @recipient
     expected.subject = "testing unencoded subject"
@@ -1029,6 +1036,7 @@ EOF
   end
 
   def test_with_mail_object_deliver
+    TestMailer.delivery_method = :test
     mail = TestMailer.headers_with_nonalpha_chars(@recipient)
     assert_nothing_raised { mail.deliver }
     assert_equal 1, TestMailer.deliveries.length
diff --git a/actionmailer/test/old_base/url_test.rb b/actionmailer/test/old_base/url_test.rb
index 10b6a36efd..5affb47997 100644
--- a/actionmailer/test/old_base/url_test.rb
+++ b/actionmailer/test/old_base/url_test.rb
@@ -54,6 +54,8 @@ class ActionMailerUrlTest < Test::Unit::TestCase
   end
 
   def test_signed_up_with_url
+    TestMailer.delivery_method = :test
+    
     ActionController::Routing::Routes.draw do |map|
       map.connect ':controller/:action/:id'
       map.welcome 'welcome', :controller=>"foo", :action=>"bar"
-- 
cgit v1.2.3