actionmailer_csi 2.3.5.p6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/CHANGELOG +370 -0
  2. data/MIT-LICENSE +21 -0
  3. data/README +149 -0
  4. data/Rakefile +99 -0
  5. data/install.rb +30 -0
  6. data/lib/action_mailer/adv_attr_accessor.rb +30 -0
  7. data/lib/action_mailer/base.rb +706 -0
  8. data/lib/action_mailer/helpers.rb +113 -0
  9. data/lib/action_mailer/mail_helper.rb +17 -0
  10. data/lib/action_mailer/part.rb +107 -0
  11. data/lib/action_mailer/part_container.rb +55 -0
  12. data/lib/action_mailer/quoting.rb +61 -0
  13. data/lib/action_mailer/test_case.rb +64 -0
  14. data/lib/action_mailer/test_helper.rb +68 -0
  15. data/lib/action_mailer/utils.rb +7 -0
  16. data/lib/action_mailer/vendor/text-format-0.6.3/text/format.rb +1466 -0
  17. data/lib/action_mailer/vendor/text_format.rb +10 -0
  18. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/address.rb +426 -0
  19. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/attachments.rb +46 -0
  20. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/base64.rb +46 -0
  21. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/compat.rb +41 -0
  22. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/config.rb +67 -0
  23. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/core_extensions.rb +63 -0
  24. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/encode.rb +581 -0
  25. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/header.rb +960 -0
  26. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/index.rb +9 -0
  27. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/interface.rb +1130 -0
  28. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/loader.rb +3 -0
  29. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/mail.rb +578 -0
  30. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/mailbox.rb +495 -0
  31. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/main.rb +6 -0
  32. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/mbox.rb +3 -0
  33. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/net.rb +248 -0
  34. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/obsolete.rb +132 -0
  35. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/parser.rb +1478 -0
  36. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/port.rb +379 -0
  37. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/quoting.rb +118 -0
  38. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/require_arch.rb +58 -0
  39. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/scanner.rb +49 -0
  40. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/scanner_r.rb +261 -0
  41. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/stringio.rb +280 -0
  42. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/utils.rb +337 -0
  43. data/lib/action_mailer/vendor/tmail-1.2.3/tmail/version.rb +39 -0
  44. data/lib/action_mailer/vendor/tmail-1.2.3/tmail.rb +5 -0
  45. data/lib/action_mailer/vendor/tmail.rb +17 -0
  46. data/lib/action_mailer/version.rb +9 -0
  47. data/lib/action_mailer.rb +62 -0
  48. data/lib/actionmailer.rb +2 -0
  49. data/test/abstract_unit.rb +62 -0
  50. data/test/asset_host_test.rb +54 -0
  51. data/test/delivery_method_test.rb +51 -0
  52. data/test/fixtures/asset_host_mailer/email_with_asset.html.erb +1 -0
  53. data/test/fixtures/auto_layout_mailer/hello.html.erb +1 -0
  54. data/test/fixtures/auto_layout_mailer/multipart.text.html.erb +1 -0
  55. data/test/fixtures/auto_layout_mailer/multipart.text.plain.erb +1 -0
  56. data/test/fixtures/explicit_layout_mailer/logout.html.erb +1 -0
  57. data/test/fixtures/explicit_layout_mailer/signup.html.erb +1 -0
  58. data/test/fixtures/first_mailer/share.erb +1 -0
  59. data/test/fixtures/helper_mailer/use_example_helper.erb +1 -0
  60. data/test/fixtures/helper_mailer/use_helper.erb +1 -0
  61. data/test/fixtures/helper_mailer/use_helper_method.erb +1 -0
  62. data/test/fixtures/helper_mailer/use_mail_helper.erb +5 -0
  63. data/test/fixtures/helpers/example_helper.rb +5 -0
  64. data/test/fixtures/layouts/auto_layout_mailer.html.erb +1 -0
  65. data/test/fixtures/layouts/auto_layout_mailer.text.erb +1 -0
  66. data/test/fixtures/layouts/spam.html.erb +1 -0
  67. data/test/fixtures/path.with.dots/funky_path_mailer/multipart_with_template_path_with_dots.erb +1 -0
  68. data/test/fixtures/raw_email +14 -0
  69. data/test/fixtures/raw_email10 +20 -0
  70. data/test/fixtures/raw_email12 +32 -0
  71. data/test/fixtures/raw_email13 +29 -0
  72. data/test/fixtures/raw_email2 +114 -0
  73. data/test/fixtures/raw_email3 +70 -0
  74. data/test/fixtures/raw_email4 +59 -0
  75. data/test/fixtures/raw_email5 +19 -0
  76. data/test/fixtures/raw_email6 +20 -0
  77. data/test/fixtures/raw_email7 +66 -0
  78. data/test/fixtures/raw_email8 +47 -0
  79. data/test/fixtures/raw_email9 +28 -0
  80. data/test/fixtures/raw_email_quoted_with_0d0a +14 -0
  81. data/test/fixtures/raw_email_with_invalid_characters_in_content_type +104 -0
  82. data/test/fixtures/raw_email_with_nested_attachment +100 -0
  83. data/test/fixtures/raw_email_with_partially_quoted_subject +14 -0
  84. data/test/fixtures/second_mailer/share.erb +1 -0
  85. data/test/fixtures/templates/signed_up.erb +3 -0
  86. data/test/fixtures/test_mailer/_subtemplate.text.plain.erb +1 -0
  87. data/test/fixtures/test_mailer/body_ivar.erb +2 -0
  88. data/test/fixtures/test_mailer/custom_templating_extension.text.html.haml +6 -0
  89. data/test/fixtures/test_mailer/custom_templating_extension.text.plain.haml +6 -0
  90. data/test/fixtures/test_mailer/implicitly_multipart_example.ignored.erb +1 -0
  91. data/test/fixtures/test_mailer/implicitly_multipart_example.rhtml.bak +1 -0
  92. data/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb +10 -0
  93. data/test/fixtures/test_mailer/implicitly_multipart_example.text.html.erb~ +10 -0
  94. data/test/fixtures/test_mailer/implicitly_multipart_example.text.plain.erb +2 -0
  95. data/test/fixtures/test_mailer/implicitly_multipart_example.text.yaml.erb +1 -0
  96. data/test/fixtures/test_mailer/included_subtemplate.text.plain.erb +1 -0
  97. data/test/fixtures/test_mailer/rxml_template.builder +2 -0
  98. data/test/fixtures/test_mailer/rxml_template.rxml +2 -0
  99. data/test/fixtures/test_mailer/signed_up.html.erb +3 -0
  100. data/test/fixtures/test_mailer/signed_up_with_url.erb +5 -0
  101. data/test/mail_helper_test.rb +95 -0
  102. data/test/mail_layout_test.rb +123 -0
  103. data/test/mail_render_test.rb +116 -0
  104. data/test/mail_service_test.rb +1081 -0
  105. data/test/quoting_test.rb +99 -0
  106. data/test/test_helper_test.rb +129 -0
  107. data/test/tmail_test.rb +22 -0
  108. data/test/url_test.rb +76 -0
  109. metadata +195 -0
