From 54cfb7b75ede8736c8bee1a4aa88e098e1df3889 Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Tue, 6 Nov 2018 03:13:46 +0000 Subject: [PATCH] Sort issues by due date in email reminders (#29771). Patch by Yuichi HARADA. git-svn-id: http://svn.redmine.org/redmine/trunk@17624 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/models/mailer.rb | 1 + test/unit/mailer_test.rb | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/app/models/mailer.rb b/app/models/mailer.rb index 99cae12ff..492ca976d 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -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 diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb index 41e886f5b..da259beea 100644 --- a/test/unit/mailer_test.rb +++ b/test/unit/mailer_test.rb @@ -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 -- 2.39.5