]> source.dussan.org Git - redmine.git/commitdiff
Fixed that test_email raises an error with #deliver_later (#26791).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 6 Oct 2018 16:07:45 +0000 (16:07 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 6 Oct 2018 16:07:45 +0000 (16:07 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@17587 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mailer.rb
config/environments/test.rb
test/unit/mailer_test.rb

index ab1a6cf4c962130dd1bef1e9c211737c846cfc74..8f4262950fe01ace730eaa341a18b565576d9925 100644 (file)
@@ -107,48 +107,11 @@ class Mailer < ActionMailer::Base
           "method*, or 3. use a custom Active Job instead of #deliver_later."
       else
         args = 'Mailer', @action.to_s, delivery_method.to_s, *@args
-        DeliveryJob.set(options).perform_later(*args)
+        ::ActionMailer::DeliveryJob.set(options).perform_later(*args)
       end
     end
   end
 
-  class DeliveryJob < ActionMailer::DeliveryJob
-    module Arguments
-      extend ActiveJob::Arguments
-      extend self
-
-      private
-
-      def serialize_argument(argument)
-        # Ensure that ActiveRecord::Base objects are fully serialized for mail
-        # sending. This circumvents the globalid gem for this job.
-        if argument.is_a?(ActiveRecord::Base)
-          argument.to_yaml
-        else
-          super
-        end
-      end
-
-      def deserialize_argument(argument)
-        if argument.is_a?(ActiveRecord::Base)
-          argument
-        else
-          super
-        end
-      end
-    end
-
-    private
-
-    def serialize_arguments(serialized_args)
-      Arguments.serialize(serialized_args)
-    end
-
-    def deserialize_arguments(serialized_args)
-      Arguments.deserialize(serialized_args)
-    end
-  end
-
   def process(action, *args)
     user = args.shift
     raise ArgumentError, "First argument has to be a user, was #{user.inspect}" unless user.is_a?(User)
@@ -701,9 +664,9 @@ class Mailer < ActionMailer::Base
   #
   # Example:
   #   test_email => Mail::Message object
-  def test_email
+  def test_email(user)
     @url = url_for(:controller => 'welcome')
-    mail :to => User.current.mail,
+    mail :to => user.mail,
       :subject => 'Redmine test'
   end
 
@@ -712,7 +675,7 @@ class Mailer < ActionMailer::Base
   # Example:
   #   Mailer.test_email(user).deliver => send an email to the given user
   def self.test_email(user)
-    MultiMessage.new(:test_email).for(user)
+    MultiMessage.new(:test_email, user).for(user)
   end
 
   # Sends reminders to issue assignees
index 645996dce30b316afa56c0ebd71bcab6c8855c32..e1a3252b0283cfaade91f6e0f9fd2d0c406e5a12 100644 (file)
@@ -22,6 +22,9 @@ Rails.application.configure do
   # The :test delivery method accumulates sent emails in the
   # ActionMailer::Base.deliveries array.
   config.action_mailer.delivery_method = :test
+  
+  # Disable Async delivery
+  config.active_job.queue_adapter = :inline
 
   # Disable request forgery protection in test environment.
   config.action_controller.allow_forgery_protection = false
index 0908e9e6339429d5b0a7652e11a0399af7a9ef77..5d2ac0d314aa084c9cc74c0ad4b5763d82eed5ae 100644 (file)
@@ -605,6 +605,12 @@ class MailerTest < ActiveSupport::TestCase
     end
   end
 
+  def test_test_email_later
+    user = User.find(1)
+    assert Mailer.test_email(user).deliver_later
+    assert_equal 1, ActionMailer::Base.deliveries.size
+  end
+
   def test_reminders
     Mailer.reminders(:days => 42)
     assert_equal 1, ActionMailer::Base.deliveries.size