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