@@ -0,0 +1,1081 @@
1
+ # encoding: utf-8
2
+ require 'abstract_unit'
3
+
4
+ class FunkyPathMailer < ActionMailer::Base
5
+ self.template_root = "#{File.dirname(__FILE__)}/fixtures/path.with.dots"
6
+
7
+ def multipart_with_template_path_with_dots(recipient)
8
+ recipients recipient
9
+ subject "Have a lovely picture"
10
+ from "Chad Fowler <chad@chadfowler.com>"
11
+ attachment :content_type => "image/jpeg",
12
+ :body => "not really a jpeg, we're only testing, after all"
13
+ end
14
+ end
15
+
16
+ class TestMailer < ActionMailer::Base
17
+ def signed_up(recipient)
18
+ @recipients = recipient
19
+ @subject = "[Signed up] Welcome #{recipient}"
20
+ @from = "system@loudthinking.com"
21
+ @body["recipient"] = recipient
22
+ end
23
+
24
+ def cancelled_account(recipient)
25
+ self.recipients = recipient
26
+ self.subject = "[Cancelled] Goodbye #{recipient}"
27
+ self.from = "system@loudthinking.com"
28
+ self.sent_on = Time.local(2004, 12, 12)
29
+ self.body = "Goodbye, Mr. #{recipient}"
30
+ end
31
+
32
+ def cc_bcc(recipient)
33
+ recipients recipient
34
+ subject "testing bcc/cc"
35
+ from "system@loudthinking.com"
36
+ sent_on Time.local(2004, 12, 12)
37
+ cc "nobody@loudthinking.com"
38
+ bcc "root@loudthinking.com"
39
+ body "Nothing to see here."
40
+ end
41
+
42
+ def different_reply_to(recipient)
43
+ recipients recipient
44
+ subject "testing reply_to"
45
+ from "system@loudthinking.com"
46
+ sent_on Time.local(2008, 5, 23)
47
+ reply_to "atraver@gmail.com"
48
+ body "Nothing to see here."
49
+ end
50
+
51
+ def iso_charset(recipient)
52
+ @recipients = recipient
53
+ @subject = "testing isø charsets"
54
+ @from = "system@loudthinking.com"
55
+ @sent_on = Time.local 2004, 12, 12
56
+ @cc = "nobody@loudthinking.com"
57
+ @bcc = "root@loudthinking.com"
58
+ @body = "Nothing to see here."
59
+ @charset = "iso-8859-1"
60
+ end
61
+
62
+ def unencoded_subject(recipient)
63
+ @recipients = recipient
64
+ @subject = "testing unencoded subject"
65
+ @from = "system@loudthinking.com"
66
+ @sent_on = Time.local 2004, 12, 12
67
+ @cc = "nobody@loudthinking.com"
68
+ @bcc = "root@loudthinking.com"
69
+ @body = "Nothing to see here."
70
+ end
71
+
72
+ def extended_headers(recipient)
73
+ @recipients = recipient
74
+ @subject = "testing extended headers"
75
+ @from = "Grytøyr <stian1@example.net>"
76
+ @sent_on = Time.local 2004, 12, 12
77
+ @cc = "Grytøyr <stian2@example.net>"
78
+ @bcc = "Grytøyr <stian3@example.net>"
79
+ @body = "Nothing to see here."
80
+ @charset = "iso-8859-1"
81
+ end
82
+
83
+ def utf8_body(recipient)
84
+ @recipients = recipient
85
+ @subject = "testing utf-8 body"
86
+ @from = "Foo áëô îü <extended@example.net>"
87
+ @sent_on = Time.local 2004, 12, 12
88
+ @cc = "Foo áëô îü <extended@example.net>"
89
+ @bcc = "Foo áëô îü <extended@example.net>"
90
+ @body = "åœö blah"
91
+ @charset = "utf-8"
92
+ end
93
+
94
+ def multipart_with_mime_version(recipient)
95
+ recipients recipient
96
+ subject "multipart with mime_version"
97
+ from "test@example.com"
98
+ sent_on Time.local(2004, 12, 12)
99
+ mime_version "1.1"
100
+ content_type "multipart/alternative"
101
+
102
+ part "text/plain" do |p|
103
+ p.body = "blah"
104
+ end
105
+
106
+ part "text/html" do |p|
107
+ p.body = "<b>blah</b>"
108
+ end
109
+ end
110
+
111
+ def multipart_with_utf8_subject(recipient)
112
+ recipients recipient
113
+ subject "Foo áëô îü"
114
+ from "test@example.com"
115
+ charset "utf-8"
116
+
117
+ part "text/plain" do |p|
118
+ p.body = "blah"
119
+ end
120
+
121
+ part "text/html" do |p|
122
+ p.body = "<b>blah</b>"
123
+ end
124
+ end
125
+
126
+ def explicitly_multipart_example(recipient, ct=nil)
127
+ recipients recipient
128
+ subject "multipart example"
129
+ from "test@example.com"
130
+ sent_on Time.local(2004, 12, 12)
131
+ body "plain text default"
132
+ content_type ct if ct
133
+
134
+ part "text/html" do |p|
135
+ p.charset = "iso-8859-1"
136
+ p.body = "blah"
137
+ end
138
+
139
+ attachment :content_type => "image/jpeg", :filename => "foo.jpg",
140
+ :body => "123456789"
141
+ end
142
+
143
+ def implicitly_multipart_example(recipient, cs = nil, order = nil)
144
+ @recipients = recipient
145
+ @subject = "multipart example"
146
+ @from = "test@example.com"
147
+ @sent_on = Time.local 2004, 12, 12
148
+ @body = { "recipient" => recipient }
149
+ @charset = cs if cs
150
+ @implicit_parts_order = order if order
151
+ end
152
+
153
+ def implicitly_multipart_with_utf8
154
+ recipients "no.one@nowhere.test"
155
+ subject "Foo áëô îü"
156
+ from "some.one@somewhere.test"
157
+ template "implicitly_multipart_example"
158
+ body ({ "recipient" => "no.one@nowhere.test" })
159
+ end
160
+
161
+ def html_mail(recipient)
162
+ recipients recipient
163
+ subject "html mail"
164
+ from "test@example.com"
165
+ body "<em>Emphasize</em> <strong>this</strong>"
166
+ content_type "text/html"
167
+ end
168
+
169
+ def html_mail_with_underscores(recipient)
170
+ subject "html mail with underscores"
171
+ body %{<a href="http://google.com" target="_blank">_Google</a>}
172
+ end
173
+
174
+ def custom_template(recipient)
175
+ recipients recipient
176
+ subject "[Signed up] Welcome #{recipient}"
177
+ from "system@loudthinking.com"
178
+ sent_on Time.local(2004, 12, 12)
179
+ template "signed_up"
180
+
181
+ body["recipient"] = recipient
182
+ end
183
+
184
+ def custom_templating_extension(recipient)
185
+ recipients recipient
186
+ subject "[Signed up] Welcome #{recipient}"
187
+ from "system@loudthinking.com"
188
+ sent_on Time.local(2004, 12, 12)
189
+
190
+ body["recipient"] = recipient
191
+ end
192
+
193
+ def various_newlines(recipient)
194
+ recipients recipient
195
+ subject "various newlines"
196
+ from "test@example.com"
197
+ body "line #1\nline #2\rline #3\r\nline #4\r\r" +
198
+ "line #5\n\nline#6\r\n\r\nline #7"
199
+ end
200
+
201
+ def various_newlines_multipart(recipient)
202
+ recipients recipient
203
+ subject "various newlines multipart"
204
+ from "test@example.com"
205
+ content_type "multipart/alternative"
206
+ part :content_type => "text/plain", :body => "line #1\nline #2\rline #3\r\nline #4\r\r"
207
+ part :content_type => "text/html", :body => "<p>line #1</p>\n<p>line #2</p>\r<p>line #3</p>\r\n<p>line #4</p>\r\r"
208
+ end
209
+
210
+ def nested_multipart(recipient)
211
+ recipients recipient
212
+ subject "nested multipart"
213
+ from "test@example.com"
214
+ content_type "multipart/mixed"
215
+ part :content_type => "multipart/alternative", :content_disposition => "inline", :headers => { "foo" => "bar" } do |p|
216
+ p.part :content_type => "text/plain", :body => "test text\nline #2"
217
+ p.part :content_type => "text/html", :body => "<b>test</b> HTML<br/>\nline #2"
218
+ end
219
+ attachment :content_type => "application/octet-stream",:filename => "test.txt", :body => "test abcdefghijklmnopqstuvwxyz"
220
+ end
221
+
222
+ def nested_multipart_with_body(recipient)
223
+ recipients recipient
224
+ subject "nested multipart with body"
225
+ from "test@example.com"
226
+ content_type "multipart/mixed"
227
+ part :content_type => "multipart/alternative", :content_disposition => "inline", :body => "Nothing to see here." do |p|
228
+ p.part :content_type => "text/html", :body => "<b>test</b> HTML<br/>"
229
+ end
230
+ end
231
+
232
+ def attachment_with_custom_header(recipient)
233
+ recipients recipient
234
+ subject "custom header in attachment"
235
+ from "test@example.com"
236
+ content_type "multipart/related"
237
+ part :content_type => "text/html", :body => 'yo'
238
+ attachment :content_type => "image/jpeg",:filename => "test.jpeg", :body => "i am not a real picture", :headers => { 'Content-ID' => '<test@test.com>' }
239
+ end
240
+
241
+ def unnamed_attachment(recipient)
242
+ recipients recipient
243
+ subject "nested multipart"
244
+ from "test@example.com"
245
+ content_type "multipart/mixed"
246
+ part :content_type => "text/plain", :body => "hullo"
247
+ attachment :content_type => "application/octet-stream", :body => "test abcdefghijklmnopqstuvwxyz"
248
+ end
249
+
250
+ def headers_with_nonalpha_chars(recipient)
251
+ recipients recipient
252
+ subject "nonalpha chars"
253
+ from "One: Two <test@example.com>"
254
+ cc "Three: Four <test@example.com>"
255
+ bcc "Five: Six <test@example.com>"
256
+ body "testing"
257
+ end
258
+
259
+ def custom_content_type_attributes
260
+ recipients "no.one@nowhere.test"
261
+ subject "custom content types"
262
+ from "some.one@somewhere.test"
263
+ content_type "text/plain; format=flowed"
264
+ body "testing"
265
+ end
266
+
267
+ def return_path
268
+ recipients "no.one@nowhere.test"
269
+ subject "return path test"
270
+ from "some.one@somewhere.test"
271
+ body "testing"
272
+ headers "return-path" => "another@somewhere.test"
273
+ end
274
+
275
+ def body_ivar(recipient)
276
+ recipients recipient
277
+ subject "Body as a local variable"
278
+ from "test@example.com"
279
+ body :body => "foo", :bar => "baz"
280
+ end
281
+
282
+ class <<self
283
+ attr_accessor :received_body
284
+ end
285
+
286
+ def receive(mail)
287
+ self.class.received_body = mail.body
288
+ end
289
+ end
290
+
291
+ class ActionMailerTest < Test::Unit::TestCase
292
+ include ActionMailer::Quoting
293
+
294
+ def encode( text, charset="utf-8" )
295
+ quoted_printable( text, charset )
296
+ end
297
+
298
+ def new_mail( charset="utf-8" )
299
+ mail = TMail::Mail.new
300
+ mail.mime_version = "1.0"
301
+ if charset
302
+ mail.set_content_type "text", "plain", { "charset" => charset }
303
+ end
304
+ mail
305
+ end
306
+
307
+ # Replacing logger work around for mocha bug. Should be fixed in mocha 0.3.3
308
+ def setup
309
+ set_delivery_method :test
310
+ ActionMailer::Base.perform_deliveries = true
311
+ ActionMailer::Base.raise_delivery_errors = true
312
+ ActionMailer::Base.deliveries = []
313
+
314
+ @original_logger = TestMailer.logger
315
+ @recipient = 'test@localhost'
316
+ end
317
+
318
+ def teardown
319
+ TestMailer.logger = @original_logger
320
+ restore_delivery_method
321
+ end
322
+
323
+ def test_nested_parts
324
+ created = nil
325
+ assert_nothing_raised { created = TestMailer.create_nested_multipart(@recipient)}
326
+ assert_equal 2,created.parts.size
327
+ assert_equal 2,created.parts.first.parts.size
328
+
329
+ assert_equal "multipart/mixed", created.content_type
330
+ assert_equal "multipart/alternative", created.parts.first.content_type
331
+ assert_equal "bar", created.parts.first.header['foo'].to_s
332
+ assert_nil created.parts.first.charset
333
+ assert_equal "text/plain", created.parts.first.parts.first.content_type
334
+ assert_equal "text/html", created.parts.first.parts[1].content_type
335
+ assert_equal "application/octet-stream", created.parts[1].content_type
336
+ end
337
+
338
+ def test_nested_parts_with_body
339
+ created = nil
340
+ assert_nothing_raised { created = TestMailer.create_nested_multipart_with_body(@recipient)}
341
+ assert_equal 1,created.parts.size
342
+ assert_equal 2,created.parts.first.parts.size
343
+
344
+ assert_equal "multipart/mixed", created.content_type
345
+ assert_equal "multipart/alternative", created.parts.first.content_type
346
+ assert_equal "Nothing to see here.", created.parts.first.parts.first.body
347
+ assert_equal "text/plain", created.parts.first.parts.first.content_type
348
+ assert_equal "text/html", created.parts.first.parts[1].content_type
349
+ end
350
+
351
+ def test_attachment_with_custom_header
352
+ created = nil
353
+ assert_nothing_raised { created = TestMailer.create_attachment_with_custom_header(@recipient)}
354
+ assert_equal "<test@test.com>", created.parts[1].header['content-id'].to_s
355
+ end
356
+
357
+ def test_signed_up
358
+ Time.stubs(:now => Time.now)
359
+
360
+ expected = new_mail
361
+ expected.to = @recipient
362
+ expected.subject = "[Signed up] Welcome #{@recipient}"
363
+ expected.body = "Hello there, \n\nMr. #{@recipient}"
364
+ expected.from = "system@loudthinking.com"
365
+ expected.date = Time.now
366
+
367
+ created = nil
368
+ assert_nothing_raised { created = TestMailer.create_signed_up(@recipient) }
369
+ assert_not_nil created
370
+ assert_equal expected.encoded, created.encoded
371
+
372
+ assert_nothing_raised { TestMailer.deliver_signed_up(@recipient) }
373
+ assert_not_nil ActionMailer::Base.deliveries.first
374
+ assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
375
+ end
376
+
377
+ def test_custom_template
378
+ expected = new_mail
379
+ expected.to = @recipient
380
+ expected.subject = "[Signed up] Welcome #{@recipient}"
381
+ expected.body = "Hello there, \n\nMr. #{@recipient}"
382
+ expected.from = "system@loudthinking.com"
383
+ expected.date = Time.local(2004, 12, 12)
384
+
385
+ created = nil
386
+ assert_nothing_raised { created = TestMailer.create_custom_template(@recipient) }
387
+ assert_not_nil created
388
+ assert_equal expected.encoded, created.encoded
389
+ end
390
+
391
+ def test_custom_templating_extension
392
+ assert ActionView::Template.template_handler_extensions.include?("haml"), "haml extension was not registered"
393
+
394
+ # N.b., custom_templating_extension.text.plain.haml is expected to be in fixtures/test_mailer directory
395
+ expected = new_mail
396
+ expected.to = @recipient
397
+ expected.subject = "[Signed up] Welcome #{@recipient}"
398
+ expected.body = "Hello there, \n\nMr. #{@recipient}"
399
+ expected.from = "system@loudthinking.com"
400
+ expected.date = Time.local(2004, 12, 12)
401
+
402
+ # Stub the render method so no alternative renderers need be present.
403
+ ActionView::Base.any_instance.stubs(:render).returns("Hello there, \n\nMr. #{@recipient}")
404
+
405
+ # Now that the template is registered, there should be one part. The text/plain part.
406
+ created = nil
407
+ assert_nothing_raised { created = TestMailer.create_custom_templating_extension(@recipient) }
408
+ assert_not_nil created
409
+ assert_equal 2, created.parts.length
410
+ assert_equal 'text/plain', created.parts[0].content_type
411
+ assert_equal 'text/html', created.parts[1].content_type
412
+ end
413
+
414
+ def test_cancelled_account
415
+ expected = new_mail
416
+ expected.to = @recipient
417
+ expected.subject = "[Cancelled] Goodbye #{@recipient}"
418
+ expected.body = "Goodbye, Mr. #{@recipient}"
419
+ expected.from = "system@loudthinking.com"
420
+ expected.date = Time.local(2004, 12, 12)
421
+
422
+ created = nil
423
+ assert_nothing_raised { created = TestMailer.create_cancelled_account(@recipient) }
424
+ assert_not_nil created
425
+ assert_equal expected.encoded, created.encoded
426
+
427
+ assert_nothing_raised { TestMailer.deliver_cancelled_account(@recipient) }
428
+ assert_not_nil ActionMailer::Base.deliveries.first
429
+ assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
430
+ end
431
+
432
+ def test_cc_bcc
433
+ expected = new_mail
434
+ expected.to = @recipient
435
+ expected.subject = "testing bcc/cc"
436
+ expected.body = "Nothing to see here."
437
+ expected.from = "system@loudthinking.com"
438
+ expected.cc = "nobody@loudthinking.com"
439
+ expected.bcc = "root@loudthinking.com"
440
+ expected.date = Time.local 2004, 12, 12
441
+
442
+ created = nil
443
+ assert_nothing_raised do
444
+ created = TestMailer.create_cc_bcc @recipient
445
+ end
446
+ assert_not_nil created
447
+ assert_equal expected.encoded, created.encoded
448
+
449
+ assert_nothing_raised do
450
+ TestMailer.deliver_cc_bcc @recipient
451
+ end
452
+
453
+ assert_not_nil ActionMailer::Base.deliveries.first
454
+ assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
455
+ end
456
+
457
+ def test_reply_to
458
+ expected = new_mail
459
+
460
+ expected.to = @recipient
461
+ expected.subject = "testing reply_to"
462
+ expected.body = "Nothing to see here."
463
+ expected.from = "system@loudthinking.com"
464
+ expected.reply_to = "atraver@gmail.com"
465
+ expected.date = Time.local 2008, 5, 23
466
+
467
+ created = nil
468
+ assert_nothing_raised do
469
+ created = TestMailer.create_different_reply_to @recipient
470
+ end
471
+ assert_not_nil created
472
+ assert_equal expected.encoded, created.encoded
473
+
474
+ assert_nothing_raised do
475
+ TestMailer.deliver_different_reply_to @recipient
476
+ end
477
+
478
+ assert_not_nil ActionMailer::Base.deliveries.first
479
+ assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
480
+ end
481
+
482
+ def test_iso_charset
483
+ expected = new_mail( "iso-8859-1" )
484
+ expected.to = @recipient
485
+ expected.subject = encode "testing isø charsets", "iso-8859-1"
486
+ expected.body = "Nothing to see here."
487
+ expected.from = "system@loudthinking.com"
488
+ expected.cc = "nobody@loudthinking.com"
489
+ expected.bcc = "root@loudthinking.com"
490
+ expected.date = Time.local 2004, 12, 12
491
+
492
+ created = nil
493
+ assert_nothing_raised do
494
+ created = TestMailer.create_iso_charset @recipient
495
+ end
496
+ assert_not_nil created
497
+ assert_equal expected.encoded, created.encoded
498
+
499
+ assert_nothing_raised do
500
+ TestMailer.deliver_iso_charset @recipient
501
+ end
502
+
503
+ assert_not_nil ActionMailer::Base.deliveries.first
504
+ assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
505
+ end
506
+
507
+ def test_unencoded_subject
508
+ expected = new_mail
509
+ expected.to = @recipient
510
+ expected.subject = "testing unencoded subject"
511
+ expected.body = "Nothing to see here."
512
+ expected.from = "system@loudthinking.com"
513
+ expected.cc = "nobody@loudthinking.com"
514
+ expected.bcc = "root@loudthinking.com"
515
+ expected.date = Time.local 2004, 12, 12
516
+
517
+ created = nil
518
+ assert_nothing_raised do
519
+ created = TestMailer.create_unencoded_subject @recipient
520
+ end
521
+ assert_not_nil created
522
+ assert_equal expected.encoded, created.encoded
523
+
524
+ assert_nothing_raised do
525
+ TestMailer.deliver_unencoded_subject @recipient
526
+ end
527
+
528
+ assert_not_nil ActionMailer::Base.deliveries.first
529
+ assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
530
+ end
531
+
532
+ def test_instances_are_nil
533
+ assert_nil ActionMailer::Base.new
534
+ assert_nil TestMailer.new
535
+ end
536
+
537
+ def test_deliveries_array
538
+ assert_not_nil ActionMailer::Base.deliveries
539
+ assert_equal 0, ActionMailer::Base.deliveries.size
540
+ TestMailer.deliver_signed_up(@recipient)
541
+ assert_equal 1, ActionMailer::Base.deliveries.size
542
+ assert_not_nil ActionMailer::Base.deliveries.first
543
+ end
544
+
545
+ def test_perform_deliveries_flag
546
+ ActionMailer::Base.perform_deliveries = false
547
+ TestMailer.deliver_signed_up(@recipient)
548
+ assert_equal 0, ActionMailer::Base.deliveries.size
549
+ ActionMailer::Base.perform_deliveries = true
550
+ TestMailer.deliver_signed_up(@recipient)
551
+ assert_equal 1, ActionMailer::Base.deliveries.size
552
+ end
553
+
554
+ def test_doesnt_raise_errors_when_raise_delivery_errors_is_false
555
+ ActionMailer::Base.raise_delivery_errors = false
556
+ TestMailer.any_instance.expects(:perform_delivery_test).raises(Exception)
557
+ assert_nothing_raised { TestMailer.deliver_signed_up(@recipient) }
558
+ end
559
+
560
+ def test_performs_delivery_via_sendmail
561
+ sm = mock()
562
+ sm.expects(:print).with(anything)
563
+ sm.expects(:flush)
564
+ IO.expects(:popen).once.with('/usr/sbin/sendmail -i -t', 'w+').yields(sm)
565
+ ActionMailer::Base.delivery_method = :sendmail
566
+ TestMailer.deliver_signed_up(@recipient)
567
+ end
568
+
569
+ def test_delivery_logs_sent_mail
570
+ mail = TestMailer.create_signed_up(@recipient)
571
+ logger = mock()
572
+ logger.expects(:info).with("Sent mail to #{@recipient}")
573
+ logger.expects(:debug).with() do |logged_text|
574
+ logged_text =~ /\[Signed up\] Welcome/
575
+ end
576
+ TestMailer.logger = logger
577
+ TestMailer.deliver_signed_up(@recipient)
578
+ end
579
+
580
+ def test_unquote_quoted_printable_subject
581
+ msg = <<EOF
582
+ From: me@example.com
583
+ Subject: =?utf-8?Q?testing_testing_=D6=A4?=
584
+ Content-Type: text/plain; charset=iso-8859-1
585
+
586
+ The body
587
+ EOF
588
+ mail = TMail::Mail.parse(msg)
589
+ assert_equal "testing testing \326\244", mail.subject
590
+ assert_equal "=?utf-8?Q?testing_testing_=D6=A4?=", mail.quoted_subject
591
+ end
592
+
593
+ def test_unquote_7bit_subject
594
+ msg = <<EOF
595
+ From: me@example.com
596
+ Subject: this == working?
597
+ Content-Type: text/plain; charset=iso-8859-1
598
+
599
+ The body
600
+ EOF
601
+ mail = TMail::Mail.parse(msg)
602
+ assert_equal "this == working?", mail.subject
603
+ assert_equal "this == working?", mail.quoted_subject
604
+ end
605
+
606
+ def test_unquote_7bit_body
607
+ msg = <<EOF
608
+ From: me@example.com
609
+ Subject: subject
610
+ Content-Type: text/plain; charset=iso-8859-1
611
+ Content-Transfer-Encoding: 7bit
612
+
613
+ The=3Dbody
614
+ EOF
615
+ mail = TMail::Mail.parse(msg)
616
+ assert_equal "The=3Dbody", mail.body.strip
617
+ assert_equal "The=3Dbody", mail.quoted_body.strip
618
+ end
619
+
620
+ def test_unquote_quoted_printable_body
621
+ msg = <<EOF
622
+ From: me@example.com
623
+ Subject: subject
624
+ Content-Type: text/plain; charset=iso-8859-1
625
+ Content-Transfer-Encoding: quoted-printable
626
+
627
+ The=3Dbody
628
+ EOF
629
+ mail = TMail::Mail.parse(msg)
630
+ assert_equal "The=body", mail.body.strip
631
+ assert_equal "The=3Dbody", mail.quoted_body.strip
632
+ end
633
+
634
+ def test_unquote_base64_body
635
+ msg = <<EOF
636
+ From: me@example.com
637
+ Subject: subject
638
+ Content-Type: text/plain; charset=iso-8859-1
639
+ Content-Transfer-Encoding: base64
640
+
641
+ VGhlIGJvZHk=
642
+ EOF
643
+ mail = TMail::Mail.parse(msg)
644
+ assert_equal "The body", mail.body.strip
645
+ assert_equal "VGhlIGJvZHk=", mail.quoted_body.strip
646
+ end
647
+
648
+ def test_extended_headers
649
+ @recipient = "Grytøyr <test@localhost>"
650
+
651
+ expected = new_mail "iso-8859-1"
652
+ expected.to = quote_address_if_necessary @recipient, "iso-8859-1"
653
+ expected.subject = "testing extended headers"
654
+ expected.body = "Nothing to see here."
655
+ expected.from = quote_address_if_necessary "Grytøyr <stian1@example.net>", "iso-8859-1"
656
+ expected.cc = quote_address_if_necessary "Grytøyr <stian2@example.net>", "iso-8859-1"
657
+ expected.bcc = quote_address_if_necessary "Grytøyr <stian3@example.net>", "iso-8859-1"
658
+ expected.date = Time.local 2004, 12, 12
659
+
660
+ created = nil
661
+ assert_nothing_raised do
662
+ created = TestMailer.create_extended_headers @recipient
663
+ end
664
+
665
+ assert_not_nil created
666
+ assert_equal expected.encoded, created.encoded
667
+
668
+ assert_nothing_raised do
669
+ TestMailer.deliver_extended_headers @recipient
670
+ end
671
+
672
+ assert_not_nil ActionMailer::Base.deliveries.first
673
+ assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
674
+ end
675
+
676
+ def test_utf8_body_is_not_quoted
677
+ @recipient = "Foo áëô îü <extended@example.net>"
678
+ expected = new_mail "utf-8"
679
+ expected.to = quote_address_if_necessary @recipient, "utf-8"
680
+ expected.subject = "testing utf-8 body"
681
+ expected.body = "åœö blah"
682
+ expected.from = quote_address_if_necessary @recipient, "utf-8"
683
+ expected.cc = quote_address_if_necessary @recipient, "utf-8"
684
+ expected.bcc = quote_address_if_necessary @recipient, "utf-8"
685
+ expected.date = Time.local 2004, 12, 12
686
+
687
+ created = TestMailer.create_utf8_body @recipient
688
+ assert_match(/åœö blah/, created.encoded)
689
+ end
690
+
691
+ def test_multiple_utf8_recipients
692
+ @recipient = ["\"Foo áëô îü\" <extended@example.net>", "\"Example Recipient\" <me@example.com>"]
693
+ expected = new_mail "utf-8"
694
+ expected.to = quote_address_if_necessary @recipient, "utf-8"
695
+ expected.subject = "testing utf-8 body"
696
+ expected.body = "åœö blah"
697
+ expected.from = quote_address_if_necessary @recipient.first, "utf-8"
698
+ expected.cc = quote_address_if_necessary @recipient, "utf-8"
699
+ expected.bcc = quote_address_if_necessary @recipient, "utf-8"
700
+ expected.date = Time.local 2004, 12, 12
701
+
702
+ created = TestMailer.create_utf8_body @recipient
703
+ assert_match(/\nFrom: =\?utf-8\?Q\?Foo_.*?\?= <extended@example.net>\r/, created.encoded)
704
+ assert_match(/\nTo: =\?utf-8\?Q\?Foo_.*?\?= <extended@example.net>, Example Recipient <me/, created.encoded)
705
+ end
706
+
707
+ def test_receive_decodes_base64_encoded_mail
708
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email")
709
+ TestMailer.receive(fixture)
710
+ assert_match(/Jamis/, TestMailer.received_body)
711
+ end
712
+
713
+ def test_receive_attachments
714
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email2")
715
+ mail = TMail::Mail.parse(fixture)
716
+ attachment = mail.attachments.last
717
+ assert_equal "smime.p7s", attachment.original_filename
718
+ assert_equal "application/pkcs7-signature", attachment.content_type
719
+ end
720
+
721
+ def test_decode_attachment_without_charset
722
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email3")
723
+ mail = TMail::Mail.parse(fixture)
724
+ attachment = mail.attachments.last
725
+ assert_equal 1026, attachment.read.length
726
+ end
727
+
728
+ def test_attachment_using_content_location
729
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email12")
730
+ mail = TMail::Mail.parse(fixture)
731
+ assert_equal 1, mail.attachments.length
732
+ assert_equal "Photo25.jpg", mail.attachments.first.original_filename
733
+ end
734
+
735
+ def test_attachment_with_text_type
736
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email13")
737
+ mail = TMail::Mail.parse(fixture)
738
+ assert mail.has_attachments?
739
+ assert_equal 1, mail.attachments.length
740
+ assert_equal "hello.rb", mail.attachments.first.original_filename
741
+ end
742
+
743
+ def test_decode_part_without_content_type
744
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email4")
745
+ mail = TMail::Mail.parse(fixture)
746
+ assert_nothing_raised { mail.body }
747
+ end
748
+
749
+ def test_decode_message_without_content_type
750
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email5")
751
+ mail = TMail::Mail.parse(fixture)
752
+ assert_nothing_raised { mail.body }
753
+ end
754
+
755
+ def test_decode_message_with_incorrect_charset
756
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email6")
757
+ mail = TMail::Mail.parse(fixture)
758
+ assert_nothing_raised { mail.body }
759
+ end
760
+
761
+ def test_multipart_with_mime_version
762
+ mail = TestMailer.create_multipart_with_mime_version(@recipient)
763
+ assert_equal "1.1", mail.mime_version
764
+ end
765
+
766
+ def test_multipart_with_utf8_subject
767
+ mail = TestMailer.create_multipart_with_utf8_subject(@recipient)
768
+ assert_match(/\nSubject: =\?utf-8\?Q\?Foo_.*?\?=/, mail.encoded)
769
+ end
770
+
771
+ def test_implicitly_multipart_with_utf8
772
+ mail = TestMailer.create_implicitly_multipart_with_utf8
773
+ assert_match(/\nSubject: =\?utf-8\?Q\?Foo_.*?\?=/, mail.encoded)
774
+ end
775
+
776
+ def test_explicitly_multipart_messages
777
+ mail = TestMailer.create_explicitly_multipart_example(@recipient)
778
+ assert_equal 3, mail.parts.length
779
+ assert_nil mail.content_type
780
+ assert_equal "text/plain", mail.parts[0].content_type
781
+
782
+ assert_equal "text/html", mail.parts[1].content_type
783
+ assert_equal "iso-8859-1", mail.parts[1].sub_header("content-type", "charset")
784
+ assert_equal "inline", mail.parts[1].content_disposition
785
+
786
+ assert_equal "image/jpeg", mail.parts[2].content_type
787
+ assert_equal "attachment", mail.parts[2].content_disposition
788
+ assert_equal "foo.jpg", mail.parts[2].sub_header("content-disposition", "filename")
789
+ assert_equal "foo.jpg", mail.parts[2].sub_header("content-type", "name")
790
+ assert_nil mail.parts[2].sub_header("content-type", "charset")
791
+ end
792
+
793
+ def test_explicitly_multipart_with_content_type
794
+ mail = TestMailer.create_explicitly_multipart_example(@recipient, "multipart/alternative")
795
+ assert_equal 3, mail.parts.length
796
+ assert_equal "multipart/alternative", mail.content_type
797
+ end
798
+
799
+ def test_explicitly_multipart_with_invalid_content_type
800
+ mail = TestMailer.create_explicitly_multipart_example(@recipient, "text/xml")
801
+ assert_equal 3, mail.parts.length
802
+ assert_nil mail.content_type
803
+ end
804
+
805
+ def test_implicitly_multipart_messages
806
+ assert ActionView::Template.template_handler_extensions.include?("bak"), "bak extension was not registered"
807
+
808
+ mail = TestMailer.create_implicitly_multipart_example(@recipient)
809
+ assert_equal 3, mail.parts.length
810
+ assert_equal "1.0", mail.mime_version
811
+ assert_equal "multipart/alternative", mail.content_type
812
+ assert_equal "text/yaml", mail.parts[0].content_type
813
+ assert_equal "utf-8", mail.parts[0].sub_header("content-type", "charset")
814
+ assert_equal "text/plain", mail.parts[1].content_type
815
+ assert_equal "utf-8", mail.parts[1].sub_header("content-type", "charset")
816
+ assert_equal "text/html", mail.parts[2].content_type
817
+ assert_equal "utf-8", mail.parts[2].sub_header("content-type", "charset")
818
+ end
819
+
820
+ def test_implicitly_multipart_messages_with_custom_order
821
+ assert ActionView::Template.template_handler_extensions.include?("bak"), "bak extension was not registered"
822
+
823
+ mail = TestMailer.create_implicitly_multipart_example(@recipient, nil, ["text/yaml", "text/plain"])
824
+ assert_equal 3, mail.parts.length
825
+ assert_equal "text/html", mail.parts[0].content_type
826
+ assert_equal "text/plain", mail.parts[1].content_type
827
+ assert_equal "text/yaml", mail.parts[2].content_type
828
+ end
829
+
830
+ def test_implicitly_multipart_messages_with_charset
831
+ mail = TestMailer.create_implicitly_multipart_example(@recipient, 'iso-8859-1')
832
+
833
+ assert_equal "multipart/alternative", mail.header['content-type'].body
834
+
835
+ assert_equal 'iso-8859-1', mail.parts[0].sub_header("content-type", "charset")
836
+ assert_equal 'iso-8859-1', mail.parts[1].sub_header("content-type", "charset")
837
+ assert_equal 'iso-8859-1', mail.parts[2].sub_header("content-type", "charset")
838
+ end
839
+
840
+ def test_html_mail
841
+ mail = TestMailer.create_html_mail(@recipient)
842
+ assert_equal "text/html", mail.content_type
843
+ end
844
+
845
+ def test_html_mail_with_underscores
846
+ mail = TestMailer.create_html_mail_with_underscores(@recipient)
847
+ assert_equal %{<a href="http://google.com" target="_blank">_Google</a>}, mail.body
848
+ end
849
+
850
+ def test_various_newlines
851
+ mail = TestMailer.create_various_newlines(@recipient)
852
+ assert_equal("line #1\nline #2\nline #3\nline #4\n\n" +
853
+ "line #5\n\nline#6\n\nline #7", mail.body)
854
+ end
855
+
856
+ def test_various_newlines_multipart
857
+ mail = TestMailer.create_various_newlines_multipart(@recipient)
858
+ assert_equal "line #1\nline #2\nline #3\nline #4\n\n", mail.parts[0].body
859
+ assert_equal "<p>line #1</p>\n<p>line #2</p>\n<p>line #3</p>\n<p>line #4</p>\n\n", mail.parts[1].body
860
+ end
861
+
862
+ def test_headers_removed_on_smtp_delivery
863
+ ActionMailer::Base.delivery_method = :smtp
864
+ TestMailer.deliver_cc_bcc(@recipient)
865
+ assert MockSMTP.deliveries[0][2].include?("root@loudthinking.com")
866
+ assert MockSMTP.deliveries[0][2].include?("nobody@loudthinking.com")
867
+ assert MockSMTP.deliveries[0][2].include?(@recipient)
868
+ assert_match %r{^Cc: nobody@loudthinking.com}, MockSMTP.deliveries[0][0]
869
+ assert_match %r{^To: #{@recipient}}, MockSMTP.deliveries[0][0]
870
+ assert_no_match %r{^Bcc: root@loudthinking.com}, MockSMTP.deliveries[0][0]
871
+ end
872
+
873
+ def test_recursive_multipart_processing
874
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email7")
875
+ mail = TMail::Mail.parse(fixture)
876
+ assert_equal "This is the first part.\n\nAttachment: test.rb\nAttachment: test.pdf\n\n\nAttachment: smime.p7s\n", mail.body
877
+ end
878
+
879
+ def test_decode_encoded_attachment_filename
880
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email8")
881
+ mail = TMail::Mail.parse(fixture)
882
+ attachment = mail.attachments.last
883
+
884
+ expected = "01 Quien Te Dij\212at. Pitbull.mp3"
885
+ expected.force_encoding(Encoding::ASCII_8BIT) if expected.respond_to?(:force_encoding)
886
+
887
+ assert_equal expected, attachment.original_filename
888
+ end
889
+
890
+ def test_wrong_mail_header
891
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email9")
892
+ assert_raise(TMail::SyntaxError) { TMail::Mail.parse(fixture) }
893
+ end
894
+
895
+ def test_decode_message_with_unknown_charset
896
+ fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email10")
897
+ mail = TMail::Mail.parse(fixture)
898
+ assert_nothing_raised { mail.body }
899
+ end
900
+
901
+ def test_empty_header_values_omitted
902
+ result = TestMailer.create_unnamed_attachment(@recipient).encoded
903
+ assert_match %r{Content-Type: application/octet-stream[^;]}, result
904
+ assert_match %r{Content-Disposition: attachment[^;]}, result
905
+ end
906
+
907
+ def test_headers_with_nonalpha_chars
908
+ mail = TestMailer.create_headers_with_nonalpha_chars(@recipient)
909
+ assert !mail.from_addrs.empty?
910
+ assert !mail.cc_addrs.empty?
911
+ assert !mail.bcc_addrs.empty?
912
+ assert_match(/:/, mail.from_addrs.to_s)
913
+ assert_match(/:/, mail.cc_addrs.to_s)
914
+ assert_match(/:/, mail.bcc_addrs.to_s)
915
+ end
916
+
917
+ def test_deliver_with_mail_object
918
+ mail = TestMailer.create_headers_with_nonalpha_chars(@recipient)
919
+ assert_nothing_raised { TestMailer.deliver(mail) }
920
+ assert_equal 1, TestMailer.deliveries.length
921
+ end
922
+
923
+ def test_multipart_with_template_path_with_dots
924
+ mail = FunkyPathMailer.create_multipart_with_template_path_with_dots(@recipient)
925
+ assert_equal 2, mail.parts.length
926
+ assert_equal 'text/plain', mail.parts[0].content_type
927
+ assert_equal 'utf-8', mail.parts[0].charset
928
+ end
929
+
930
+ def test_custom_content_type_attributes
931
+ mail = TestMailer.create_custom_content_type_attributes
932
+ assert_match %r{format=flowed}, mail['content-type'].to_s
933
+ assert_match %r{charset=utf-8}, mail['content-type'].to_s
934
+ end
935
+
936
+ def test_return_path_with_create
937
+ mail = TestMailer.create_return_path
938
+ assert_equal "<another@somewhere.test>", mail['return-path'].to_s
939
+ end
940
+
941
+ def test_return_path_with_deliver
942
+ ActionMailer::Base.delivery_method = :smtp
943
+ TestMailer.deliver_return_path
944
+ assert_match %r{^Return-Path: <another@somewhere.test>}, MockSMTP.deliveries[0][0]
945
+ assert_equal "another@somewhere.test", MockSMTP.deliveries[0][1].to_s
946
+ end
947
+
948
+ def test_body_is_stored_as_an_ivar
949
+ mail = TestMailer.create_body_ivar(@recipient)
950
+ assert_equal "body: foo\nbar: baz", mail.body
951
+ end
952
+
953
+ def test_starttls_is_enabled_if_supported
954
+ ActionMailer::Base.smtp_settings[:enable_starttls_auto] = true
955
+ MockSMTP.any_instance.expects(:respond_to?).with(:enable_starttls_auto).returns(true)
956
+ MockSMTP.any_instance.expects(:enable_starttls_auto)
957
+ ActionMailer::Base.delivery_method = :smtp
958
+ TestMailer.deliver_signed_up(@recipient)
959
+ end
960
+
961
+ def test_starttls_is_disabled_if_not_supported
962
+ ActionMailer::Base.smtp_settings[:enable_starttls_auto] = true
963
+ MockSMTP.any_instance.expects(:respond_to?).with(:enable_starttls_auto).returns(false)
964
+ MockSMTP.any_instance.expects(:enable_starttls_auto).never
965
+ ActionMailer::Base.delivery_method = :smtp
966
+ TestMailer.deliver_signed_up(@recipient)
967
+ end
968
+
969
+ def test_starttls_is_not_enabled
970
+ ActionMailer::Base.smtp_settings[:enable_starttls_auto] = false
971
+ MockSMTP.any_instance.expects(:respond_to?).never
972
+ MockSMTP.any_instance.expects(:enable_starttls_auto).never
973
+ ActionMailer::Base.delivery_method = :smtp
974
+ TestMailer.deliver_signed_up(@recipient)
975
+ ensure
976
+ ActionMailer::Base.smtp_settings[:enable_starttls_auto] = true
977
+ end
978
+ end
979
+
980
+ class InheritableTemplateRootTest < Test::Unit::TestCase
981
+ def test_attr
982
+ expected = "#{File.dirname(__FILE__)}/fixtures/path.with.dots"
983
+ assert_equal expected, FunkyPathMailer.template_root.to_s
984
+
985
+ sub = Class.new(FunkyPathMailer)
986
+ sub.template_root = 'test/path'
987
+
988
+ assert_equal 'test/path', sub.template_root.to_s
989
+ assert_equal expected, FunkyPathMailer.template_root.to_s
990
+ end
991
+ end
992
+
993
+ class MethodNamingTest < Test::Unit::TestCase
994
+ class TestMailer < ActionMailer::Base
995
+ def send
996
+ body 'foo'
997
+ end
998
+ end
999
+
1000
+ def setup
1001
+ set_delivery_method :test
1002
+ ActionMailer::Base.perform_deliveries = true
1003
+ ActionMailer::Base.deliveries = []
1004
+ end
1005
+
1006
+ def teardown
1007
+ restore_delivery_method
1008
+ end
1009
+
1010
+ def test_send_method
1011
+ assert_nothing_raised do
1012
+ assert_emails 1 do
1013
+ TestMailer.deliver_send
1014
+ end
1015
+ end
1016
+ end
1017
+ end
1018
+
1019
+ class RespondToTest < Test::Unit::TestCase
1020
+ class RespondToMailer < ActionMailer::Base; end
1021
+
1022
+ def setup
1023
+ set_delivery_method :test
1024
+ end
1025
+
1026
+ def teardown
1027
+ restore_delivery_method
1028
+ end
1029
+
1030
+ def test_should_respond_to_new
1031
+ assert RespondToMailer.respond_to?(:new)
1032
+ end
1033
+
1034
+ def test_should_respond_to_create_with_template_suffix
1035
+ assert RespondToMailer.respond_to?(:create_any_old_template)
1036
+ end
1037
+
1038
+ def test_should_respond_to_deliver_with_template_suffix
1039
+ assert RespondToMailer.respond_to?(:deliver_any_old_template)
1040
+ end
1041
+
1042
+ def test_should_not_respond_to_new_with_template_suffix
1043
+ assert !RespondToMailer.respond_to?(:new_any_old_template)
1044
+ end
1045
+
1046
+ def test_should_not_respond_to_create_with_template_suffix_unless_it_is_separated_by_an_underscore
1047
+ assert !RespondToMailer.respond_to?(:createany_old_template)
1048
+ end
1049
+
1050
+ def test_should_not_respond_to_deliver_with_template_suffix_unless_it_is_separated_by_an_underscore
1051
+ assert !RespondToMailer.respond_to?(:deliverany_old_template)
1052
+ end
1053
+
1054
+ def test_should_not_respond_to_create_with_template_suffix_if_it_begins_with_a_uppercase_letter
1055
+ assert !RespondToMailer.respond_to?(:create_Any_old_template)
1056
+ end
1057
+
1058
+ def test_should_not_respond_to_deliver_with_template_suffix_if_it_begins_with_a_uppercase_letter
1059
+ assert !RespondToMailer.respond_to?(:deliver_Any_old_template)
1060
+ end
1061
+
1062
+ def test_should_not_respond_to_create_with_template_suffix_if_it_begins_with_a_digit
1063
+ assert !RespondToMailer.respond_to?(:create_1_template)
1064
+ end
1065
+
1066
+ def test_should_not_respond_to_deliver_with_template_suffix_if_it_begins_with_a_digit
1067
+ assert !RespondToMailer.respond_to?(:deliver_1_template)
1068
+ end
1069
+
1070
+ def test_should_not_respond_to_method_where_deliver_is_not_a_suffix
1071
+ assert !RespondToMailer.respond_to?(:foo_deliver_template)
1072
+ end
1073
+
1074
+ def test_should_still_raise_exception_with_expected_message_when_calling_an_undefined_method
1075
+ error = assert_raise NoMethodError do
1076
+ RespondToMailer.not_a_method
1077
+ end
1078
+
1079
+ assert_match /undefined method.*not_a_method/, error.message
1080
+ end
1081
+ end