##// END OF EJS Templates
test: replace should "include the emails_header" at unit mailer test to Rails standard test suite...
Toshi MARUYAMA -
r8349:313bfa54087e
parent child
Show More
@@ -1,502 +1,499
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#change-2",
51 "https://mydomain.foo/issues/1#change-2",
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#change-2",
81 "http://mydomain.foo/rdm/issues/1#change-2",
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#change-2",
114 "http://mydomain.foo/rdm/issues/1#change-2",
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_from_header
160 def test_from_header
161 with_settings :mail_from => 'redmine@example.net' do
161 with_settings :mail_from => 'redmine@example.net' do
162 Mailer.deliver_test(User.find(1))
162 Mailer.deliver_test(User.find(1))
163 end
163 end
164 mail = ActionMailer::Base.deliveries.last
164 mail = ActionMailer::Base.deliveries.last
165 assert_not_nil mail
165 assert_not_nil mail
166 assert_equal 'redmine@example.net', mail.from_addrs.first.address
166 assert_equal 'redmine@example.net', mail.from_addrs.first.address
167 end
167 end
168
168
169 def test_from_header_with_phrase
169 def test_from_header_with_phrase
170 with_settings :mail_from => 'Redmine app <redmine@example.net>' do
170 with_settings :mail_from => 'Redmine app <redmine@example.net>' do
171 Mailer.deliver_test(User.find(1))
171 Mailer.deliver_test(User.find(1))
172 end
172 end
173 mail = ActionMailer::Base.deliveries.last
173 mail = ActionMailer::Base.deliveries.last
174 assert_not_nil mail
174 assert_not_nil mail
175 assert_equal 'redmine@example.net', mail.from_addrs.first.address
175 assert_equal 'redmine@example.net', mail.from_addrs.first.address
176 assert_equal 'Redmine app', mail.from_addrs.first.name
176 assert_equal 'Redmine app', mail.from_addrs.first.name
177 end
177 end
178
178
179 def test_should_not_send_email_without_recipient
179 def test_should_not_send_email_without_recipient
180 news = News.find(:first)
180 news = News.find(:first)
181 user = news.author
181 user = news.author
182 # Remove members except news author
182 # Remove members except news author
183 news.project.memberships.each {|m| m.destroy unless m.user == user}
183 news.project.memberships.each {|m| m.destroy unless m.user == user}
184
184
185 user.pref[:no_self_notified] = false
185 user.pref[:no_self_notified] = false
186 user.pref.save
186 user.pref.save
187 User.current = user
187 User.current = user
188 Mailer.deliver_news_added(news.reload)
188 Mailer.deliver_news_added(news.reload)
189 assert_equal 1, last_email.bcc.size
189 assert_equal 1, last_email.bcc.size
190
190
191 # nobody to notify
191 # nobody to notify
192 user.pref[:no_self_notified] = true
192 user.pref[:no_self_notified] = true
193 user.pref.save
193 user.pref.save
194 User.current = user
194 User.current = user
195 ActionMailer::Base.deliveries.clear
195 ActionMailer::Base.deliveries.clear
196 Mailer.deliver_news_added(news.reload)
196 Mailer.deliver_news_added(news.reload)
197 assert ActionMailer::Base.deliveries.empty?
197 assert ActionMailer::Base.deliveries.empty?
198 end
198 end
199
199
200 def test_issue_add_message_id
200 def test_issue_add_message_id
201 issue = Issue.find(1)
201 issue = Issue.find(1)
202 Mailer.deliver_issue_add(issue)
202 Mailer.deliver_issue_add(issue)
203 mail = ActionMailer::Base.deliveries.last
203 mail = ActionMailer::Base.deliveries.last
204 assert_not_nil mail
204 assert_not_nil mail
205 assert_equal Mailer.message_id_for(issue), mail.message_id
205 assert_equal Mailer.message_id_for(issue), mail.message_id
206 assert_nil mail.references
206 assert_nil mail.references
207 end
207 end
208
208
209 def test_issue_edit_message_id
209 def test_issue_edit_message_id
210 journal = Journal.find(1)
210 journal = Journal.find(1)
211 Mailer.deliver_issue_edit(journal)
211 Mailer.deliver_issue_edit(journal)
212 mail = ActionMailer::Base.deliveries.last
212 mail = ActionMailer::Base.deliveries.last
213 assert_not_nil mail
213 assert_not_nil mail
214 assert_equal Mailer.message_id_for(journal), mail.message_id
214 assert_equal Mailer.message_id_for(journal), mail.message_id
215 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
216 assert_select_email do
216 assert_select_email do
217 # link to the update
217 # link to the update
218 assert_select "a[href=?]",
218 assert_select "a[href=?]",
219 "http://mydomain.foo/issues/#{journal.journalized_id}#change-#{journal.id}"
219 "http://mydomain.foo/issues/#{journal.journalized_id}#change-#{journal.id}"
220 end
220 end
221 end
221 end
222
222
223 def test_message_posted_message_id
223 def test_message_posted_message_id
224 message = Message.find(1)
224 message = Message.find(1)
225 Mailer.deliver_message_posted(message)
225 Mailer.deliver_message_posted(message)
226 mail = ActionMailer::Base.deliveries.last
226 mail = ActionMailer::Base.deliveries.last
227 assert_not_nil mail
227 assert_not_nil mail
228 assert_equal Mailer.message_id_for(message), mail.message_id
228 assert_equal Mailer.message_id_for(message), mail.message_id
229 assert_nil mail.references
229 assert_nil mail.references
230 assert_select_email do
230 assert_select_email do
231 # link to the message
231 # link to the message
232 assert_select "a[href=?]",
232 assert_select "a[href=?]",
233 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.id}",
233 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.id}",
234 :text => message.subject
234 :text => message.subject
235 end
235 end
236 end
236 end
237
237
238 def test_reply_posted_message_id
238 def test_reply_posted_message_id
239 message = Message.find(3)
239 message = Message.find(3)
240 Mailer.deliver_message_posted(message)
240 Mailer.deliver_message_posted(message)
241 mail = ActionMailer::Base.deliveries.last
241 mail = ActionMailer::Base.deliveries.last
242 assert_not_nil mail
242 assert_not_nil mail
243 assert_equal Mailer.message_id_for(message), mail.message_id
243 assert_equal Mailer.message_id_for(message), mail.message_id
244 assert_equal Mailer.message_id_for(message.parent), mail.references.first.to_s
244 assert_equal Mailer.message_id_for(message.parent), mail.references.first.to_s
245 assert_select_email do
245 assert_select_email do
246 # link to the reply
246 # link to the reply
247 assert_select "a[href=?]",
247 assert_select "a[href=?]",
248 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.root.id}?r=#{message.id}#message-#{message.id}",
248 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.root.id}?r=#{message.id}#message-#{message.id}",
249 :text => message.subject
249 :text => message.subject
250 end
250 end
251 end
251 end
252
252
253 context("#issue_add") do
253 context("#issue_add") do
254 setup do
254 setup do
255 ActionMailer::Base.deliveries.clear
255 ActionMailer::Base.deliveries.clear
256 Setting.bcc_recipients = '1'
256 Setting.bcc_recipients = '1'
257 @issue = Issue.find(1)
257 @issue = Issue.find(1)
258 end
258 end
259
259
260 should "notify project members" do
260 should "notify project members" do
261 assert Mailer.deliver_issue_add(@issue)
261 assert Mailer.deliver_issue_add(@issue)
262 assert last_email.bcc.include?('dlopper@somenet.foo')
262 assert last_email.bcc.include?('dlopper@somenet.foo')
263 end
263 end
264
264
265 should "not notify project members that are not allow to view the issue" do
265 should "not notify project members that are not allow to view the issue" do
266 Role.find(2).remove_permission!(:view_issues)
266 Role.find(2).remove_permission!(:view_issues)
267 assert Mailer.deliver_issue_add(@issue)
267 assert Mailer.deliver_issue_add(@issue)
268 assert !last_email.bcc.include?('dlopper@somenet.foo')
268 assert !last_email.bcc.include?('dlopper@somenet.foo')
269 end
269 end
270
270
271 should "notify issue watchers" do
271 should "notify issue watchers" do
272 user = User.find(9)
272 user = User.find(9)
273 # minimal email notification options
273 # minimal email notification options
274 user.pref[:no_self_notified] = '1'
274 user.pref[:no_self_notified] = '1'
275 user.pref.save
275 user.pref.save
276 user.mail_notification = false
276 user.mail_notification = false
277 user.save
277 user.save
278
278
279 Watcher.create!(:watchable => @issue, :user => user)
279 Watcher.create!(:watchable => @issue, :user => user)
280 assert Mailer.deliver_issue_add(@issue)
280 assert Mailer.deliver_issue_add(@issue)
281 assert last_email.bcc.include?(user.mail)
281 assert last_email.bcc.include?(user.mail)
282 end
282 end
283
283
284 should "not notify watchers not allowed to view the issue" do
284 should "not notify watchers not allowed to view the issue" do
285 user = User.find(9)
285 user = User.find(9)
286 Watcher.create!(:watchable => @issue, :user => user)
286 Watcher.create!(:watchable => @issue, :user => user)
287 Role.non_member.remove_permission!(:view_issues)
287 Role.non_member.remove_permission!(:view_issues)
288 assert Mailer.deliver_issue_add(@issue)
288 assert Mailer.deliver_issue_add(@issue)
289 assert !last_email.bcc.include?(user.mail)
289 assert !last_email.bcc.include?(user.mail)
290 end
290 end
291 end
291 end
292
292
293 # test mailer methods for each language
293 # test mailer methods for each language
294 def test_issue_add
294 def test_issue_add
295 issue = Issue.find(1)
295 issue = Issue.find(1)
296 valid_languages.each do |lang|
296 valid_languages.each do |lang|
297 Setting.default_language = lang.to_s
297 Setting.default_language = lang.to_s
298 assert Mailer.deliver_issue_add(issue)
298 assert Mailer.deliver_issue_add(issue)
299 end
299 end
300 end
300 end
301
301
302 def test_issue_edit
302 def test_issue_edit
303 journal = Journal.find(1)
303 journal = Journal.find(1)
304 valid_languages.each do |lang|
304 valid_languages.each do |lang|
305 Setting.default_language = lang.to_s
305 Setting.default_language = lang.to_s
306 assert Mailer.deliver_issue_edit(journal)
306 assert Mailer.deliver_issue_edit(journal)
307 end
307 end
308 end
308 end
309
309
310 def test_document_added
310 def test_document_added
311 document = Document.find(1)
311 document = Document.find(1)
312 valid_languages.each do |lang|
312 valid_languages.each do |lang|
313 Setting.default_language = lang.to_s
313 Setting.default_language = lang.to_s
314 assert Mailer.deliver_document_added(document)
314 assert Mailer.deliver_document_added(document)
315 end
315 end
316 end
316 end
317
317
318 def test_attachments_added
318 def test_attachments_added
319 attachements = [ Attachment.find_by_container_type('Document') ]
319 attachements = [ Attachment.find_by_container_type('Document') ]
320 valid_languages.each do |lang|
320 valid_languages.each do |lang|
321 Setting.default_language = lang.to_s
321 Setting.default_language = lang.to_s
322 assert Mailer.deliver_attachments_added(attachements)
322 assert Mailer.deliver_attachments_added(attachements)
323 end
323 end
324 end
324 end
325
325
326 def test_version_file_added
326 def test_version_file_added
327 attachements = [ Attachment.find_by_container_type('Version') ]
327 attachements = [ Attachment.find_by_container_type('Version') ]
328 assert Mailer.deliver_attachments_added(attachements)
328 assert Mailer.deliver_attachments_added(attachements)
329 assert_not_nil last_email.bcc
329 assert_not_nil last_email.bcc
330 assert last_email.bcc.any?
330 assert last_email.bcc.any?
331 assert_select_email do
331 assert_select_email do
332 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
332 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
333 end
333 end
334 end
334 end
335
335
336 def test_project_file_added
336 def test_project_file_added
337 attachements = [ Attachment.find_by_container_type('Project') ]
337 attachements = [ Attachment.find_by_container_type('Project') ]
338 assert Mailer.deliver_attachments_added(attachements)
338 assert Mailer.deliver_attachments_added(attachements)
339 assert_not_nil last_email.bcc
339 assert_not_nil last_email.bcc
340 assert last_email.bcc.any?
340 assert last_email.bcc.any?
341 assert_select_email do
341 assert_select_email do
342 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
342 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
343 end
343 end
344 end
344 end
345
345
346 def test_news_added
346 def test_news_added
347 news = News.find(:first)
347 news = News.find(:first)
348 valid_languages.each do |lang|
348 valid_languages.each do |lang|
349 Setting.default_language = lang.to_s
349 Setting.default_language = lang.to_s
350 assert Mailer.deliver_news_added(news)
350 assert Mailer.deliver_news_added(news)
351 end
351 end
352 end
352 end
353
353
354 def test_news_comment_added
354 def test_news_comment_added
355 comment = Comment.find(2)
355 comment = Comment.find(2)
356 valid_languages.each do |lang|
356 valid_languages.each do |lang|
357 Setting.default_language = lang.to_s
357 Setting.default_language = lang.to_s
358 assert Mailer.deliver_news_comment_added(comment)
358 assert Mailer.deliver_news_comment_added(comment)
359 end
359 end
360 end
360 end
361
361
362 def test_message_posted
362 def test_message_posted
363 message = Message.find(:first)
363 message = Message.find(:first)
364 recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
364 recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
365 recipients = recipients.compact.uniq
365 recipients = recipients.compact.uniq
366 valid_languages.each do |lang|
366 valid_languages.each do |lang|
367 Setting.default_language = lang.to_s
367 Setting.default_language = lang.to_s
368 assert Mailer.deliver_message_posted(message)
368 assert Mailer.deliver_message_posted(message)
369 end
369 end
370 end
370 end
371
371
372 def test_wiki_content_added
372 def test_wiki_content_added
373 content = WikiContent.find(:first)
373 content = WikiContent.find(:first)
374 valid_languages.each do |lang|
374 valid_languages.each do |lang|
375 Setting.default_language = lang.to_s
375 Setting.default_language = lang.to_s
376 assert_difference 'ActionMailer::Base.deliveries.size' do
376 assert_difference 'ActionMailer::Base.deliveries.size' do
377 assert Mailer.deliver_wiki_content_added(content)
377 assert Mailer.deliver_wiki_content_added(content)
378 end
378 end
379 end
379 end
380 end
380 end
381
381
382 def test_wiki_content_updated
382 def test_wiki_content_updated
383 content = WikiContent.find(:first)
383 content = WikiContent.find(:first)
384 valid_languages.each do |lang|
384 valid_languages.each do |lang|
385 Setting.default_language = lang.to_s
385 Setting.default_language = lang.to_s
386 assert_difference 'ActionMailer::Base.deliveries.size' do
386 assert_difference 'ActionMailer::Base.deliveries.size' do
387 assert Mailer.deliver_wiki_content_updated(content)
387 assert Mailer.deliver_wiki_content_updated(content)
388 end
388 end
389 end
389 end
390 end
390 end
391
391
392 def test_account_information
392 def test_account_information
393 user = User.find(2)
393 user = User.find(2)
394 valid_languages.each do |lang|
394 valid_languages.each do |lang|
395 user.update_attribute :language, lang.to_s
395 user.update_attribute :language, lang.to_s
396 user.reload
396 user.reload
397 assert Mailer.deliver_account_information(user, 'pAsswORd')
397 assert Mailer.deliver_account_information(user, 'pAsswORd')
398 end
398 end
399 end
399 end
400
400
401 def test_lost_password
401 def test_lost_password
402 token = Token.find(2)
402 token = Token.find(2)
403 valid_languages.each do |lang|
403 valid_languages.each do |lang|
404 token.user.update_attribute :language, lang.to_s
404 token.user.update_attribute :language, lang.to_s
405 token.reload
405 token.reload
406 assert Mailer.deliver_lost_password(token)
406 assert Mailer.deliver_lost_password(token)
407 end
407 end
408 end
408 end
409
409
410 def test_register
410 def test_register
411 token = Token.find(1)
411 token = Token.find(1)
412 Setting.host_name = 'redmine.foo'
412 Setting.host_name = 'redmine.foo'
413 Setting.protocol = 'https'
413 Setting.protocol = 'https'
414
414
415 valid_languages.each do |lang|
415 valid_languages.each do |lang|
416 token.user.update_attribute :language, lang.to_s
416 token.user.update_attribute :language, lang.to_s
417 token.reload
417 token.reload
418 ActionMailer::Base.deliveries.clear
418 ActionMailer::Base.deliveries.clear
419 assert Mailer.deliver_register(token)
419 assert Mailer.deliver_register(token)
420 mail = ActionMailer::Base.deliveries.last
420 mail = ActionMailer::Base.deliveries.last
421 assert mail.body.include?("https://redmine.foo/account/activate?token=#{token.value}")
421 assert mail.body.include?("https://redmine.foo/account/activate?token=#{token.value}")
422 end
422 end
423 end
423 end
424
424
425 def test_test
425 def test_test
426 user = User.find(1)
426 user = User.find(1)
427 valid_languages.each do |lang|
427 valid_languages.each do |lang|
428 user.update_attribute :language, lang.to_s
428 user.update_attribute :language, lang.to_s
429 assert Mailer.deliver_test(user)
429 assert Mailer.deliver_test(user)
430 end
430 end
431 end
431 end
432
432
433 def test_reminders
433 def test_reminders
434 Mailer.reminders(:days => 42)
434 Mailer.reminders(:days => 42)
435 assert_equal 1, ActionMailer::Base.deliveries.size
435 assert_equal 1, ActionMailer::Base.deliveries.size
436 mail = ActionMailer::Base.deliveries.last
436 mail = ActionMailer::Base.deliveries.last
437 assert mail.bcc.include?('dlopper@somenet.foo')
437 assert mail.bcc.include?('dlopper@somenet.foo')
438 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
438 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
439 assert_equal '1 issue(s) due in the next 42 days', mail.subject
439 assert_equal '1 issue(s) due in the next 42 days', mail.subject
440 end
440 end
441
441
442 def test_reminders_for_users
442 def test_reminders_for_users
443 Mailer.reminders(:days => 42, :users => ['5'])
443 Mailer.reminders(:days => 42, :users => ['5'])
444 assert_equal 0, ActionMailer::Base.deliveries.size # No mail for dlopper
444 assert_equal 0, ActionMailer::Base.deliveries.size # No mail for dlopper
445 Mailer.reminders(:days => 42, :users => ['3'])
445 Mailer.reminders(:days => 42, :users => ['3'])
446 assert_equal 1, ActionMailer::Base.deliveries.size # No mail for dlopper
446 assert_equal 1, ActionMailer::Base.deliveries.size # No mail for dlopper
447 mail = ActionMailer::Base.deliveries.last
447 mail = ActionMailer::Base.deliveries.last
448 assert mail.bcc.include?('dlopper@somenet.foo')
448 assert mail.bcc.include?('dlopper@somenet.foo')
449 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
449 assert mail.body.include?('Bug #3: Error 281 when updating a recipe')
450 end
450 end
451
451
452 def last_email
452 def last_email
453 mail = ActionMailer::Base.deliveries.last
453 mail = ActionMailer::Base.deliveries.last
454 assert_not_nil mail
454 assert_not_nil mail
455 mail
455 mail
456 end
456 end
457
457
458 def test_mailer_should_not_change_locale
458 def test_mailer_should_not_change_locale
459 Setting.default_language = 'en'
459 Setting.default_language = 'en'
460 # Set current language to italian
460 # Set current language to italian
461 set_language_if_valid 'it'
461 set_language_if_valid 'it'
462 # Send an email to a french user
462 # Send an email to a french user
463 user = User.find(1)
463 user = User.find(1)
464 user.language = 'fr'
464 user.language = 'fr'
465 Mailer.deliver_account_activated(user)
465 Mailer.deliver_account_activated(user)
466 mail = ActionMailer::Base.deliveries.last
466 mail = ActionMailer::Base.deliveries.last
467 assert mail.body.include?('Votre compte')
467 assert mail.body.include?('Votre compte')
468
468
469 assert_equal :it, current_language
469 assert_equal :it, current_language
470 end
470 end
471
471
472 def test_with_deliveries_off
472 def test_with_deliveries_off
473 Mailer.with_deliveries false do
473 Mailer.with_deliveries false do
474 Mailer.deliver_test(User.find(1))
474 Mailer.deliver_test(User.find(1))
475 end
475 end
476 assert ActionMailer::Base.deliveries.empty?
476 assert ActionMailer::Base.deliveries.empty?
477 # should restore perform_deliveries
477 # should restore perform_deliveries
478 assert ActionMailer::Base.perform_deliveries
478 assert ActionMailer::Base.perform_deliveries
479 end
479 end
480
480
481 def test_tmail_to_header_field_should_not_include_blank_lines
481 def test_tmail_to_header_field_should_not_include_blank_lines
482 mail = TMail::Mail.new
482 mail = TMail::Mail.new
483 mail.to = ["a.user@example.com", "v.user2@example.com", "e.smith@example.com", "info@example.com", "v.pupkin@example.com",
483 mail.to = ["a.user@example.com", "v.user2@example.com", "e.smith@example.com", "info@example.com", "v.pupkin@example.com",
484 "b.user@example.com", "w.user2@example.com", "f.smith@example.com", "info2@example.com", "w.pupkin@example.com"]
484 "b.user@example.com", "w.user2@example.com", "f.smith@example.com", "info2@example.com", "w.pupkin@example.com"]
485
485
486 assert !mail.encoded.strip.split("\r\n").detect(&:blank?), "#{mail.encoded} malformed"
486 assert !mail.encoded.strip.split("\r\n").detect(&:blank?), "#{mail.encoded} malformed"
487 end
487 end
488
488
489 context "layout" do
489 def test_layout_should_include_the_emails_header
490 should "include the emails_header" do
490 with_settings :emails_header => "*Header content*" do
491 with_settings(:emails_header => "*Header content*") do
491 assert Mailer.deliver_test(User.find(1))
492 assert Mailer.deliver_test(User.find(1))
492 assert_select_email do
493
493 assert_select ".header" do
494 assert_select_email do
494 assert_select "strong", :text => "Header content"
495 assert_select ".header" do
496 assert_select "strong", :text => "Header content"
497 end
498 end
495 end
499 end
496 end
500 end
497 end
501 end
498 end
502 end
499 end
General Comments 0
You need to be logged in to leave comments. Login now