@@ -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 |
|
|
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