##// END OF EJS Templates
Additional tests for email From header (#9564)....
Jean-Philippe Lang -
r7687:7afb7752867e
parent child
Show More
@@ -1,479 +1,489
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 #
3 #
4 # This program is free software; you can redistribute it and/or
4 # This program is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU General Public License
5 # modify it under the terms of the GNU General Public License
6 # as published by the Free Software Foundation; either version 2
6 # as published by the Free Software Foundation; either version 2
7 # of the License, or (at your option) any later version.
7 # of the License, or (at your option) any later version.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU General Public License
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
18 require File.expand_path('../../test_helper', __FILE__)
18 require File.expand_path('../../test_helper', __FILE__)
19
19
20 class MailerTest < ActiveSupport::TestCase
20 class MailerTest < ActiveSupport::TestCase
21 include Redmine::I18n
21 include Redmine::I18n
22 include ActionController::Assertions::SelectorAssertions
22 include ActionController::Assertions::SelectorAssertions
23 fixtures :projects, :enabled_modules, :issues, :users, :members,
23 fixtures :projects, :enabled_modules, :issues, :users, :members,
24 :member_roles, :roles, :documents, :attachments, :news,
24 :member_roles, :roles, :documents, :attachments, :news,
25 :tokens, :journals, :journal_details, :changesets, :trackers,
25 :tokens, :journals, :journal_details, :changesets, :trackers,
26 :issue_statuses, :enumerations, :messages, :boards, :repositories,
26 :issue_statuses, :enumerations, :messages, :boards, :repositories,
27 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
27 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
28 :versions,
28 :versions,
29 :comments
29 :comments
30
30
31 def setup
31 def setup
32 ActionMailer::Base.deliveries.clear
32 ActionMailer::Base.deliveries.clear
33 Setting.host_name = 'mydomain.foo'
33 Setting.host_name = 'mydomain.foo'
34 Setting.protocol = 'http'
34 Setting.protocol = 'http'
35 Setting.plain_text_mail = '0'
35 Setting.plain_text_mail = '0'
36 end
36 end
37
37
38 def test_generated_links_in_emails
38 def test_generated_links_in_emails
39 Setting.host_name = 'mydomain.foo'
39 Setting.host_name = 'mydomain.foo'
40 Setting.protocol = 'https'
40 Setting.protocol = 'https'
41
41
42 journal = Journal.find(2)
42 journal = Journal.find(2)
43 assert Mailer.deliver_issue_edit(journal)
43 assert Mailer.deliver_issue_edit(journal)
44
44
45 mail = ActionMailer::Base.deliveries.last
45 mail = ActionMailer::Base.deliveries.last
46 assert_kind_of TMail::Mail, mail
46 assert_kind_of TMail::Mail, mail
47
47
48 assert_select_email do
48 assert_select_email do
49 # link to the main ticket
49 # link to the main ticket
50 assert_select "a[href=?]",
50 assert_select "a[href=?]",
51 "https://mydomain.foo/issues/1",
51 "https://mydomain.foo/issues/1",
52 :text => "Bug #1: Can't print recipes"
52 :text => "Bug #1: Can't print recipes"
53 # link to a referenced ticket
53 # link to a referenced ticket
54 assert_select "a[href=?][title=?]",
54 assert_select "a[href=?][title=?]",
55 "https://mydomain.foo/issues/2",
55 "https://mydomain.foo/issues/2",
56 "Add ingredients categories (Assigned)",
56 "Add ingredients categories (Assigned)",
57 :text => "#2"
57 :text => "#2"
58 # link to a changeset
58 # link to a changeset
59 assert_select "a[href=?][title=?]",
59 assert_select "a[href=?][title=?]",
60 "https://mydomain.foo/projects/ecookbook/repository/revisions/2",
60 "https://mydomain.foo/projects/ecookbook/repository/revisions/2",
61 "This commit fixes #1, #2 and references #1 &amp; #3",
61 "This commit fixes #1, #2 and references #1 &amp; #3",
62 :text => "r2"
62 :text => "r2"
63 end
63 end
64 end
64 end
65
65
66 def test_generated_links_with_prefix
66 def test_generated_links_with_prefix
67 relative_url_root = Redmine::Utils.relative_url_root
67 relative_url_root = Redmine::Utils.relative_url_root
68 Setting.host_name = 'mydomain.foo/rdm'
68 Setting.host_name = 'mydomain.foo/rdm'
69 Setting.protocol = 'http'
69 Setting.protocol = 'http'
70 Redmine::Utils.relative_url_root = '/rdm'
70 Redmine::Utils.relative_url_root = '/rdm'
71
71
72 journal = Journal.find(2)
72 journal = Journal.find(2)
73 assert Mailer.deliver_issue_edit(journal)
73 assert Mailer.deliver_issue_edit(journal)
74
74
75 mail = ActionMailer::Base.deliveries.last
75 mail = ActionMailer::Base.deliveries.last
76 assert_kind_of TMail::Mail, mail
76 assert_kind_of TMail::Mail, mail
77
77
78 assert_select_email do
78 assert_select_email do
79 # link to the main ticket
79 # link to the main ticket
80 assert_select "a[href=?]",
80 assert_select "a[href=?]",
81 "http://mydomain.foo/rdm/issues/1",
81 "http://mydomain.foo/rdm/issues/1",
82 :text => "Bug #1: Can't print recipes"
82 :text => "Bug #1: Can't print recipes"
83 # link to a referenced ticket
83 # link to a referenced ticket
84 assert_select "a[href=?][title=?]",
84 assert_select "a[href=?][title=?]",
85 "http://mydomain.foo/rdm/issues/2",
85 "http://mydomain.foo/rdm/issues/2",
86 "Add ingredients categories (Assigned)",
86 "Add ingredients categories (Assigned)",
87 :text => "#2"
87 :text => "#2"
88 # link to a changeset
88 # link to a changeset
89 assert_select "a[href=?][title=?]",
89 assert_select "a[href=?][title=?]",
90 "http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2",
90 "http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2",
91 "This commit fixes #1, #2 and references #1 &amp; #3",
91 "This commit fixes #1, #2 and references #1 &amp; #3",
92 :text => "r2"
92 :text => "r2"
93 end
93 end
94 ensure
94 ensure
95 # restore it
95 # restore it
96 Redmine::Utils.relative_url_root = relative_url_root
96 Redmine::Utils.relative_url_root = relative_url_root
97 end
97 end
98
98
99 def test_generated_links_with_prefix_and_no_relative_url_root
99 def test_generated_links_with_prefix_and_no_relative_url_root
100 relative_url_root = Redmine::Utils.relative_url_root
100 relative_url_root = Redmine::Utils.relative_url_root
101 Setting.host_name = 'mydomain.foo/rdm'
101 Setting.host_name = 'mydomain.foo/rdm'
102 Setting.protocol = 'http'
102 Setting.protocol = 'http'
103 Redmine::Utils.relative_url_root = nil
103 Redmine::Utils.relative_url_root = nil
104
104
105 journal = Journal.find(2)
105 journal = Journal.find(2)
106 assert Mailer.deliver_issue_edit(journal)
106 assert Mailer.deliver_issue_edit(journal)
107
107
108 mail = ActionMailer::Base.deliveries.last
108 mail = ActionMailer::Base.deliveries.last
109 assert_kind_of TMail::Mail, mail
109 assert_kind_of TMail::Mail, mail
110
110
111 assert_select_email do
111 assert_select_email do
112 # link to the main ticket
112 # link to the main ticket
113 assert_select "a[href=?]",
113 assert_select "a[href=?]",
114 "http://mydomain.foo/rdm/issues/1",
114 "http://mydomain.foo/rdm/issues/1",
115 :text => "Bug #1: Can't print recipes"
115 :text => "Bug #1: Can't print recipes"
116 # link to a referenced ticket
116 # link to a referenced ticket
117 assert_select "a[href=?][title=?]",
117 assert_select "a[href=?][title=?]",
118 "http://mydomain.foo/rdm/issues/2",
118 "http://mydomain.foo/rdm/issues/2",
119 "Add ingredients categories (Assigned)",
119 "Add ingredients categories (Assigned)",
120 :text => "#2"
120 :text => "#2"
121 # link to a changeset
121 # link to a changeset
122 assert_select "a[href=?][title=?]",
122 assert_select "a[href=?][title=?]",
123 "http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2",
123 "http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2",
124 "This commit fixes #1, #2 and references #1 &amp; #3",
124 "This commit fixes #1, #2 and references #1 &amp; #3",
125 :text => "r2"
125 :text => "r2"
126 end
126 end
127 ensure
127 ensure
128 # restore it
128 # restore it
129 Redmine::Utils.relative_url_root = relative_url_root
129 Redmine::Utils.relative_url_root = relative_url_root
130 end
130 end
131
131
132 def test_email_headers
132 def test_email_headers
133 issue = Issue.find(1)
133 issue = Issue.find(1)
134 Mailer.deliver_issue_add(issue)
134 Mailer.deliver_issue_add(issue)
135 mail = ActionMailer::Base.deliveries.last
135 mail = ActionMailer::Base.deliveries.last
136 assert_not_nil mail
136 assert_not_nil mail
137 assert_equal 'OOF', mail.header_string('X-Auto-Response-Suppress')
137 assert_equal 'OOF', mail.header_string('X-Auto-Response-Suppress')
138 assert_equal 'auto-generated', mail.header_string('Auto-Submitted')
138 assert_equal 'auto-generated', mail.header_string('Auto-Submitted')
139 end
139 end
140
140
141 def test_plain_text_mail
141 def test_plain_text_mail
142 Setting.plain_text_mail = 1
142 Setting.plain_text_mail = 1
143 journal = Journal.find(2)
143 journal = Journal.find(2)
144 Mailer.deliver_issue_edit(journal)
144 Mailer.deliver_issue_edit(journal)
145 mail = ActionMailer::Base.deliveries.last
145 mail = ActionMailer::Base.deliveries.last
146 assert_equal "text/plain", mail.content_type
146 assert_equal "text/plain", mail.content_type
147 assert_equal 0, mail.parts.size
147 assert_equal 0, mail.parts.size
148 assert !mail.encoded.include?('href')
148 assert !mail.encoded.include?('href')
149 end
149 end
150
150
151 def test_html_mail
151 def test_html_mail
152 Setting.plain_text_mail = 0
152 Setting.plain_text_mail = 0
153 journal = Journal.find(2)
153 journal = Journal.find(2)
154 Mailer.deliver_issue_edit(journal)
154 Mailer.deliver_issue_edit(journal)
155 mail = ActionMailer::Base.deliveries.last
155 mail = ActionMailer::Base.deliveries.last
156 assert_equal 2, mail.parts.size
156 assert_equal 2, mail.parts.size
157 assert mail.encoded.include?('href')
157 assert mail.encoded.include?('href')
158 end
158 end
159
159
160 def test_mail_from_with_phrase
160 def test_from_header
161 with_settings :mail_from => 'redmine@example.net' do
162 Mailer.deliver_test(User.find(1))
163 end
164 mail = ActionMailer::Base.deliveries.last
165 assert_not_nil mail
166 assert_equal 'redmine@example.net', mail.from_addrs.first.address
167 end
168
169 def test_from_header_with_phrase
161 with_settings :mail_from => 'Redmine app <redmine@example.net>' do
170 with_settings :mail_from => 'Redmine app <redmine@example.net>' do
162 Mailer.deliver_test(User.find(1))
171 Mailer.deliver_test(User.find(1))
163 end
172 end
164 mail = ActionMailer::Base.deliveries.last
173 mail = ActionMailer::Base.deliveries.last
165 assert_not_nil mail
174 assert_not_nil mail
175 assert_equal 'redmine@example.net', mail.from_addrs.first.address
166 assert_equal 'Redmine app', mail.from_addrs.first.name
176 assert_equal 'Redmine app', mail.from_addrs.first.name
167 end
177 end
168
178
169 def test_should_not_send_email_without_recipient
179 def test_should_not_send_email_without_recipient
170 news = News.find(:first)
180 news = News.find(:first)
171 user = news.author
181 user = news.author
172 # Remove members except news author
182 # Remove members except news author
173 news.project.memberships.each {|m| m.destroy unless m.user == user}
183 news.project.memberships.each {|m| m.destroy unless m.user == user}
174
184
175 user.pref[:no_self_notified] = false
185 user.pref[:no_self_notified] = false
176 user.pref.save
186 user.pref.save
177 User.current = user
187 User.current = user
178 Mailer.deliver_news_added(news.reload)
188 Mailer.deliver_news_added(news.reload)
179 assert_equal 1, last_email.bcc.size
189 assert_equal 1, last_email.bcc.size
180
190
181 # nobody to notify
191 # nobody to notify
182 user.pref[:no_self_notified] = true
192 user.pref[:no_self_notified] = true
183 user.pref.save
193 user.pref.save
184 User.current = user
194 User.current = user
185 ActionMailer::Base.deliveries.clear
195 ActionMailer::Base.deliveries.clear
186 Mailer.deliver_news_added(news.reload)
196 Mailer.deliver_news_added(news.reload)
187 assert ActionMailer::Base.deliveries.empty?
197 assert ActionMailer::Base.deliveries.empty?
188 end
198 end
189
199
190 def test_issue_add_message_id
200 def test_issue_add_message_id
191 issue = Issue.find(1)
201 issue = Issue.find(1)
192 Mailer.deliver_issue_add(issue)
202 Mailer.deliver_issue_add(issue)
193 mail = ActionMailer::Base.deliveries.last
203 mail = ActionMailer::Base.deliveries.last
194 assert_not_nil mail
204 assert_not_nil mail
195 assert_equal Mailer.message_id_for(issue), mail.message_id
205 assert_equal Mailer.message_id_for(issue), mail.message_id
196 assert_nil mail.references
206 assert_nil mail.references
197 end
207 end
198
208
199 def test_issue_edit_message_id
209 def test_issue_edit_message_id
200 journal = Journal.find(1)
210 journal = Journal.find(1)
201 Mailer.deliver_issue_edit(journal)
211 Mailer.deliver_issue_edit(journal)
202 mail = ActionMailer::Base.deliveries.last
212 mail = ActionMailer::Base.deliveries.last
203 assert_not_nil mail
213 assert_not_nil mail
204 assert_equal Mailer.message_id_for(journal), mail.message_id
214 assert_equal Mailer.message_id_for(journal), mail.message_id
205 assert_equal Mailer.message_id_for(journal.issue), mail.references.first.to_s
215 assert_equal Mailer.message_id_for(journal.issue), mail.references.first.to_s
206 end
216 end
207
217
208 def test_message_posted_message_id
218 def test_message_posted_message_id
209 message = Message.find(1)
219 message = Message.find(1)
210 Mailer.deliver_message_posted(message)
220 Mailer.deliver_message_posted(message)
211 mail = ActionMailer::Base.deliveries.last
221 mail = ActionMailer::Base.deliveries.last
212 assert_not_nil mail
222 assert_not_nil mail
213 assert_equal Mailer.message_id_for(message), mail.message_id
223 assert_equal Mailer.message_id_for(message), mail.message_id
214 assert_nil mail.references
224 assert_nil mail.references
215 assert_select_email do
225 assert_select_email do
216 # link to the message
226 # link to the message
217 assert_select "a[href=?]",
227 assert_select "a[href=?]",
218 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.id}",
228 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.id}",
219 :text => message.subject
229 :text => message.subject
220 end
230 end
221 end
231 end
222
232
223 def test_reply_posted_message_id
233 def test_reply_posted_message_id
224 message = Message.find(3)
234 message = Message.find(3)
225 Mailer.deliver_message_posted(message)
235 Mailer.deliver_message_posted(message)
226 mail = ActionMailer::Base.deliveries.last
236 mail = ActionMailer::Base.deliveries.last
227 assert_not_nil mail
237 assert_not_nil mail
228 assert_equal Mailer.message_id_for(message), mail.message_id
238 assert_equal Mailer.message_id_for(message), mail.message_id
229 assert_equal Mailer.message_id_for(message.parent), mail.references.first.to_s
239 assert_equal Mailer.message_id_for(message.parent), mail.references.first.to_s
230 assert_select_email do
240 assert_select_email do
231 # link to the reply
241 # link to the reply
232 assert_select "a[href=?]",
242 assert_select "a[href=?]",
233 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.root.id}?r=#{message.id}#message-#{message.id}",
243 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.root.id}?r=#{message.id}#message-#{message.id}",
234 :text => message.subject
244 :text => message.subject
235 end
245 end
236 end
246 end
237
247
238 context("#issue_add") do
248 context("#issue_add") do
239 setup do
249 setup do
240 ActionMailer::Base.deliveries.clear
250 ActionMailer::Base.deliveries.clear
241 Setting.bcc_recipients = '1'
251 Setting.bcc_recipients = '1'
242 @issue = Issue.find(1)
252 @issue = Issue.find(1)
243 end
253 end
244
254
245 should "notify project members" do
255 should "notify project members" do
246 assert Mailer.deliver_issue_add(@issue)
256 assert Mailer.deliver_issue_add(@issue)
247 assert last_email.bcc.include?('dlopper@somenet.foo')
257 assert last_email.bcc.include?('dlopper@somenet.foo')
248 end
258 end
249
259
250 should "not notify project members that are not allow to view the issue" do
260 should "not notify project members that are not allow to view the issue" do
251 Role.find(2).remove_permission!(:view_issues)
261 Role.find(2).remove_permission!(:view_issues)
252 assert Mailer.deliver_issue_add(@issue)
262 assert Mailer.deliver_issue_add(@issue)
253 assert !last_email.bcc.include?('dlopper@somenet.foo')
263 assert !last_email.bcc.include?('dlopper@somenet.foo')
254 end
264 end
255
265
256 should "notify issue watchers" do
266 should "notify issue watchers" do
257 user = User.find(9)
267 user = User.find(9)
258 # minimal email notification options
268 # minimal email notification options
259 user.pref[:no_self_notified] = '1'
269 user.pref[:no_self_notified] = '1'
260 user.pref.save
270 user.pref.save
261 user.mail_notification = false
271 user.mail_notification = false
262 user.save
272 user.save
263
273
264 Watcher.create!(:watchable => @issue, :user => user)
274 Watcher.create!(:watchable => @issue, :user => user)
265 assert Mailer.deliver_issue_add(@issue)
275 assert Mailer.deliver_issue_add(@issue)
266 assert last_email.bcc.include?(user.mail)
276 assert last_email.bcc.include?(user.mail)
267 end
277 end
268
278
269 should "not notify watchers not allowed to view the issue" do
279 should "not notify watchers not allowed to view the issue" do
270 user = User.find(9)
280 user = User.find(9)
271 Watcher.create!(:watchable => @issue, :user => user)
281 Watcher.create!(:watchable => @issue, :user => user)
272 Role.non_member.remove_permission!(:view_issues)
282 Role.non_member.remove_permission!(:view_issues)
273 assert Mailer.deliver_issue_add(@issue)
283 assert Mailer.deliver_issue_add(@issue)
274 assert !last_email.bcc.include?(user.mail)
284 assert !last_email.bcc.include?(user.mail)
275 end
285 end
276 end
286 end
277
287
278 # test mailer methods for each language
288 # test mailer methods for each language
279 def test_issue_add
289 def test_issue_add
280 issue = Issue.find(1)
290 issue = Issue.find(1)
281 valid_languages.each do |lang|
291 valid_languages.each do |lang|
282 Setting.default_language = lang.to_s
292 Setting.default_language = lang.to_s
283 assert Mailer.deliver_issue_add(issue)
293 assert Mailer.deliver_issue_add(issue)
284 end
294 end
285 end
295 end
286
296
287 def test_issue_edit
297 def test_issue_edit
288 journal = Journal.find(1)
298 journal = Journal.find(1)
289 valid_languages.each do |lang|
299 valid_languages.each do |lang|
290 Setting.default_language = lang.to_s
300 Setting.default_language = lang.to_s
291 assert Mailer.deliver_issue_edit(journal)
301 assert Mailer.deliver_issue_edit(journal)
292 end
302 end
293 end
303 end
294
304
295 def test_document_added
305 def test_document_added
296 document = Document.find(1)
306 document = Document.find(1)
297 valid_languages.each do |lang|
307 valid_languages.each do |lang|
298 Setting.default_language = lang.to_s
308 Setting.default_language = lang.to_s
299 assert Mailer.deliver_document_added(document)
309 assert Mailer.deliver_document_added(document)
300 end
310 end
301 end
311 end
302
312
303 def test_attachments_added
313 def test_attachments_added
304 attachements = [ Attachment.find_by_container_type('Document') ]
314 attachements = [ Attachment.find_by_container_type('Document') ]
305 valid_languages.each do |lang|
315 valid_languages.each do |lang|
306 Setting.default_language = lang.to_s
316 Setting.default_language = lang.to_s
307 assert Mailer.deliver_attachments_added(attachements)
317 assert Mailer.deliver_attachments_added(attachements)
308 end
318 end
309 end
319 end
310
320
311 def test_version_file_added
321 def test_version_file_added
312 attachements = [ Attachment.find_by_container_type('Version') ]
322 attachements = [ Attachment.find_by_container_type('Version') ]
313 assert Mailer.deliver_attachments_added(attachements)
323 assert Mailer.deliver_attachments_added(attachements)
314 assert_not_nil last_email.bcc
324 assert_not_nil last_email.bcc
315 assert last_email.bcc.any?
325 assert last_email.bcc.any?
316 assert_select_email do
326 assert_select_email do
317 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
327 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
318 end
328 end
319 end
329 end
320
330
321 def test_project_file_added
331 def test_project_file_added
322 attachements = [ Attachment.find_by_container_type('Project') ]
332 attachements = [ Attachment.find_by_container_type('Project') ]
323 assert Mailer.deliver_attachments_added(attachements)
333 assert Mailer.deliver_attachments_added(attachements)
324 assert_not_nil last_email.bcc
334 assert_not_nil last_email.bcc
325 assert last_email.bcc.any?
335 assert last_email.bcc.any?
326 assert_select_email do
336 assert_select_email do
327 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
337 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
328 end
338 end
329 end
339 end
330
340
331 def test_news_added
341 def test_news_added
332 news = News.find(:first)
342 news = News.find(:first)
333 valid_languages.each do |lang|
343 valid_languages.each do |lang|
334 Setting.default_language = lang.to_s
344 Setting.default_language = lang.to_s
335 assert Mailer.deliver_news_added(news)
345 assert Mailer.deliver_news_added(news)
336 end
346 end
337 end
347 end
338
348
339 def test_news_comment_added
349 def test_news_comment_added
340 comment = Comment.find(2)
350 comment = Comment.find(2)
341 valid_languages.each do |lang|
351 valid_languages.each do |lang|
342 Setting.default_language = lang.to_s
352 Setting.default_language = lang.to_s
343 assert Mailer.deliver_news_comment_added(comment)
353 assert Mailer.deliver_news_comment_added(comment)
344 end
354 end
345 end
355 end
346
356
347 def test_message_posted
357 def test_message_posted
348 message = Message.find(:first)
358 message = Message.find(:first)
349 recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
359 recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
350 recipients = recipients.compact.uniq
360 recipients = recipients.compact.uniq
351 valid_languages.each do |lang|
361 valid_languages.each do |lang|
352 Setting.default_language = lang.to_s
362 Setting.default_language = lang.to_s
353 assert Mailer.deliver_message_posted(message)
363 assert Mailer.deliver_message_posted(message)
354 end
364 end
355 end
365 end
356
366
357 def test_wiki_content_added
367 def test_wiki_content_added
358 content = WikiContent.find(:first)
368 content = WikiContent.find(:first)
359 valid_languages.each do |lang|
369 valid_languages.each do |lang|
360 Setting.default_language = lang.to_s
370 Setting.default_language = lang.to_s
361 assert_difference 'ActionMailer::Base.deliveries.size' do
371 assert_difference 'ActionMailer::Base.deliveries.size' do
362 assert Mailer.deliver_wiki_content_added(content)
372 assert Mailer.deliver_wiki_content_added(content)
363 end
373 end
364 end
374 end
365 end
375 end
366
376
367 def test_wiki_content_updated
377 def test_wiki_content_updated
368 content = WikiContent.find(:first)
378 content = WikiContent.find(:first)
369 valid_languages.each do |lang|
379 valid_languages.each do |lang|
370 Setting.default_language = lang.to_s
380 Setting.default_language = lang.to_s
371 assert_difference 'ActionMailer::Base.deliveries.size' do
381 assert_difference 'ActionMailer::Base.deliveries.size' do
372 assert Mailer.deliver_wiki_content_updated(content)
382 assert Mailer.deliver_wiki_content_updated(content)
373 end
383 end
374 end
384 end
375 end
385 end
376
386
377 def test_account_information
387 def test_account_information
378 user = User.find(2)
388 user = User.find(2)
379 valid_languages.each do |lang|
389 valid_languages.each do |lang|
380 user.update_attribute :language, lang.to_s
390 user.update_attribute :language, lang.to_s
381 user.reload
391 user.reload
382 assert Mailer.deliver_account_information(user, 'pAsswORd')
392 assert Mailer.deliver_account_information(user, 'pAsswORd')
383 end
393 end
384 end
394 end
385
395
386 def test_lost_password
396 def test_lost_password
387 token = Token.find(2)
397 token = Token.find(2)
388 valid_languages.each do |lang|
398 valid_languages.each do |lang|
389 token.user.update_attribute :language, lang.to_s
399 token.user.update_attribute :language, lang.to_s
390 token.reload
400 token.reload
391 assert Mailer.deliver_lost_password(token)
401 assert Mailer.deliver_lost_password(token)
392 end
402 end
393 end
403 end
394
404
395 def test_register
405 def test_register
396 token = Token.find(1)
406 token = Token.find(1)
397 Setting.host_name = 'redmine.foo'
407 Setting.host_name = 'redmine.foo'
398 Setting.protocol = 'https'
408 Setting.protocol = 'https'
399
409
400 valid_languages.each do |lang|
410 valid_languages.each do |lang|
401 token.user.update_attribute :language, lang.to_s
411 token.user.update_attribute :language, lang.to_s
402 token.reload
412 token.reload
403 ActionMailer::Base.deliveries.clear
413 ActionMailer::Base.deliveries.clear
404 assert Mailer.deliver_register(token)
414 assert Mailer.deliver_register(token)
405 mail = ActionMailer::Base.deliveries.last
415 mail = ActionMailer::Base.deliveries.last
406 assert mail.body.include?("https://redmine.foo/account/activate?token=#{token.value}")
416 assert mail.body.include?("https://redmine.foo/account/activate?token=#{token.value}")
407 end
417 end
408 end
418 end
409
419
410 def test_test
420 def test_test
411 user = User.find(1)
421 user = User.find(1)
412 valid_languages.each do |lang|
422 valid_languages.each do |lang|
413 user.update_attribute :language, lang.to_s
423 user.update_attribute :language, lang.to_s
414 assert Mailer.deliver_test(user)
424 assert Mailer.deliver_test(user)
415 end
425 end
416 end
426 end
417
427
418 def test_reminders
428 def test_reminders
419 Mailer.reminders(:days => 42)
429 Mailer.reminders(:days => 42)
420 assert_equal 1, ActionMailer::Base.deliveries.size
430 assert_equal 1, ActionMailer::Base.deliveries.size
421 mail = ActionMailer::Base.deliveries.last
431 mail = ActionMailer::Base.deliveries.last
422 assert mail.bcc.include?('dlopper@somenet.foo')
432 assert mail.bcc.include?('dlopper@somenet.foo')
423 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
433 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
424 assert_equal '1 issue(s) due in the next 42 days', mail.subject
434 assert_equal '1 issue(s) due in the next 42 days', mail.subject
425 end
435 end
426
436
427 def test_reminders_for_users
437 def test_reminders_for_users
428 Mailer.reminders(:days => 42, :users => ['5'])
438 Mailer.reminders(:days => 42, :users => ['5'])
429 assert_equal 0, ActionMailer::Base.deliveries.size # No mail for dlopper
439 assert_equal 0, ActionMailer::Base.deliveries.size # No mail for dlopper
430 Mailer.reminders(:days => 42, :users => ['3'])
440 Mailer.reminders(:days => 42, :users => ['3'])
431 assert_equal 1, ActionMailer::Base.deliveries.size # No mail for dlopper
441 assert_equal 1, ActionMailer::Base.deliveries.size # No mail for dlopper
432 mail = ActionMailer::Base.deliveries.last
442 mail = ActionMailer::Base.deliveries.last
433 assert mail.bcc.include?('dlopper@somenet.foo')
443 assert mail.bcc.include?('dlopper@somenet.foo')
434 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
444 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
435 end
445 end
436
446
437 def last_email
447 def last_email
438 mail = ActionMailer::Base.deliveries.last
448 mail = ActionMailer::Base.deliveries.last
439 assert_not_nil mail
449 assert_not_nil mail
440 mail
450 mail
441 end
451 end
442
452
443 def test_mailer_should_not_change_locale
453 def test_mailer_should_not_change_locale
444 Setting.default_language = 'en'
454 Setting.default_language = 'en'
445 # Set current language to italian
455 # Set current language to italian
446 set_language_if_valid 'it'
456 set_language_if_valid 'it'
447 # Send an email to a french user
457 # Send an email to a french user
448 user = User.find(1)
458 user = User.find(1)
449 user.language = 'fr'
459 user.language = 'fr'
450 Mailer.deliver_account_activated(user)
460 Mailer.deliver_account_activated(user)
451 mail = ActionMailer::Base.deliveries.last
461 mail = ActionMailer::Base.deliveries.last
452 assert mail.body.include?('Votre compte')
462 assert mail.body.include?('Votre compte')
453
463
454 assert_equal :it, current_language
464 assert_equal :it, current_language
455 end
465 end
456
466
457 def test_with_deliveries_off
467 def test_with_deliveries_off
458 Mailer.with_deliveries false do
468 Mailer.with_deliveries false do
459 Mailer.deliver_test(User.find(1))
469 Mailer.deliver_test(User.find(1))
460 end
470 end
461 assert ActionMailer::Base.deliveries.empty?
471 assert ActionMailer::Base.deliveries.empty?
462 # should restore perform_deliveries
472 # should restore perform_deliveries
463 assert ActionMailer::Base.perform_deliveries
473 assert ActionMailer::Base.perform_deliveries
464 end
474 end
465
475
466 context "layout" do
476 context "layout" do
467 should "include the emails_header" do
477 should "include the emails_header" do
468 with_settings(:emails_header => "*Header content*") do
478 with_settings(:emails_header => "*Header content*") do
469 assert Mailer.deliver_test(User.find(1))
479 assert Mailer.deliver_test(User.find(1))
470
480
471 assert_select_email do
481 assert_select_email do
472 assert_select ".header" do
482 assert_select ".header" do
473 assert_select "strong", :text => "Header content"
483 assert_select "strong", :text => "Header content"
474 end
484 end
475 end
485 end
476 end
486 end
477 end
487 end
478 end
488 end
479 end
489 end
General Comments 0
You need to be logged in to leave comments. Login now