diff --git a/app/models/mailer.rb b/app/models/mailer.rb index f58a1c88d..c938d9687 100644 --- a/app/models/mailer.rb +++ b/app/models/mailer.rb @@ -74,8 +74,8 @@ class Mailer < ActionMailer::Base redmine_headers 'Project' => issue.project.identifier, 'Issue-Tracker' => issue.tracker.name, 'Issue-Id' => issue.id, - 'Issue-Author' => issue.author.login - redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to + 'Issue-Author' => issue.author.login, + 'Issue-Assignee' => assignee_for_redmine_header(issue) message_id issue references issue @author = issue.author @@ -106,8 +106,8 @@ class Mailer < ActionMailer::Base redmine_headers 'Project' => issue.project.identifier, 'Issue-Tracker' => issue.tracker.name, 'Issue-Id' => issue.id, - 'Issue-Author' => issue.author.login - redmine_headers 'Issue-Assignee' => issue.assigned_to.login if issue.assigned_to + 'Issue-Author' => issue.author.login, + 'Issue-Assignee' => assignee_for_redmine_header(issue) message_id journal references issue @author = journal.user @@ -760,7 +760,16 @@ class Mailer < ActionMailer::Base # Appends a Redmine header field (name is prepended with 'X-Redmine-') def redmine_headers(h) - h.each {|k, v| headers["X-Redmine-#{k}"] = v.to_s} + h.compact.each {|k, v| headers["X-Redmine-#{k}"] = v.to_s} + end + + def assignee_for_redmine_header(issue) + case issue&.assigned_to + when User + issue.assigned_to.login + when Group + "Group (#{issue.assigned_to.name})" + end end # Singleton class method is public diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb index b25e17427..da12788f8 100644 --- a/test/unit/mailer_test.rb +++ b/test/unit/mailer_test.rb @@ -219,6 +219,33 @@ class MailerTest < ActiveSupport::TestCase assert_equal issue.author.login, mail.header['X-Redmine-Sender'].to_s end + def test_email_headers_should_not_include_assignee_when_not_assigned + issue = Issue.find(6) + issue.init_journal(User.current) + issue.update(:status_id => 4) + issue.update(:assigned_to_id => nil) + mail = last_email + assert_not mail.header['X-Redmine-Issue-Assignee'] + end + + def test_email_headers_should_include_assignee_when_assigned + issue = Issue.find(6) + issue.init_journal(User.current) + issue.update(:assigned_to_id => 2) + mail = last_email + assert_equal 'jsmith', mail.header['X-Redmine-Issue-Assignee'].to_s + end + + def test_email_headers_should_include_assignee_if_assigned_to_group + issue = Issue.find(6) + with_settings :issue_group_assignment => 1 do + issue.init_journal(User.current) + issue.update(:assigned_to_id => 10) + end + mail = last_email + assert_equal 'Group (A Team)', mail.header['X-Redmine-Issue-Assignee'].to_s + end + def test_plain_text_mail Setting.plain_text_mail = 1 journal = Journal.find(2)