##// END OF EJS Templates
Fixed wrong test (#18983)....
Jean-Philippe Lang -
r13584:8119dcb0f57c
parent child
Show More
@@ -1,841 +1,835
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2015 Jean-Philippe Lang
2 # Copyright (C) 2006-2015 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 Rails::Dom::Testing::Assertions
22 include Rails::Dom::Testing::Assertions
23 fixtures :projects, :enabled_modules, :issues, :users, :email_addresses, :members,
23 fixtures :projects, :enabled_modules, :issues, :users, :email_addresses, :members,
24 :member_roles, :roles, :documents, :attachments, :news,
24 :member_roles, :roles, :documents, :attachments, :news,
25 :tokens, :journals, :journal_details, :changesets,
25 :tokens, :journals, :journal_details, :changesets,
26 :trackers, :projects_trackers,
26 :trackers, :projects_trackers,
27 :issue_statuses, :enumerations, :messages, :boards, :repositories,
27 :issue_statuses, :enumerations, :messages, :boards, :repositories,
28 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
28 :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions,
29 :versions,
29 :versions,
30 :comments
30 :comments
31
31
32 def setup
32 def setup
33 ActionMailer::Base.deliveries.clear
33 ActionMailer::Base.deliveries.clear
34 Setting.host_name = 'mydomain.foo'
34 Setting.host_name = 'mydomain.foo'
35 Setting.protocol = 'http'
35 Setting.protocol = 'http'
36 Setting.plain_text_mail = '0'
36 Setting.plain_text_mail = '0'
37 Setting.default_language = 'en'
37 Setting.default_language = 'en'
38 User.current = nil
38 User.current = nil
39 end
39 end
40
40
41 def test_generated_links_in_emails
41 def test_generated_links_in_emails
42 Setting.host_name = 'mydomain.foo'
42 Setting.host_name = 'mydomain.foo'
43 Setting.protocol = 'https'
43 Setting.protocol = 'https'
44
44
45 journal = Journal.find(3)
45 journal = Journal.find(3)
46 assert Mailer.deliver_issue_edit(journal)
46 assert Mailer.deliver_issue_edit(journal)
47
47
48 mail = last_email
48 mail = last_email
49 assert_not_nil mail
49 assert_not_nil mail
50
50
51 assert_select_email do
51 assert_select_email do
52 # link to the main ticket
52 # link to the main ticket
53 assert_select 'a[href=?]',
53 assert_select 'a[href=?]',
54 'https://mydomain.foo/issues/2#change-3',
54 'https://mydomain.foo/issues/2#change-3',
55 :text => 'Feature request #2: Add ingredients categories'
55 :text => 'Feature request #2: Add ingredients categories'
56 # link to a referenced ticket
56 # link to a referenced ticket
57 assert_select 'a[href=?][title=?]',
57 assert_select 'a[href=?][title=?]',
58 'https://mydomain.foo/issues/1',
58 'https://mydomain.foo/issues/1',
59 "Cannot print recipes (New)",
59 "Cannot print recipes (New)",
60 :text => '#1'
60 :text => '#1'
61 # link to a changeset
61 # link to a changeset
62 assert_select 'a[href=?][title=?]',
62 assert_select 'a[href=?][title=?]',
63 'https://mydomain.foo/projects/ecookbook/repository/revisions/2',
63 'https://mydomain.foo/projects/ecookbook/repository/revisions/2',
64 'This commit fixes #1, #2 and references #1 & #3',
64 'This commit fixes #1, #2 and references #1 & #3',
65 :text => 'r2'
65 :text => 'r2'
66 # link to a description diff
66 # link to a description diff
67 assert_select 'a[href^=?][title=?]',
67 assert_select 'a[href^=?][title=?]',
68 # should be https://mydomain.foo/journals/diff/3?detail_id=4
68 # should be https://mydomain.foo/journals/diff/3?detail_id=4
69 # but the Rails 4.2 DOM assertion doesn't handle the ? in the
69 # but the Rails 4.2 DOM assertion doesn't handle the ? in the
70 # attribute value
70 # attribute value
71 'https://mydomain.foo/journals/diff/3',
71 'https://mydomain.foo/journals/diff/3',
72 'View differences',
72 'View differences',
73 :text => 'diff'
73 :text => 'diff'
74 # link to an attachment
74 # link to an attachment
75 assert_select 'a[href=?]',
75 assert_select 'a[href=?]',
76 'https://mydomain.foo/attachments/download/4/source.rb',
76 'https://mydomain.foo/attachments/download/4/source.rb',
77 :text => 'source.rb'
77 :text => 'source.rb'
78 end
78 end
79 end
79 end
80
80
81 def test_generated_links_with_prefix
81 def test_generated_links_with_prefix
82 relative_url_root = Redmine::Utils.relative_url_root
82 relative_url_root = Redmine::Utils.relative_url_root
83 Setting.host_name = 'mydomain.foo/rdm'
83 Setting.host_name = 'mydomain.foo/rdm'
84 Setting.protocol = 'http'
84 Setting.protocol = 'http'
85
85
86 journal = Journal.find(3)
86 journal = Journal.find(3)
87 assert Mailer.deliver_issue_edit(journal)
87 assert Mailer.deliver_issue_edit(journal)
88
88
89 mail = last_email
89 mail = last_email
90 assert_not_nil mail
90 assert_not_nil mail
91
91
92 assert_select_email do
92 assert_select_email do
93 # link to the main ticket
93 # link to the main ticket
94 assert_select 'a[href=?]',
94 assert_select 'a[href=?]',
95 'http://mydomain.foo/rdm/issues/2#change-3',
95 'http://mydomain.foo/rdm/issues/2#change-3',
96 :text => 'Feature request #2: Add ingredients categories'
96 :text => 'Feature request #2: Add ingredients categories'
97 # link to a referenced ticket
97 # link to a referenced ticket
98 assert_select 'a[href=?][title=?]',
98 assert_select 'a[href=?][title=?]',
99 'http://mydomain.foo/rdm/issues/1',
99 'http://mydomain.foo/rdm/issues/1',
100 "Cannot print recipes (New)",
100 "Cannot print recipes (New)",
101 :text => '#1'
101 :text => '#1'
102 # link to a changeset
102 # link to a changeset
103 assert_select 'a[href=?][title=?]',
103 assert_select 'a[href=?][title=?]',
104 'http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2',
104 'http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2',
105 'This commit fixes #1, #2 and references #1 & #3',
105 'This commit fixes #1, #2 and references #1 & #3',
106 :text => 'r2'
106 :text => 'r2'
107 # link to a description diff
107 # link to a description diff
108 assert_select 'a[href^=?][title=?]',
108 assert_select 'a[href^=?][title=?]',
109 # should be http://mydomain.foo/rdm/journals/diff/3?detail_id=4
109 # should be http://mydomain.foo/rdm/journals/diff/3?detail_id=4
110 # but the Rails 4.2 DOM assertion doesn't handle the ? in the
110 # but the Rails 4.2 DOM assertion doesn't handle the ? in the
111 # attribute value
111 # attribute value
112 'http://mydomain.foo/rdm/journals/diff/3',
112 'http://mydomain.foo/rdm/journals/diff/3',
113 'View differences',
113 'View differences',
114 :text => 'diff'
114 :text => 'diff'
115 # link to an attachment
115 # link to an attachment
116 assert_select 'a[href=?]',
116 assert_select 'a[href=?]',
117 'http://mydomain.foo/rdm/attachments/download/4/source.rb',
117 'http://mydomain.foo/rdm/attachments/download/4/source.rb',
118 :text => 'source.rb'
118 :text => 'source.rb'
119 end
119 end
120 end
120 end
121
121
122 def test_issue_edit_should_generate_url_with_hostname_for_relations
122 def test_issue_edit_should_generate_url_with_hostname_for_relations
123 journal = Journal.new(:journalized => Issue.find(1), :user => User.find(1), :created_on => Time.now)
123 journal = Journal.new(:journalized => Issue.find(1), :user => User.find(1), :created_on => Time.now)
124 journal.details << JournalDetail.new(:property => 'relation', :prop_key => 'label_relates_to', :value => 2)
124 journal.details << JournalDetail.new(:property => 'relation', :prop_key => 'label_relates_to', :value => 2)
125 Mailer.deliver_issue_edit(journal)
125 Mailer.deliver_issue_edit(journal)
126 assert_not_nil last_email
126 assert_not_nil last_email
127 assert_select_email do
127 assert_select_email do
128 assert_select 'a[href=?]', 'http://mydomain.foo/issues/2', :text => 'Feature request #2'
128 assert_select 'a[href=?]', 'http://mydomain.foo/issues/2', :text => 'Feature request #2'
129 end
129 end
130 end
130 end
131
131
132 def test_generated_links_with_prefix_and_no_relative_url_root
132 def test_generated_links_with_prefix_and_no_relative_url_root
133 relative_url_root = Redmine::Utils.relative_url_root
133 relative_url_root = Redmine::Utils.relative_url_root
134 Setting.host_name = 'mydomain.foo/rdm'
134 Setting.host_name = 'mydomain.foo/rdm'
135 Setting.protocol = 'http'
135 Setting.protocol = 'http'
136 Redmine::Utils.relative_url_root = nil
136 Redmine::Utils.relative_url_root = nil
137
137
138 journal = Journal.find(3)
138 journal = Journal.find(3)
139 assert Mailer.deliver_issue_edit(journal)
139 assert Mailer.deliver_issue_edit(journal)
140
140
141 mail = last_email
141 mail = last_email
142 assert_not_nil mail
142 assert_not_nil mail
143
143
144 assert_select_email do
144 assert_select_email do
145 # link to the main ticket
145 # link to the main ticket
146 assert_select 'a[href=?]',
146 assert_select 'a[href=?]',
147 'http://mydomain.foo/rdm/issues/2#change-3',
147 'http://mydomain.foo/rdm/issues/2#change-3',
148 :text => 'Feature request #2: Add ingredients categories'
148 :text => 'Feature request #2: Add ingredients categories'
149 # link to a referenced ticket
149 # link to a referenced ticket
150 assert_select 'a[href=?][title=?]',
150 assert_select 'a[href=?][title=?]',
151 'http://mydomain.foo/rdm/issues/1',
151 'http://mydomain.foo/rdm/issues/1',
152 "Cannot print recipes (New)",
152 "Cannot print recipes (New)",
153 :text => '#1'
153 :text => '#1'
154 # link to a changeset
154 # link to a changeset
155 assert_select 'a[href=?][title=?]',
155 assert_select 'a[href=?][title=?]',
156 'http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2',
156 'http://mydomain.foo/rdm/projects/ecookbook/repository/revisions/2',
157 'This commit fixes #1, #2 and references #1 & #3',
157 'This commit fixes #1, #2 and references #1 & #3',
158 :text => 'r2'
158 :text => 'r2'
159 # link to a description diff
159 # link to a description diff
160 assert_select 'a[href^=?][title=?]',
160 assert_select 'a[href^=?][title=?]',
161 # should be http://mydomain.foo/rdm/journals/diff/3?detail_id=4
161 # should be http://mydomain.foo/rdm/journals/diff/3?detail_id=4
162 # but the Rails 4.2 DOM assertion doesn't handle the ? in the
162 # but the Rails 4.2 DOM assertion doesn't handle the ? in the
163 # attribute value
163 # attribute value
164 'http://mydomain.foo/rdm/journals/diff/3',
164 'http://mydomain.foo/rdm/journals/diff/3',
165 'View differences',
165 'View differences',
166 :text => 'diff'
166 :text => 'diff'
167 # link to an attachment
167 # link to an attachment
168 assert_select 'a[href=?]',
168 assert_select 'a[href=?]',
169 'http://mydomain.foo/rdm/attachments/download/4/source.rb',
169 'http://mydomain.foo/rdm/attachments/download/4/source.rb',
170 :text => 'source.rb'
170 :text => 'source.rb'
171 end
171 end
172 ensure
172 ensure
173 # restore it
173 # restore it
174 Redmine::Utils.relative_url_root = relative_url_root
174 Redmine::Utils.relative_url_root = relative_url_root
175 end
175 end
176
176
177 def test_email_headers
177 def test_email_headers
178 issue = Issue.find(1)
178 issue = Issue.find(1)
179 Mailer.deliver_issue_add(issue)
179 Mailer.deliver_issue_add(issue)
180 mail = last_email
180 mail = last_email
181 assert_not_nil mail
181 assert_not_nil mail
182 assert_equal 'OOF', mail.header['X-Auto-Response-Suppress'].to_s
182 assert_equal 'OOF', mail.header['X-Auto-Response-Suppress'].to_s
183 assert_equal 'auto-generated', mail.header['Auto-Submitted'].to_s
183 assert_equal 'auto-generated', mail.header['Auto-Submitted'].to_s
184 assert_equal '<redmine.example.net>', mail.header['List-Id'].to_s
184 assert_equal '<redmine.example.net>', mail.header['List-Id'].to_s
185 end
185 end
186
186
187 def test_email_headers_should_include_sender
187 def test_email_headers_should_include_sender
188 issue = Issue.find(1)
188 issue = Issue.find(1)
189 Mailer.deliver_issue_add(issue)
189 Mailer.deliver_issue_add(issue)
190 mail = last_email
190 mail = last_email
191 assert_equal issue.author.login, mail.header['X-Redmine-Sender'].to_s
191 assert_equal issue.author.login, mail.header['X-Redmine-Sender'].to_s
192 end
192 end
193
193
194 def test_plain_text_mail
194 def test_plain_text_mail
195 Setting.plain_text_mail = 1
195 Setting.plain_text_mail = 1
196 journal = Journal.find(2)
196 journal = Journal.find(2)
197 Mailer.deliver_issue_edit(journal)
197 Mailer.deliver_issue_edit(journal)
198 mail = last_email
198 mail = last_email
199 assert_equal "text/plain; charset=UTF-8", mail.content_type
199 assert_equal "text/plain; charset=UTF-8", mail.content_type
200 assert_equal 0, mail.parts.size
200 assert_equal 0, mail.parts.size
201 assert !mail.encoded.include?('href')
201 assert !mail.encoded.include?('href')
202 end
202 end
203
203
204 def test_html_mail
204 def test_html_mail
205 Setting.plain_text_mail = 0
205 Setting.plain_text_mail = 0
206 journal = Journal.find(2)
206 journal = Journal.find(2)
207 Mailer.deliver_issue_edit(journal)
207 Mailer.deliver_issue_edit(journal)
208 mail = last_email
208 mail = last_email
209 assert_equal 2, mail.parts.size
209 assert_equal 2, mail.parts.size
210 assert mail.encoded.include?('href')
210 assert mail.encoded.include?('href')
211 end
211 end
212
212
213 def test_from_header
213 def test_from_header
214 with_settings :mail_from => 'redmine@example.net' do
214 with_settings :mail_from => 'redmine@example.net' do
215 Mailer.test_email(User.find(1)).deliver
215 Mailer.test_email(User.find(1)).deliver
216 end
216 end
217 mail = last_email
217 mail = last_email
218 assert_equal 'redmine@example.net', mail.from_addrs.first
218 assert_equal 'redmine@example.net', mail.from_addrs.first
219 end
219 end
220
220
221 def test_from_header_with_phrase
221 def test_from_header_with_phrase
222 with_settings :mail_from => 'Redmine app <redmine@example.net>' do
222 with_settings :mail_from => 'Redmine app <redmine@example.net>' do
223 Mailer.test_email(User.find(1)).deliver
223 Mailer.test_email(User.find(1)).deliver
224 end
224 end
225 mail = last_email
225 mail = last_email
226 assert_equal 'redmine@example.net', mail.from_addrs.first
226 assert_equal 'redmine@example.net', mail.from_addrs.first
227 assert_equal 'Redmine app <redmine@example.net>', mail.header['From'].to_s
227 assert_equal 'Redmine app <redmine@example.net>', mail.header['From'].to_s
228 end
228 end
229
229
230 def test_should_not_send_email_without_recipient
230 def test_should_not_send_email_without_recipient
231 news = News.first
231 news = News.first
232 user = news.author
232 user = news.author
233 # Remove members except news author
233 # Remove members except news author
234 news.project.memberships.each {|m| m.destroy unless m.user == user}
234 news.project.memberships.each {|m| m.destroy unless m.user == user}
235
235
236 user.pref.no_self_notified = false
236 user.pref.no_self_notified = false
237 user.pref.save
237 user.pref.save
238 User.current = user
238 User.current = user
239 Mailer.news_added(news.reload).deliver
239 Mailer.news_added(news.reload).deliver
240 assert_equal 1, last_email.bcc.size
240 assert_equal 1, last_email.bcc.size
241
241
242 # nobody to notify
242 # nobody to notify
243 user.pref.no_self_notified = true
243 user.pref.no_self_notified = true
244 user.pref.save
244 user.pref.save
245 User.current = user
245 User.current = user
246 ActionMailer::Base.deliveries.clear
246 ActionMailer::Base.deliveries.clear
247 Mailer.news_added(news.reload).deliver
247 Mailer.news_added(news.reload).deliver
248 assert ActionMailer::Base.deliveries.empty?
248 assert ActionMailer::Base.deliveries.empty?
249 end
249 end
250
250
251 def test_issue_add_message_id
251 def test_issue_add_message_id
252 issue = Issue.find(2)
252 issue = Issue.find(2)
253 Mailer.deliver_issue_add(issue)
253 Mailer.deliver_issue_add(issue)
254 mail = last_email
254 mail = last_email
255 assert_match /^redmine\.issue-2\.20060719190421\.[a-f0-9]+@example\.net/, mail.message_id
255 assert_match /^redmine\.issue-2\.20060719190421\.[a-f0-9]+@example\.net/, mail.message_id
256 assert_include "redmine.issue-2.20060719190421@example.net", mail.references
256 assert_include "redmine.issue-2.20060719190421@example.net", mail.references
257 end
257 end
258
258
259 def test_issue_edit_message_id
259 def test_issue_edit_message_id
260 journal = Journal.find(3)
260 journal = Journal.find(3)
261 journal.issue = Issue.find(2)
261 journal.issue = Issue.find(2)
262
262
263 Mailer.deliver_issue_edit(journal)
263 Mailer.deliver_issue_edit(journal)
264 mail = last_email
264 mail = last_email
265 assert_match /^redmine\.journal-3\.\d+\.[a-f0-9]+@example\.net/, mail.message_id
265 assert_match /^redmine\.journal-3\.\d+\.[a-f0-9]+@example\.net/, mail.message_id
266 assert_include "redmine.issue-2.20060719190421@example.net", mail.references
266 assert_include "redmine.issue-2.20060719190421@example.net", mail.references
267 assert_select_email do
267 assert_select_email do
268 # link to the update
268 # link to the update
269 assert_select "a[href=?]",
269 assert_select "a[href=?]",
270 "http://mydomain.foo/issues/#{journal.journalized_id}#change-#{journal.id}"
270 "http://mydomain.foo/issues/#{journal.journalized_id}#change-#{journal.id}"
271 end
271 end
272 end
272 end
273
273
274 def test_message_posted_message_id
274 def test_message_posted_message_id
275 message = Message.find(1)
275 message = Message.find(1)
276 Mailer.message_posted(message).deliver
276 Mailer.message_posted(message).deliver
277 mail = last_email
277 mail = last_email
278 assert_match /^redmine\.message-1\.\d+\.[a-f0-9]+@example\.net/, mail.message_id
278 assert_match /^redmine\.message-1\.\d+\.[a-f0-9]+@example\.net/, mail.message_id
279 assert_include "redmine.message-1.20070512151532@example.net", mail.references
279 assert_include "redmine.message-1.20070512151532@example.net", mail.references
280 assert_select_email do
280 assert_select_email do
281 # link to the message
281 # link to the message
282 assert_select "a[href=?]",
282 assert_select "a[href=?]",
283 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.id}",
283 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.id}",
284 :text => message.subject
284 :text => message.subject
285 end
285 end
286 end
286 end
287
287
288 def test_reply_posted_message_id
288 def test_reply_posted_message_id
289 message = Message.find(3)
289 message = Message.find(3)
290 Mailer.message_posted(message).deliver
290 Mailer.message_posted(message).deliver
291 mail = last_email
291 mail = last_email
292 assert_match /^redmine\.message-3\.\d+\.[a-f0-9]+@example\.net/, mail.message_id
292 assert_match /^redmine\.message-3\.\d+\.[a-f0-9]+@example\.net/, mail.message_id
293 assert_include "redmine.message-1.20070512151532@example.net", mail.references
293 assert_include "redmine.message-1.20070512151532@example.net", mail.references
294 assert_select_email do
294 assert_select_email do
295 # link to the reply
295 # link to the reply
296 assert_select "a[href=?]",
296 assert_select "a[href=?]",
297 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.root.id}?r=#{message.id}#message-#{message.id}",
297 "http://mydomain.foo/boards/#{message.board.id}/topics/#{message.root.id}?r=#{message.id}#message-#{message.id}",
298 :text => message.subject
298 :text => message.subject
299 end
299 end
300 end
300 end
301
301
302 test "#issue_add should notify project members" do
302 test "#issue_add should notify project members" do
303 issue = Issue.find(1)
303 issue = Issue.find(1)
304 assert Mailer.deliver_issue_add(issue)
304 assert Mailer.deliver_issue_add(issue)
305 assert last_email.bcc.include?('dlopper@somenet.foo')
305 assert last_email.bcc.include?('dlopper@somenet.foo')
306 end
306 end
307
307
308 def test_issue_add_should_send_mail_to_all_user_email_address
308 def test_issue_add_should_send_mail_to_all_user_email_address
309 EmailAddress.create!(:user_id => 3, :address => 'otheremail@somenet.foo')
309 EmailAddress.create!(:user_id => 3, :address => 'otheremail@somenet.foo')
310 issue = Issue.find(1)
310 issue = Issue.find(1)
311 assert Mailer.deliver_issue_add(issue)
311 assert Mailer.deliver_issue_add(issue)
312 assert last_email.bcc.include?('dlopper@somenet.foo')
312 assert last_email.bcc.include?('dlopper@somenet.foo')
313 assert last_email.bcc.include?('otheremail@somenet.foo')
313 assert last_email.bcc.include?('otheremail@somenet.foo')
314 end
314 end
315
315
316 test "#issue_add should not notify project members that are not allow to view the issue" do
316 test "#issue_add should not notify project members that are not allow to view the issue" do
317 issue = Issue.find(1)
317 issue = Issue.find(1)
318 Role.find(2).remove_permission!(:view_issues)
318 Role.find(2).remove_permission!(:view_issues)
319 assert Mailer.deliver_issue_add(issue)
319 assert Mailer.deliver_issue_add(issue)
320 assert !last_email.bcc.include?('dlopper@somenet.foo')
320 assert !last_email.bcc.include?('dlopper@somenet.foo')
321 end
321 end
322
322
323 test "#issue_add should notify issue watchers" do
323 test "#issue_add should notify issue watchers" do
324 issue = Issue.find(1)
324 issue = Issue.find(1)
325 user = User.find(9)
325 user = User.find(9)
326 # minimal email notification options
326 # minimal email notification options
327 user.pref.no_self_notified = '1'
327 user.pref.no_self_notified = '1'
328 user.pref.save
328 user.pref.save
329 user.mail_notification = false
329 user.mail_notification = false
330 user.save
330 user.save
331
331
332 Watcher.create!(:watchable => issue, :user => user)
332 Watcher.create!(:watchable => issue, :user => user)
333 assert Mailer.deliver_issue_add(issue)
333 assert Mailer.deliver_issue_add(issue)
334 assert last_email.bcc.include?(user.mail)
334 assert last_email.bcc.include?(user.mail)
335 end
335 end
336
336
337 test "#issue_add should not notify watchers not allowed to view the issue" do
337 test "#issue_add should not notify watchers not allowed to view the issue" do
338 issue = Issue.find(1)
338 issue = Issue.find(1)
339 user = User.find(9)
339 user = User.find(9)
340 Watcher.create!(:watchable => issue, :user => user)
340 Watcher.create!(:watchable => issue, :user => user)
341 Role.non_member.remove_permission!(:view_issues)
341 Role.non_member.remove_permission!(:view_issues)
342 assert Mailer.deliver_issue_add(issue)
342 assert Mailer.deliver_issue_add(issue)
343 assert !last_email.bcc.include?(user.mail)
343 assert !last_email.bcc.include?(user.mail)
344 end
344 end
345
345
346 def test_issue_add_should_include_enabled_fields
346 def test_issue_add_should_include_enabled_fields
347 issue = Issue.find(2)
347 issue = Issue.find(2)
348 assert Mailer.deliver_issue_add(issue)
348 assert Mailer.deliver_issue_add(issue)
349 assert_mail_body_match '* Target version: 1.0', last_email
349 assert_mail_body_match '* Target version: 1.0', last_email
350 assert_select_email do
350 assert_select_email do
351 assert_select 'li', :text => 'Target version: 1.0'
351 assert_select 'li', :text => 'Target version: 1.0'
352 end
352 end
353 end
353 end
354
354
355 def test_issue_add_should_not_include_disabled_fields
355 def test_issue_add_should_not_include_disabled_fields
356 issue = Issue.find(2)
356 issue = Issue.find(2)
357 tracker = issue.tracker
357 tracker = issue.tracker
358 tracker.core_fields -= ['fixed_version_id']
358 tracker.core_fields -= ['fixed_version_id']
359 tracker.save!
359 tracker.save!
360 assert Mailer.deliver_issue_add(issue)
360 assert Mailer.deliver_issue_add(issue)
361 assert_mail_body_no_match 'Target version', last_email
361 assert_mail_body_no_match 'Target version', last_email
362 assert_select_email do
362 assert_select_email do
363 assert_select 'li', :text => /Target version/, :count => 0
363 assert_select 'li', :text => /Target version/, :count => 0
364 end
364 end
365 end
365 end
366
366
367 # test mailer methods for each language
367 # test mailer methods for each language
368 def test_issue_add
368 def test_issue_add
369 issue = Issue.find(1)
369 issue = Issue.find(1)
370 with_each_language_as_default do
370 with_each_language_as_default do
371 assert Mailer.deliver_issue_add(issue)
371 assert Mailer.deliver_issue_add(issue)
372 end
372 end
373 end
373 end
374
374
375 def test_issue_edit
375 def test_issue_edit
376 journal = Journal.find(1)
376 journal = Journal.find(1)
377 with_each_language_as_default do
377 with_each_language_as_default do
378 assert Mailer.deliver_issue_edit(journal)
378 assert Mailer.deliver_issue_edit(journal)
379 end
379 end
380 end
380 end
381
381
382 def test_issue_edit_should_send_private_notes_to_users_with_permission_only
382 def test_issue_edit_should_send_private_notes_to_users_with_permission_only
383 journal = Journal.find(1)
383 journal = Journal.find(1)
384 journal.private_notes = true
384 journal.private_notes = true
385 journal.save!
385 journal.save!
386
386
387 Role.find(2).add_permission! :view_private_notes
387 Role.find(2).add_permission! :view_private_notes
388 Mailer.deliver_issue_edit(journal)
388 Mailer.deliver_issue_edit(journal)
389 assert_equal %w(dlopper@somenet.foo jsmith@somenet.foo), ActionMailer::Base.deliveries.last.bcc.sort
389 assert_equal %w(dlopper@somenet.foo jsmith@somenet.foo), ActionMailer::Base.deliveries.last.bcc.sort
390
390
391 Role.find(2).remove_permission! :view_private_notes
391 Role.find(2).remove_permission! :view_private_notes
392 Mailer.deliver_issue_edit(journal)
392 Mailer.deliver_issue_edit(journal)
393 assert_equal %w(jsmith@somenet.foo), ActionMailer::Base.deliveries.last.bcc.sort
393 assert_equal %w(jsmith@somenet.foo), ActionMailer::Base.deliveries.last.bcc.sort
394 end
394 end
395
395
396 def test_issue_edit_should_send_private_notes_to_watchers_with_permission_only
396 def test_issue_edit_should_send_private_notes_to_watchers_with_permission_only
397 Issue.find(1).set_watcher(User.find_by_login('someone'))
397 Issue.find(1).set_watcher(User.find_by_login('someone'))
398 journal = Journal.find(1)
398 journal = Journal.find(1)
399 journal.private_notes = true
399 journal.private_notes = true
400 journal.save!
400 journal.save!
401
401
402 Role.non_member.add_permission! :view_private_notes
402 Role.non_member.add_permission! :view_private_notes
403 Mailer.deliver_issue_edit(journal)
403 Mailer.deliver_issue_edit(journal)
404 assert_include 'someone@foo.bar', ActionMailer::Base.deliveries.last.bcc.sort
404 assert_include 'someone@foo.bar', ActionMailer::Base.deliveries.last.bcc.sort
405
405
406 Role.non_member.remove_permission! :view_private_notes
406 Role.non_member.remove_permission! :view_private_notes
407 Mailer.deliver_issue_edit(journal)
407 Mailer.deliver_issue_edit(journal)
408 assert_not_include 'someone@foo.bar', ActionMailer::Base.deliveries.last.bcc.sort
408 assert_not_include 'someone@foo.bar', ActionMailer::Base.deliveries.last.bcc.sort
409 end
409 end
410
410
411 def test_issue_edit_should_mark_private_notes
411 def test_issue_edit_should_mark_private_notes
412 journal = Journal.find(2)
412 journal = Journal.find(2)
413 journal.private_notes = true
413 journal.private_notes = true
414 journal.save!
414 journal.save!
415
415
416 with_settings :default_language => 'en' do
416 with_settings :default_language => 'en' do
417 Mailer.deliver_issue_edit(journal)
417 Mailer.deliver_issue_edit(journal)
418 end
418 end
419 assert_mail_body_match '(Private notes)', last_email
419 assert_mail_body_match '(Private notes)', last_email
420 end
420 end
421
421
422 def test_issue_edit_with_relation_should_notify_users_who_can_see_the_related_issue
422 def test_issue_edit_with_relation_should_notify_users_who_can_see_the_related_issue
423 issue = Issue.generate!
423 issue = Issue.generate!
424 issue.init_journal(User.find(1))
424 issue.init_journal(User.find(1))
425 private_issue = Issue.generate!(:is_private => true)
425 private_issue = Issue.generate!(:is_private => true)
426 IssueRelation.create!(:issue_from => issue, :issue_to => private_issue, :relation_type => 'relates')
426 IssueRelation.create!(:issue_from => issue, :issue_to => private_issue, :relation_type => 'relates')
427 issue.reload
427 issue.reload
428 assert_equal 1, issue.journals.size
428 assert_equal 1, issue.journals.size
429 journal = issue.journals.first
429 journal = issue.journals.first
430 ActionMailer::Base.deliveries.clear
430 ActionMailer::Base.deliveries.clear
431
431
432 Mailer.deliver_issue_edit(journal)
432 Mailer.deliver_issue_edit(journal)
433 last_email.bcc.each do |email|
433 last_email.bcc.each do |email|
434 user = User.find_by_mail(email)
434 user = User.find_by_mail(email)
435 assert private_issue.visible?(user), "Issue was not visible to #{user}"
435 assert private_issue.visible?(user), "Issue was not visible to #{user}"
436 end
436 end
437 end
437 end
438
438
439 def test_document_added
439 def test_document_added
440 document = Document.find(1)
440 document = Document.find(1)
441 with_each_language_as_default do
441 with_each_language_as_default do
442 assert Mailer.document_added(document).deliver
442 assert Mailer.document_added(document).deliver
443 end
443 end
444 end
444 end
445
445
446 def test_attachments_added
446 def test_attachments_added
447 attachements = [ Attachment.find_by_container_type('Document') ]
447 attachements = [ Attachment.find_by_container_type('Document') ]
448 with_each_language_as_default do
448 with_each_language_as_default do
449 assert Mailer.attachments_added(attachements).deliver
449 assert Mailer.attachments_added(attachements).deliver
450 end
450 end
451 end
451 end
452
452
453 def test_version_file_added
453 def test_version_file_added
454 attachements = [ Attachment.find_by_container_type('Version') ]
454 attachements = [ Attachment.find_by_container_type('Version') ]
455 assert Mailer.attachments_added(attachements).deliver
455 assert Mailer.attachments_added(attachements).deliver
456 assert_not_nil last_email.bcc
456 assert_not_nil last_email.bcc
457 assert last_email.bcc.any?
457 assert last_email.bcc.any?
458 assert_select_email do
458 assert_select_email do
459 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
459 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
460 end
460 end
461 end
461 end
462
462
463 def test_project_file_added
463 def test_project_file_added
464 attachements = [ Attachment.find_by_container_type('Project') ]
464 attachements = [ Attachment.find_by_container_type('Project') ]
465 assert Mailer.attachments_added(attachements).deliver
465 assert Mailer.attachments_added(attachements).deliver
466 assert_not_nil last_email.bcc
466 assert_not_nil last_email.bcc
467 assert last_email.bcc.any?
467 assert last_email.bcc.any?
468 assert_select_email do
468 assert_select_email do
469 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
469 assert_select "a[href=?]", "http://mydomain.foo/projects/ecookbook/files"
470 end
470 end
471 end
471 end
472
472
473 def test_news_added
473 def test_news_added
474 news = News.first
474 news = News.first
475 with_each_language_as_default do
475 with_each_language_as_default do
476 assert Mailer.news_added(news).deliver
476 assert Mailer.news_added(news).deliver
477 end
477 end
478 end
478 end
479
479
480 def test_news_added_should_notify_project_news_watchers
480 def test_news_added_should_notify_project_news_watchers
481 user1 = User.generate!
481 user1 = User.generate!
482 user2 = User.generate!
482 user2 = User.generate!
483 news = News.find(1)
483 news = News.find(1)
484 news.project.enabled_module('news').add_watcher(user1)
484 news.project.enabled_module('news').add_watcher(user1)
485
485
486 Mailer.news_added(news).deliver
486 Mailer.news_added(news).deliver
487 assert_include user1.mail, last_email.bcc
487 assert_include user1.mail, last_email.bcc
488 assert_not_include user2.mail, last_email.bcc
488 assert_not_include user2.mail, last_email.bcc
489 end
489 end
490
490
491 def test_news_comment_added
491 def test_news_comment_added
492 comment = Comment.find(2)
492 comment = Comment.find(2)
493 with_each_language_as_default do
493 with_each_language_as_default do
494 assert Mailer.news_comment_added(comment).deliver
494 assert Mailer.news_comment_added(comment).deliver
495 end
495 end
496 end
496 end
497
497
498 def test_message_posted
498 def test_message_posted
499 message = Message.first
499 message = Message.first
500 recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
500 recipients = ([message.root] + message.root.children).collect {|m| m.author.mail if m.author}
501 recipients = recipients.compact.uniq
501 recipients = recipients.compact.uniq
502 with_each_language_as_default do
502 with_each_language_as_default do
503 assert Mailer.message_posted(message).deliver
503 assert Mailer.message_posted(message).deliver
504 end
504 end
505 end
505 end
506
506
507 def test_wiki_content_added
507 def test_wiki_content_added
508 content = WikiContent.find(1)
508 content = WikiContent.find(1)
509 with_each_language_as_default do
509 with_each_language_as_default do
510 assert_difference 'ActionMailer::Base.deliveries.size' do
510 assert_difference 'ActionMailer::Base.deliveries.size' do
511 assert Mailer.wiki_content_added(content).deliver
511 assert Mailer.wiki_content_added(content).deliver
512 assert_select_email do
512 assert_select_email do
513 assert_select 'a[href=?]',
513 assert_select 'a[href=?]',
514 'http://mydomain.foo/projects/ecookbook/wiki/CookBook_documentation',
514 'http://mydomain.foo/projects/ecookbook/wiki/CookBook_documentation',
515 :text => 'CookBook documentation'
515 :text => 'CookBook documentation'
516 end
516 end
517 end
517 end
518 end
518 end
519 end
519 end
520
520
521 def test_wiki_content_updated
521 def test_wiki_content_updated
522 content = WikiContent.find(1)
522 content = WikiContent.find(1)
523 with_each_language_as_default do
523 with_each_language_as_default do
524 assert_difference 'ActionMailer::Base.deliveries.size' do
524 assert_difference 'ActionMailer::Base.deliveries.size' do
525 assert Mailer.wiki_content_updated(content).deliver
525 assert Mailer.wiki_content_updated(content).deliver
526 assert_select_email do
526 assert_select_email do
527 assert_select 'a[href=?]',
527 assert_select 'a[href=?]',
528 'http://mydomain.foo/projects/ecookbook/wiki/CookBook_documentation',
528 'http://mydomain.foo/projects/ecookbook/wiki/CookBook_documentation',
529 :text => 'CookBook documentation'
529 :text => 'CookBook documentation'
530 end
530 end
531 end
531 end
532 end
532 end
533 end
533 end
534
534
535 def test_account_information
535 def test_account_information
536 user = User.find(2)
536 user = User.find(2)
537 valid_languages.each do |lang|
537 valid_languages.each do |lang|
538 user.update_attribute :language, lang.to_s
538 user.update_attribute :language, lang.to_s
539 user.reload
539 user.reload
540 assert Mailer.account_information(user, 'pAsswORd').deliver
540 assert Mailer.account_information(user, 'pAsswORd').deliver
541 end
541 end
542 end
542 end
543
543
544 def test_lost_password
544 def test_lost_password
545 token = Token.find(2)
545 token = Token.find(2)
546 valid_languages.each do |lang|
546 valid_languages.each do |lang|
547 token.user.update_attribute :language, lang.to_s
547 token.user.update_attribute :language, lang.to_s
548 token.reload
548 token.reload
549 assert Mailer.lost_password(token).deliver
549 assert Mailer.lost_password(token).deliver
550 end
550 end
551 end
551 end
552
552
553 def test_register
553 def test_register
554 token = Token.find(1)
554 token = Token.find(1)
555 Setting.host_name = 'redmine.foo'
555 Setting.host_name = 'redmine.foo'
556 Setting.protocol = 'https'
556 Setting.protocol = 'https'
557
557
558 valid_languages.each do |lang|
558 valid_languages.each do |lang|
559 token.user.update_attribute :language, lang.to_s
559 token.user.update_attribute :language, lang.to_s
560 token.reload
560 token.reload
561 ActionMailer::Base.deliveries.clear
561 ActionMailer::Base.deliveries.clear
562 assert Mailer.register(token).deliver
562 assert Mailer.register(token).deliver
563 mail = last_email
563 mail = last_email
564 assert_select_email do
564 assert_select_email do
565 assert_select "a[href=?]",
565 assert_select "a[href=?]",
566 "https://redmine.foo/account/activate?token=#{token.value}",
566 "https://redmine.foo/account/activate?token=#{token.value}",
567 :text => "https://redmine.foo/account/activate?token=#{token.value}"
567 :text => "https://redmine.foo/account/activate?token=#{token.value}"
568 end
568 end
569 end
569 end
570 end
570 end
571
571
572 def test_test
572 def test_test
573 user = User.find(1)
573 user = User.find(1)
574 valid_languages.each do |lang|
574 valid_languages.each do |lang|
575 user.update_attribute :language, lang.to_s
575 user.update_attribute :language, lang.to_s
576 assert Mailer.test_email(user).deliver
576 assert Mailer.test_email(user).deliver
577 end
577 end
578 end
578 end
579
579
580 def test_reminders
580 def test_reminders
581 Mailer.reminders(:days => 42)
581 Mailer.reminders(:days => 42)
582 assert_equal 1, ActionMailer::Base.deliveries.size
582 assert_equal 1, ActionMailer::Base.deliveries.size
583 mail = last_email
583 mail = last_email
584 assert mail.bcc.include?('dlopper@somenet.foo')
584 assert mail.bcc.include?('dlopper@somenet.foo')
585 assert_mail_body_match 'Bug #3: Error 281 when updating a recipe', mail
585 assert_mail_body_match 'Bug #3: Error 281 when updating a recipe', mail
586 assert_equal '1 issue(s) due in the next 42 days', mail.subject
586 assert_equal '1 issue(s) due in the next 42 days', mail.subject
587 end
587 end
588
588
589 def test_reminders_should_not_include_closed_issues
589 def test_reminders_should_not_include_closed_issues
590 with_settings :default_language => 'en' do
590 with_settings :default_language => 'en' do
591 Issue.create!(:project_id => 1, :tracker_id => 1, :status_id => 5,
591 Issue.create!(:project_id => 1, :tracker_id => 1, :status_id => 5,
592 :subject => 'Closed issue', :assigned_to_id => 3,
592 :subject => 'Closed issue', :assigned_to_id => 3,
593 :due_date => 5.days.from_now,
593 :due_date => 5.days.from_now,
594 :author_id => 2)
594 :author_id => 2)
595 ActionMailer::Base.deliveries.clear
595 ActionMailer::Base.deliveries.clear
596
596
597 Mailer.reminders(:days => 42)
597 Mailer.reminders(:days => 42)
598 assert_equal 1, ActionMailer::Base.deliveries.size
598 assert_equal 1, ActionMailer::Base.deliveries.size
599 mail = last_email
599 mail = last_email
600 assert mail.bcc.include?('dlopper@somenet.foo')
600 assert mail.bcc.include?('dlopper@somenet.foo')
601 assert_mail_body_no_match 'Closed issue', mail
601 assert_mail_body_no_match 'Closed issue', mail
602 end
602 end
603 end
603 end
604
604
605 def test_reminders_for_users
605 def test_reminders_for_users
606 Mailer.reminders(:days => 42, :users => ['5'])
606 Mailer.reminders(:days => 42, :users => ['5'])
607 assert_equal 0, ActionMailer::Base.deliveries.size # No mail for dlopper
607 assert_equal 0, ActionMailer::Base.deliveries.size # No mail for dlopper
608 Mailer.reminders(:days => 42, :users => ['3'])
608 Mailer.reminders(:days => 42, :users => ['3'])
609 assert_equal 1, ActionMailer::Base.deliveries.size # No mail for dlopper
609 assert_equal 1, ActionMailer::Base.deliveries.size # No mail for dlopper
610 mail = last_email
610 mail = last_email
611 assert mail.bcc.include?('dlopper@somenet.foo')
611 assert mail.bcc.include?('dlopper@somenet.foo')
612 assert_mail_body_match 'Bug #3: Error 281 when updating a recipe', mail
612 assert_mail_body_match 'Bug #3: Error 281 when updating a recipe', mail
613 end
613 end
614
614
615 def test_reminder_should_include_issues_assigned_to_groups
615 def test_reminder_should_include_issues_assigned_to_groups
616 with_settings :default_language => 'en' do
616 with_settings :default_language => 'en' do
617 group = Group.generate!
617 group = Group.generate!
618 group.users << User.find(2)
618 group.users << User.find(2)
619 group.users << User.find(3)
619 group.users << User.find(3)
620
620
621 Issue.create!(:project_id => 1, :tracker_id => 1, :status_id => 1,
621 Issue.create!(:project_id => 1, :tracker_id => 1, :status_id => 1,
622 :subject => 'Assigned to group', :assigned_to => group,
622 :subject => 'Assigned to group', :assigned_to => group,
623 :due_date => 5.days.from_now,
623 :due_date => 5.days.from_now,
624 :author_id => 2)
624 :author_id => 2)
625 ActionMailer::Base.deliveries.clear
625 ActionMailer::Base.deliveries.clear
626
626
627 Mailer.reminders(:days => 7)
627 Mailer.reminders(:days => 7)
628 assert_equal 2, ActionMailer::Base.deliveries.size
628 assert_equal 2, ActionMailer::Base.deliveries.size
629 assert_equal %w(dlopper@somenet.foo jsmith@somenet.foo), ActionMailer::Base.deliveries.map(&:bcc).flatten.sort
629 assert_equal %w(dlopper@somenet.foo jsmith@somenet.foo), ActionMailer::Base.deliveries.map(&:bcc).flatten.sort
630 ActionMailer::Base.deliveries.each do |mail|
630 ActionMailer::Base.deliveries.each do |mail|
631 assert_mail_body_match 'Assigned to group', mail
631 assert_mail_body_match 'Assigned to group', mail
632 end
632 end
633 end
633 end
634 end
634 end
635
635
636 def test_reminders_for_versions
636 def test_reminders_for_versions
637 with_settings :default_language => 'en' do
637 with_settings :default_language => 'en' do
638 Mailer.reminders(:days => 42, :users => ['3'])
638 version = Version.generate!(:name => 'Acme', :project_id => 1)
639 assert_equal 1, ActionMailer::Base.deliveries.size
639 Issue.generate!(:assigned_to => User.find(2), :due_date => 5.days.from_now)
640
640 Issue.generate!(:assigned_to => User.find(3), :due_date => 5.days.from_now, :fixed_version => version)
641 ActionMailer::Base.deliveries.clear
641 ActionMailer::Base.deliveries.clear
642 Version.create!(name: 'Acme', project_id: 1, sharing: 'none')
642
643 Mailer.reminders(:days => 42, :users => ['3'], :version => 'Acme')
643 Mailer.reminders(:days => 42, :version => 'acme')
644 assert_equal 0, ActionMailer::Base.deliveries.size
644 assert_equal 1, ActionMailer::Base.deliveries.size
645 Issue.create!(:project_id => 1, :tracker_id => 1, :status_id => 1,
646 :subject => 'Assigned to user', :assigned_to => User.find(3),
647 :due_date => 5.days.from_now,
648 :author_id => 2)
649 Mailer.reminders(:days => 42, :users => ['3'], :version => 'Acme')
650 assert_equal 1, ActionMailer::Base.deliveries.size
651
645
652 mail = last_email
646 mail = last_email
653 assert mail.bcc.include?('dlopper@somenet.foo')
647 assert mail.bcc.include?('dlopper@somenet.foo')
654 end
648 end
655 end
649 end
656
650
657 def test_mailer_should_not_change_locale
651 def test_mailer_should_not_change_locale
658 # Set current language to italian
652 # Set current language to italian
659 set_language_if_valid 'it'
653 set_language_if_valid 'it'
660 # Send an email to a french user
654 # Send an email to a french user
661 user = User.find(1)
655 user = User.find(1)
662 user.language = 'fr'
656 user.language = 'fr'
663 Mailer.account_activated(user).deliver
657 Mailer.account_activated(user).deliver
664 mail = last_email
658 mail = last_email
665 assert_mail_body_match 'Votre compte', mail
659 assert_mail_body_match 'Votre compte', mail
666
660
667 assert_equal :it, current_language
661 assert_equal :it, current_language
668 end
662 end
669
663
670 def test_with_deliveries_off
664 def test_with_deliveries_off
671 Mailer.with_deliveries false do
665 Mailer.with_deliveries false do
672 Mailer.test_email(User.find(1)).deliver
666 Mailer.test_email(User.find(1)).deliver
673 end
667 end
674 assert ActionMailer::Base.deliveries.empty?
668 assert ActionMailer::Base.deliveries.empty?
675 # should restore perform_deliveries
669 # should restore perform_deliveries
676 assert ActionMailer::Base.perform_deliveries
670 assert ActionMailer::Base.perform_deliveries
677 end
671 end
678
672
679 def test_token_for_should_strip_trailing_gt_from_address_with_full_name
673 def test_token_for_should_strip_trailing_gt_from_address_with_full_name
680 with_settings :mail_from => "Redmine Mailer<no-reply@redmine.org>" do
674 with_settings :mail_from => "Redmine Mailer<no-reply@redmine.org>" do
681 assert_match /\Aredmine.issue-\d+\.\d+\.[0-9a-f]+@redmine.org\z/, Mailer.token_for(Issue.generate!)
675 assert_match /\Aredmine.issue-\d+\.\d+\.[0-9a-f]+@redmine.org\z/, Mailer.token_for(Issue.generate!)
682 end
676 end
683 end
677 end
684
678
685 def test_layout_should_include_the_emails_header
679 def test_layout_should_include_the_emails_header
686 with_settings :emails_header => "*Header content*" do
680 with_settings :emails_header => "*Header content*" do
687 with_settings :plain_text_mail => 0 do
681 with_settings :plain_text_mail => 0 do
688 assert Mailer.test_email(User.find(1)).deliver
682 assert Mailer.test_email(User.find(1)).deliver
689 assert_select_email do
683 assert_select_email do
690 assert_select ".header" do
684 assert_select ".header" do
691 assert_select "strong", :text => "Header content"
685 assert_select "strong", :text => "Header content"
692 end
686 end
693 end
687 end
694 end
688 end
695 with_settings :plain_text_mail => 1 do
689 with_settings :plain_text_mail => 1 do
696 assert Mailer.test_email(User.find(1)).deliver
690 assert Mailer.test_email(User.find(1)).deliver
697 mail = last_email
691 mail = last_email
698 assert_not_nil mail
692 assert_not_nil mail
699 assert_include "*Header content*", mail.body.decoded
693 assert_include "*Header content*", mail.body.decoded
700 end
694 end
701 end
695 end
702 end
696 end
703
697
704 def test_layout_should_not_include_empty_emails_header
698 def test_layout_should_not_include_empty_emails_header
705 with_settings :emails_header => "", :plain_text_mail => 0 do
699 with_settings :emails_header => "", :plain_text_mail => 0 do
706 assert Mailer.test_email(User.find(1)).deliver
700 assert Mailer.test_email(User.find(1)).deliver
707 assert_select_email do
701 assert_select_email do
708 assert_select ".header", false
702 assert_select ".header", false
709 end
703 end
710 end
704 end
711 end
705 end
712
706
713 def test_layout_should_include_the_emails_footer
707 def test_layout_should_include_the_emails_footer
714 with_settings :emails_footer => "*Footer content*" do
708 with_settings :emails_footer => "*Footer content*" do
715 with_settings :plain_text_mail => 0 do
709 with_settings :plain_text_mail => 0 do
716 assert Mailer.test_email(User.find(1)).deliver
710 assert Mailer.test_email(User.find(1)).deliver
717 assert_select_email do
711 assert_select_email do
718 assert_select ".footer" do
712 assert_select ".footer" do
719 assert_select "strong", :text => "Footer content"
713 assert_select "strong", :text => "Footer content"
720 end
714 end
721 end
715 end
722 end
716 end
723 with_settings :plain_text_mail => 1 do
717 with_settings :plain_text_mail => 1 do
724 assert Mailer.test_email(User.find(1)).deliver
718 assert Mailer.test_email(User.find(1)).deliver
725 mail = last_email
719 mail = last_email
726 assert_not_nil mail
720 assert_not_nil mail
727 assert_include "\n-- \n", mail.body.decoded
721 assert_include "\n-- \n", mail.body.decoded
728 assert_include "*Footer content*", mail.body.decoded
722 assert_include "*Footer content*", mail.body.decoded
729 end
723 end
730 end
724 end
731 end
725 end
732
726
733 def test_layout_should_not_include_empty_emails_footer
727 def test_layout_should_not_include_empty_emails_footer
734 with_settings :emails_footer => "" do
728 with_settings :emails_footer => "" do
735 with_settings :plain_text_mail => 0 do
729 with_settings :plain_text_mail => 0 do
736 assert Mailer.test_email(User.find(1)).deliver
730 assert Mailer.test_email(User.find(1)).deliver
737 assert_select_email do
731 assert_select_email do
738 assert_select ".footer", false
732 assert_select ".footer", false
739 end
733 end
740 end
734 end
741 with_settings :plain_text_mail => 1 do
735 with_settings :plain_text_mail => 1 do
742 assert Mailer.test_email(User.find(1)).deliver
736 assert Mailer.test_email(User.find(1)).deliver
743 mail = last_email
737 mail = last_email
744 assert_not_nil mail
738 assert_not_nil mail
745 assert_not_include "\n-- \n", mail.body.decoded
739 assert_not_include "\n-- \n", mail.body.decoded
746 end
740 end
747 end
741 end
748 end
742 end
749
743
750 def test_should_escape_html_templates_only
744 def test_should_escape_html_templates_only
751 Issue.generate!(:project_id => 1, :tracker_id => 1, :subject => 'Subject with a <tag>')
745 Issue.generate!(:project_id => 1, :tracker_id => 1, :subject => 'Subject with a <tag>')
752 mail = last_email
746 mail = last_email
753 assert_equal 2, mail.parts.size
747 assert_equal 2, mail.parts.size
754 assert_include '<tag>', text_part.body.encoded
748 assert_include '<tag>', text_part.body.encoded
755 assert_include '&lt;tag&gt;', html_part.body.encoded
749 assert_include '&lt;tag&gt;', html_part.body.encoded
756 end
750 end
757
751
758 def test_should_raise_delivery_errors_when_raise_delivery_errors_is_true
752 def test_should_raise_delivery_errors_when_raise_delivery_errors_is_true
759 mail = Mailer.test_email(User.find(1))
753 mail = Mailer.test_email(User.find(1))
760 mail.delivery_method.stubs(:deliver!).raises(Exception.new("delivery error"))
754 mail.delivery_method.stubs(:deliver!).raises(Exception.new("delivery error"))
761
755
762 ActionMailer::Base.raise_delivery_errors = true
756 ActionMailer::Base.raise_delivery_errors = true
763 assert_raise Exception, "delivery error" do
757 assert_raise Exception, "delivery error" do
764 mail.deliver
758 mail.deliver
765 end
759 end
766 ensure
760 ensure
767 ActionMailer::Base.raise_delivery_errors = false
761 ActionMailer::Base.raise_delivery_errors = false
768 end
762 end
769
763
770 def test_should_log_delivery_errors_when_raise_delivery_errors_is_false
764 def test_should_log_delivery_errors_when_raise_delivery_errors_is_false
771 mail = Mailer.test_email(User.find(1))
765 mail = Mailer.test_email(User.find(1))
772 mail.delivery_method.stubs(:deliver!).raises(Exception.new("delivery error"))
766 mail.delivery_method.stubs(:deliver!).raises(Exception.new("delivery error"))
773
767
774 Rails.logger.expects(:error).with("Email delivery error: delivery error")
768 Rails.logger.expects(:error).with("Email delivery error: delivery error")
775 ActionMailer::Base.raise_delivery_errors = false
769 ActionMailer::Base.raise_delivery_errors = false
776 assert_nothing_raised do
770 assert_nothing_raised do
777 mail.deliver
771 mail.deliver
778 end
772 end
779 end
773 end
780
774
781 def test_with_synched_deliveries_should_yield_with_synced_deliveries
775 def test_with_synched_deliveries_should_yield_with_synced_deliveries
782 ActionMailer::Base.delivery_method = :async_smtp
776 ActionMailer::Base.delivery_method = :async_smtp
783 ActionMailer::Base.async_smtp_settings = {:foo => 'bar'}
777 ActionMailer::Base.async_smtp_settings = {:foo => 'bar'}
784
778
785 Mailer.with_synched_deliveries do
779 Mailer.with_synched_deliveries do
786 assert_equal :smtp, ActionMailer::Base.delivery_method
780 assert_equal :smtp, ActionMailer::Base.delivery_method
787 assert_equal({:foo => 'bar'}, ActionMailer::Base.smtp_settings)
781 assert_equal({:foo => 'bar'}, ActionMailer::Base.smtp_settings)
788 end
782 end
789 assert_equal :async_smtp, ActionMailer::Base.delivery_method
783 assert_equal :async_smtp, ActionMailer::Base.delivery_method
790 ensure
784 ensure
791 ActionMailer::Base.delivery_method = :test
785 ActionMailer::Base.delivery_method = :test
792 end
786 end
793
787
794 def test_email_addresses_should_keep_addresses
788 def test_email_addresses_should_keep_addresses
795 assert_equal ["foo@example.net"],
789 assert_equal ["foo@example.net"],
796 Mailer.email_addresses("foo@example.net")
790 Mailer.email_addresses("foo@example.net")
797
791
798 assert_equal ["foo@example.net", "bar@example.net"],
792 assert_equal ["foo@example.net", "bar@example.net"],
799 Mailer.email_addresses(["foo@example.net", "bar@example.net"])
793 Mailer.email_addresses(["foo@example.net", "bar@example.net"])
800 end
794 end
801
795
802 def test_email_addresses_should_replace_users_with_their_email_addresses
796 def test_email_addresses_should_replace_users_with_their_email_addresses
803 assert_equal ["admin@somenet.foo"],
797 assert_equal ["admin@somenet.foo"],
804 Mailer.email_addresses(User.find(1))
798 Mailer.email_addresses(User.find(1))
805
799
806 assert_equal ["admin@somenet.foo", "jsmith@somenet.foo"],
800 assert_equal ["admin@somenet.foo", "jsmith@somenet.foo"],
807 Mailer.email_addresses(User.where(:id => [1,2])).sort
801 Mailer.email_addresses(User.where(:id => [1,2])).sort
808 end
802 end
809
803
810 def test_email_addresses_should_include_notified_emails_addresses_only
804 def test_email_addresses_should_include_notified_emails_addresses_only
811 EmailAddress.create!(:user_id => 2, :address => "another@somenet.foo", :notify => false)
805 EmailAddress.create!(:user_id => 2, :address => "another@somenet.foo", :notify => false)
812 EmailAddress.create!(:user_id => 2, :address => "another2@somenet.foo")
806 EmailAddress.create!(:user_id => 2, :address => "another2@somenet.foo")
813
807
814 assert_equal ["another2@somenet.foo", "jsmith@somenet.foo"],
808 assert_equal ["another2@somenet.foo", "jsmith@somenet.foo"],
815 Mailer.email_addresses(User.find(2)).sort
809 Mailer.email_addresses(User.find(2)).sort
816 end
810 end
817
811
818 private
812 private
819
813
820 def last_email
814 def last_email
821 mail = ActionMailer::Base.deliveries.last
815 mail = ActionMailer::Base.deliveries.last
822 assert_not_nil mail
816 assert_not_nil mail
823 mail
817 mail
824 end
818 end
825
819
826 def text_part
820 def text_part
827 last_email.parts.detect {|part| part.content_type.include?('text/plain')}
821 last_email.parts.detect {|part| part.content_type.include?('text/plain')}
828 end
822 end
829
823
830 def html_part
824 def html_part
831 last_email.parts.detect {|part| part.content_type.include?('text/html')}
825 last_email.parts.detect {|part| part.content_type.include?('text/html')}
832 end
826 end
833
827
834 def with_each_language_as_default(&block)
828 def with_each_language_as_default(&block)
835 valid_languages.each do |lang|
829 valid_languages.each do |lang|
836 with_settings :default_language => lang.to_s do
830 with_settings :default_language => lang.to_s do
837 yield lang
831 yield lang
838 end
832 end
839 end
833 end
840 end
834 end
841 end
835 end
General Comments 0
You need to be logged in to leave comments. Login now