]> source.dussan.org Git - redmine.git/commitdiff
Sort issues by due date in email reminders (#29771).
authorGo MAEDA <maeda@farend.jp>
Tue, 6 Nov 2018 03:13:46 +0000 (03:13 +0000)
committerGo MAEDA <maeda@farend.jp>
Tue, 6 Nov 2018 03:13:46 +0000 (03:13 +0000)
Patch by Yuichi HARADA.

git-svn-id: http://svn.redmine.org/redmine/trunk@17624 e93f8b46-1217-0410-a6f0-8f06a7374b81

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

index 99cae12ffa61062c41cf081d4a3491435f06a533..492ca976d7f00aa4bb05005a05acae9c31faf372 100644 (file)
@@ -584,6 +584,7 @@ class Mailer < ActionMailer::Base
     issues_by_assignee.each do |assignee, issues|
       if assignee.is_a?(User) && assignee.active? && issues.present?
         visible_issues = issues.select {|i| i.visible?(assignee)}
+        visible_issues.sort!{|a, b| (a.due_date <=> b.due_date).nonzero? || (a.id <=> b.id)}
         reminder(assignee, visible_issues, days).deliver_later if visible_issues.present?
       end
     end
index 41e886f5b169248542dc79d374a4e4e81840e750..da259beead50019b3ea9e0f1bba2f133719493a3 100644 (file)
@@ -621,6 +621,27 @@ class MailerTest < ActiveSupport::TestCase
     end
   end
 
+  def test_reminders_should_sort_issues_by_due_date
+    user = User.find(2)
+    Issue.generate!(:assigned_to => user, :due_date => 2.days.from_now, :subject => 'quux')
+    Issue.generate!(:assigned_to => user, :due_date => 0.days.from_now, :subject => 'baz')
+    Issue.generate!(:assigned_to => user, :due_date => 1.days.from_now, :subject => 'qux')
+    Issue.generate!(:assigned_to => user, :due_date => -1.days.from_now, :subject => 'foo')
+    Issue.generate!(:assigned_to => user, :due_date => -1.days.from_now, :subject => 'bar')
+    ActionMailer::Base.deliveries.clear
+
+    Mailer.reminders(:days => 7, :users => [user.id])
+    assert_equal 1, ActionMailer::Base.deliveries.size
+    assert_select_email do
+      assert_select 'li', 5
+      assert_select 'li:nth-child(1)', /foo/
+      assert_select 'li:nth-child(2)', /bar/
+      assert_select 'li:nth-child(3)', /baz/
+      assert_select 'li:nth-child(4)', /qux/
+      assert_select 'li:nth-child(5)', /quux/
+    end
+  end
+
   def test_security_notification
     set_language_if_valid User.find(1).language
     with_settings :emails_footer => "footer without link" do