##// END OF EJS Templates
Adds an option to send email on "Assignee updated" in application settings (#16362)....
Jean-Philippe Lang -
r12699:b69587819348
parent child
Show More
@@ -80,15 +80,20 class Journal < ActiveRecord::Base
80 end
80 end
81 end
81 end
82
82
83 # Returns the JournalDetail for the given attribute, or nil if the attribute
84 # was not updated
85 def detail_for_attribute(attribute)
86 details.detect {|detail| detail.prop_key == attribute}
87 end
88
83 # Returns the new status if the journal contains a status change, otherwise nil
89 # Returns the new status if the journal contains a status change, otherwise nil
84 def new_status
90 def new_status
85 c = details.detect {|detail| detail.prop_key == 'status_id'}
91 s = new_value_for('status_id')
86 (c && c.value) ? IssueStatus.find_by_id(c.value.to_i) : nil
92 s ? IssueStatus.find_by_id(s.to_i) : nil
87 end
93 end
88
94
89 def new_value_for(prop)
95 def new_value_for(prop)
90 c = details.detect {|detail| detail.prop_key == prop}
96 detail_for_attribute(prop).try(:value)
91 c ? c.value : nil
92 end
97 end
93
98
94 def editable_by?(usr)
99 def editable_by?(usr)
@@ -185,6 +190,7 class Journal < ActiveRecord::Base
185 if notify? && (Setting.notified_events.include?('issue_updated') ||
190 if notify? && (Setting.notified_events.include?('issue_updated') ||
186 (Setting.notified_events.include?('issue_note_added') && notes.present?) ||
191 (Setting.notified_events.include?('issue_note_added') && notes.present?) ||
187 (Setting.notified_events.include?('issue_status_updated') && new_status.present?) ||
192 (Setting.notified_events.include?('issue_status_updated') && new_status.present?) ||
193 (Setting.notified_events.include?('issue_assigned_to_updated') && new_value_for('assigned_to_id').present?) ||
188 (Setting.notified_events.include?('issue_priority_updated') && new_value_for('priority_id').present?)
194 (Setting.notified_events.include?('issue_priority_updated') && new_value_for('priority_id').present?)
189 )
195 )
190 Mailer.deliver_issue_edit(self)
196 Mailer.deliver_issue_edit(self)
@@ -12,6 +12,7 module Redmine
12 notifications << Notifiable.new('issue_updated')
12 notifications << Notifiable.new('issue_updated')
13 notifications << Notifiable.new('issue_note_added', 'issue_updated')
13 notifications << Notifiable.new('issue_note_added', 'issue_updated')
14 notifications << Notifiable.new('issue_status_updated', 'issue_updated')
14 notifications << Notifiable.new('issue_status_updated', 'issue_updated')
15 notifications << Notifiable.new('issue_assigned_to_updated', 'issue_updated')
15 notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
16 notifications << Notifiable.new('issue_priority_updated', 'issue_updated')
16 notifications << Notifiable.new('news_added')
17 notifications << Notifiable.new('news_added')
17 notifications << Notifiable.new('news_comment_added')
18 notifications << Notifiable.new('news_comment_added')
@@ -87,7 +87,6 class JournalObserverTest < ActiveSupport::TestCase
87 assert_equal 0, ActionMailer::Base.deliveries.size
87 assert_equal 0, ActionMailer::Base.deliveries.size
88 end
88 end
89
89
90 # context: issue_status_updated notified_events
91 def test_create_should_send_email_notification_with_issue_status_updated
90 def test_create_should_send_email_notification_with_issue_status_updated
92 issue = Issue.first
91 issue = Issue.first
93 user = User.first
92 user = User.first
@@ -112,7 +111,44 class JournalObserverTest < ActiveSupport::TestCase
112 assert_equal 0, ActionMailer::Base.deliveries.size
111 assert_equal 0, ActionMailer::Base.deliveries.size
113 end
112 end
114
113
115 # context: issue_priority_updated notified_events
114 def test_create_without_status_update_should_not_send_email_notification_with_issue_status_updated
115 issue = Issue.first
116 user = User.first
117 issue.init_journal(user, issue)
118 issue.subject = "No status update"
119
120 with_settings :notified_events => %w(issue_status_updated) do
121 assert issue.save
122 end
123 assert_equal 0, ActionMailer::Base.deliveries.size
124 end
125
126 def test_create_should_send_email_notification_with_issue_assignee_updated
127 issue = Issue.generate!(:assigned_to_id => 2)
128 ActionMailer::Base.deliveries.clear
129 user = User.first
130 issue.init_journal(user, issue)
131 issue.assigned_to = User.find(3)
132
133 with_settings :notified_events => %w(issue_assigned_to_updated) do
134 assert issue.save
135 end
136 assert_equal 1, ActionMailer::Base.deliveries.size
137 end
138
139 def test_create_should_not_send_email_notification_without_issue_assignee_updated
140 issue = Issue.generate!(:assigned_to_id => 2)
141 ActionMailer::Base.deliveries.clear
142 user = User.first
143 issue.init_journal(user, issue)
144 issue.assigned_to = User.find(3)
145
146 with_settings :notified_events => [] do
147 assert issue.save
148 end
149 assert_equal 0, ActionMailer::Base.deliveries.size
150 end
151
116 def test_create_should_send_email_notification_with_issue_priority_updated
152 def test_create_should_send_email_notification_with_issue_priority_updated
117 issue = Issue.first
153 issue = Issue.first
118 user = User.first
154 user = User.first
@@ -24,7 +24,7 class Redmine::NotifiableTest < ActiveSupport::TestCase
24 def test_all
24 def test_all
25 assert_equal 12, Redmine::Notifiable.all.length
25 assert_equal 12, Redmine::Notifiable.all.length
26
26
27 %w(issue_added issue_updated issue_note_added issue_status_updated issue_priority_updated news_added news_comment_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
27 %w(issue_added issue_updated issue_note_added issue_status_updated issue_status_updated issue_priority_updated news_added news_comment_added document_added file_added message_posted wiki_content_added wiki_content_updated).each do |notifiable|
28 assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
28 assert Redmine::Notifiable.all.collect(&:name).include?(notifiable), "missing #{notifiable}"
29 end
29 end
30 end
30 end
General Comments 0
You need to be logged in to leave comments. Login now