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