From 3fad0cd06c2ff828dd9bb0bb18080572ee992f4f Mon Sep 17 00:00:00 2001
From: David Heinemeier Hansson <david@loudthinking.com>
Date: Sat, 19 Feb 2005 21:51:16 +0000
Subject: Added support for charsets for both subject and body. The default
 charset is now UTF-8 #673 [Jamis Buck]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@699 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
---
 actionmailer/test/mail_service_test.rb | 96 +++++++++++++++++++++++++++++++---
 1 file changed, 90 insertions(+), 6 deletions(-)

(limited to 'actionmailer/test')

diff --git a/actionmailer/test/mail_service_test.rb b/actionmailer/test/mail_service_test.rb
index 2ad85b605c..45423a1960 100755
--- a/actionmailer/test/mail_service_test.rb
+++ b/actionmailer/test/mail_service_test.rb
@@ -31,12 +31,46 @@ class TestMailer < ActionMailer::Base
     @body       = "Nothing to see here."
   end
 
+  def iso_charset(recipient)
+    @recipients = recipient
+    @subject    = "testing iso charsets"
+    @from       = "system@loudthinking.com"
+    @sent_on    = Time.local 2004, 12, 12
+    @cc         = "nobody@loudthinking.com"
+    @bcc        = "root@loudthinking.com"
+    @body       = "Nothing to see here."
+    @charset    = "iso-8859-1"
+  end
+
+  def unencoded_subject(recipient)
+    @recipients = recipient
+    @subject    = "testing unencoded subject"
+    @from       = "system@loudthinking.com"
+    @sent_on    = Time.local 2004, 12, 12
+    @cc         = "nobody@loudthinking.com"
+    @bcc        = "root@loudthinking.com"
+    @body       = "Nothing to see here."
+    @encode_subject = false
+  end
+
 end
 
 TestMailer.template_root = File.dirname(__FILE__) + "/fixtures"
 
 class ActionMailerTest < Test::Unit::TestCase
 
+  def encode( text, charset="utf-8" )
+    ActionMailer::Base.quoted_printable( text, charset )
+  end
+
+  def new_mail( charset="utf-8" )
+    mail = TMail::Mail.new
+    if charset
+      mail.set_content_type "text", "plain", { "charset" => charset }
+    end
+    mail
+  end
+
   def setup
     ActionMailer::Base.delivery_method = :test
     ActionMailer::Base.perform_deliveries = true
@@ -46,9 +80,9 @@ class ActionMailerTest < Test::Unit::TestCase
   end
 
   def test_signed_up
-    expected = TMail::Mail.new
+    expected = new_mail
     expected.to      = @recipient
-    expected.subject = "[Signed up] Welcome #{@recipient}"
+    expected.subject = encode "[Signed up] Welcome #{@recipient}"
     expected.body    = "Hello there, \n\nMr. #{@recipient}"
     expected.from    = "system@loudthinking.com"
     expected.date    = Time.local(2004, 12, 12)
@@ -64,9 +98,9 @@ class ActionMailerTest < Test::Unit::TestCase
   end
   
   def test_cancelled_account
-    expected = TMail::Mail.new
+    expected = new_mail
     expected.to      = @recipient
-    expected.subject = "[Cancelled] Goodbye #{@recipient}"
+    expected.subject = encode "[Cancelled] Goodbye #{@recipient}"
     expected.body    = "Goodbye, Mr. #{@recipient}"
     expected.from    = "system@loudthinking.com"
     expected.date    = Time.local(2004, 12, 12)
@@ -82,9 +116,9 @@ class ActionMailerTest < Test::Unit::TestCase
   end
   
   def test_cc_bcc
-    expected = TMail::Mail.new
+    expected = new_mail
     expected.to      = @recipient
-    expected.subject = "testing bcc/cc"
+    expected.subject = encode "testing bcc/cc"
     expected.body    = "Nothing to see here."
     expected.from    = "system@loudthinking.com"
     expected.cc      = "nobody@loudthinking.com"
@@ -106,6 +140,56 @@ class ActionMailerTest < Test::Unit::TestCase
     assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
   end
 
+  def test_iso_charset
+    expected = new_mail( "iso-8859-1" )
+    expected.to      = @recipient
+    expected.subject = encode "testing iso charsets", "iso-8859-1"
+    expected.body    = "Nothing to see here."
+    expected.from    = "system@loudthinking.com"
+    expected.cc      = "nobody@loudthinking.com"
+    expected.bcc     = "root@loudthinking.com"
+    expected.date    = Time.local 2004, 12, 12
+
+    created = nil
+    assert_nothing_raised do
+      created = TestMailer.create_iso_charset @recipient
+    end
+    assert_not_nil created
+    assert_equal expected.encoded, created.encoded
+
+    assert_nothing_raised do
+      TestMailer.deliver_iso_charset @recipient
+    end
+
+    assert_not_nil ActionMailer::Base.deliveries.first
+    assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
+  end
+
+  def test_unencoded_subject
+    expected = new_mail
+    expected.to      = @recipient
+    expected.subject = "testing unencoded subject"
+    expected.body    = "Nothing to see here."
+    expected.from    = "system@loudthinking.com"
+    expected.cc      = "nobody@loudthinking.com"
+    expected.bcc     = "root@loudthinking.com"
+    expected.date    = Time.local 2004, 12, 12
+
+    created = nil
+    assert_nothing_raised do
+      created = TestMailer.create_unencoded_subject @recipient
+    end
+    assert_not_nil created
+    assert_equal expected.encoded, created.encoded
+
+    assert_nothing_raised do
+      TestMailer.deliver_unencoded_subject @recipient
+    end
+
+    assert_not_nil ActionMailer::Base.deliveries.first
+    assert_equal expected.encoded, ActionMailer::Base.deliveries.first.encoded
+  end
+
   def test_instances_are_nil
     assert_nil ActionMailer::Base.new
     assert_nil TestMailer.new
-- 
cgit v1.2.3