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