mirror of https://github.com/rails/rails
Add tests to mail helper.
This commit is contained in:
parent
bd96614101
commit
a74a655648
|
@ -256,7 +256,6 @@ module ActionMailer #:nodoc:
|
||||||
include DeliveryMethods, Quoting
|
include DeliveryMethods, Quoting
|
||||||
abstract!
|
abstract!
|
||||||
|
|
||||||
# TODO Add some sanity tests for the included modules
|
|
||||||
include AbstractController::Logger
|
include AbstractController::Logger
|
||||||
include AbstractController::Rendering
|
include AbstractController::Rendering
|
||||||
include AbstractController::LocalizedCache
|
include AbstractController::LocalizedCache
|
||||||
|
|
|
@ -17,12 +17,12 @@ module ActionMailer
|
||||||
end
|
end
|
||||||
|
|
||||||
# Access the mailer instance.
|
# Access the mailer instance.
|
||||||
def mailer #:nodoc:
|
def mailer
|
||||||
@_controller
|
@_controller
|
||||||
end
|
end
|
||||||
|
|
||||||
# Access the message instance.
|
# Access the message instance.
|
||||||
def message #:nodoc:
|
def message
|
||||||
@_message
|
@_message
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,6 @@ ActionView::Template.register_template_handler :bak, lambda { |template| "Lame b
|
||||||
|
|
||||||
FIXTURE_LOAD_PATH = File.expand_path('fixtures', File.dirname(__FILE__))
|
FIXTURE_LOAD_PATH = File.expand_path('fixtures', File.dirname(__FILE__))
|
||||||
ActionMailer::Base.view_paths = FIXTURE_LOAD_PATH
|
ActionMailer::Base.view_paths = FIXTURE_LOAD_PATH
|
||||||
$:.unshift File.join(FIXTURE_LOAD_PATH, 'helpers')
|
|
||||||
|
|
||||||
class MockSMTP
|
class MockSMTP
|
||||||
def self.deliveries
|
def self.deliveries
|
||||||
|
|
|
@ -71,7 +71,7 @@ class CustomDeliveryMethodsTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
class MailDeliveryTest < ActiveSupport::TestCase
|
class MailDeliveryTest < ActiveSupport::TestCase
|
||||||
class DeliverMail < ActionMailer::Base
|
class DeliveryMailer < ActionMailer::Base
|
||||||
DEFAULT_HEADERS = {
|
DEFAULT_HEADERS = {
|
||||||
:to => 'mikel@test.lindsaar.net',
|
:to => 'mikel@test.lindsaar.net',
|
||||||
:from => 'jose@test.plataformatec.com'
|
:from => 'jose@test.plataformatec.com'
|
||||||
|
@ -87,64 +87,64 @@ class MailDeliveryTest < ActiveSupport::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
def teardown
|
def teardown
|
||||||
DeliverMail.delivery_method = :smtp
|
DeliveryMailer.delivery_method = :smtp
|
||||||
DeliverMail.perform_deliveries = true
|
DeliveryMailer.perform_deliveries = true
|
||||||
DeliverMail.raise_delivery_errors = true
|
DeliveryMailer.raise_delivery_errors = true
|
||||||
end
|
end
|
||||||
|
|
||||||
test "ActionMailer should be told when Mail gets delivered" do
|
test "ActionMailer should be told when Mail gets delivered" do
|
||||||
DeliverMail.deliveries.clear
|
DeliveryMailer.deliveries.clear
|
||||||
DeliverMail.expects(:delivered_email).once
|
DeliveryMailer.expects(:delivered_email).once
|
||||||
DeliverMail.welcome.deliver
|
DeliveryMailer.welcome.deliver
|
||||||
assert_equal(1, DeliverMail.deliveries.length)
|
assert_equal(1, DeliveryMailer.deliveries.length)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "delivery method can be customized per instance" do
|
test "delivery method can be customized per instance" do
|
||||||
email = DeliverMail.welcome.deliver
|
email = DeliveryMailer.welcome.deliver
|
||||||
assert_instance_of Mail::SMTP, email.delivery_method
|
assert_instance_of Mail::SMTP, email.delivery_method
|
||||||
email = DeliverMail.welcome(:delivery_method => :test).deliver
|
email = DeliveryMailer.welcome(:delivery_method => :test).deliver
|
||||||
assert_instance_of Mail::TestMailer, email.delivery_method
|
assert_instance_of Mail::TestMailer, email.delivery_method
|
||||||
end
|
end
|
||||||
|
|
||||||
test "delivery method can be customized in subclasses not changing the parent" do
|
test "delivery method can be customized in subclasses not changing the parent" do
|
||||||
DeliverMail.delivery_method = :test
|
DeliveryMailer.delivery_method = :test
|
||||||
assert_equal :smtp, ActionMailer::Base.delivery_method
|
assert_equal :smtp, ActionMailer::Base.delivery_method
|
||||||
$BREAK = true
|
$BREAK = true
|
||||||
email = DeliverMail.welcome.deliver
|
email = DeliveryMailer.welcome.deliver
|
||||||
assert_instance_of Mail::TestMailer, email.delivery_method
|
assert_instance_of Mail::TestMailer, email.delivery_method
|
||||||
end
|
end
|
||||||
|
|
||||||
test "non registered delivery methods raises errors" do
|
test "non registered delivery methods raises errors" do
|
||||||
DeliverMail.delivery_method = :unknown
|
DeliveryMailer.delivery_method = :unknown
|
||||||
assert_raise RuntimeError do
|
assert_raise RuntimeError do
|
||||||
DeliverMail.welcome.deliver
|
DeliveryMailer.welcome.deliver
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "does not perform deliveries if requested" do
|
test "does not perform deliveries if requested" do
|
||||||
DeliverMail.perform_deliveries = false
|
DeliveryMailer.perform_deliveries = false
|
||||||
DeliverMail.deliveries.clear
|
DeliveryMailer.deliveries.clear
|
||||||
DeliverMail.expects(:delivered_email).never
|
DeliveryMailer.expects(:delivered_email).never
|
||||||
DeliverMail.welcome.deliver
|
DeliveryMailer.welcome.deliver
|
||||||
assert_equal(0, DeliverMail.deliveries.length)
|
assert_equal(0, DeliveryMailer.deliveries.length)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "raise errors on bogus deliveries" do
|
test "raise errors on bogus deliveries" do
|
||||||
DeliverMail.delivery_method = BogusDelivery
|
DeliveryMailer.delivery_method = BogusDelivery
|
||||||
DeliverMail.deliveries.clear
|
DeliveryMailer.deliveries.clear
|
||||||
DeliverMail.expects(:delivered_email).never
|
DeliveryMailer.expects(:delivered_email).never
|
||||||
assert_raise RuntimeError do
|
assert_raise RuntimeError do
|
||||||
DeliverMail.welcome.deliver
|
DeliveryMailer.welcome.deliver
|
||||||
end
|
end
|
||||||
assert_equal(0, DeliverMail.deliveries.length)
|
assert_equal(0, DeliveryMailer.deliveries.length)
|
||||||
end
|
end
|
||||||
|
|
||||||
test "does not raise errors on bogus deliveries if set" do
|
test "does not raise errors on bogus deliveries if set" do
|
||||||
DeliverMail.delivery_method = BogusDelivery
|
DeliveryMailer.delivery_method = BogusDelivery
|
||||||
DeliverMail.raise_delivery_errors = false
|
DeliveryMailer.raise_delivery_errors = false
|
||||||
DeliverMail.deliveries.clear
|
DeliveryMailer.deliveries.clear
|
||||||
DeliverMail.expects(:delivered_email).once
|
DeliveryMailer.expects(:delivered_email).once
|
||||||
DeliverMail.welcome.deliver
|
DeliveryMailer.welcome.deliver
|
||||||
assert_equal(1, DeliverMail.deliveries.length)
|
assert_equal(1, DeliveryMailer.deliveries.length)
|
||||||
end
|
end
|
||||||
end
|
end
|
|
@ -1 +0,0 @@
|
||||||
So, <%= example_format(@text) %>
|
|
|
@ -1 +0,0 @@
|
||||||
Hello, <%= person_name %>. Thanks for registering!
|
|
|
@ -1 +0,0 @@
|
||||||
This message brought to you by <%= name_of_the_mailer_class %>.
|
|
|
@ -1,5 +0,0 @@
|
||||||
From "Romeo and Juliet":
|
|
||||||
|
|
||||||
<%= block_format @text %>
|
|
||||||
|
|
||||||
Good ol' Shakespeare.
|
|
|
@ -1,5 +0,0 @@
|
||||||
module ExampleHelper
|
|
||||||
def example_format(text)
|
|
||||||
"<em><strong><small>#{h(text)}</small></strong></em>".html_safe!
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
require 'abstract_unit'
|
||||||
|
|
||||||
|
class HelperMailer < ActionMailer::Base
|
||||||
|
def use_mail_helper
|
||||||
|
@text = "But soft! What light through yonder window breaks? It is the east, " +
|
||||||
|
"and Juliet is the sun. Arise, fair sun, and kill the envious moon, " +
|
||||||
|
"which is sick and pale with grief that thou, her maid, art far more " +
|
||||||
|
"fair than she. Be not her maid, for she is envious! Her vestal " +
|
||||||
|
"livery is but sick and green, and none but fools do wear it. Cast " +
|
||||||
|
"it off!"
|
||||||
|
|
||||||
|
mail_with_defaults do |format|
|
||||||
|
format.html { render(:inline => "<%= block_format @text %>") }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def use_mailer
|
||||||
|
mail_with_defaults do |format|
|
||||||
|
format.html { render(:inline => "<%= mailer.message.subject %>") }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def use_message
|
||||||
|
mail_with_defaults do |format|
|
||||||
|
format.html { render(:inline => "<%= message.subject %>") }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def mail_with_defaults(&block)
|
||||||
|
mail(:to => "test@localhost", :from => "tester@example.com",
|
||||||
|
:subject => "using helpers", &block)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class MailerHelperTest < ActionMailer::TestCase
|
||||||
|
def test_use_mail_helper
|
||||||
|
mail = HelperMailer.use_mail_helper
|
||||||
|
assert_match %r{ But soft!}, mail.body.encoded
|
||||||
|
assert_match %r{east, and\r\n Juliet}, mail.body.encoded
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_use_mailer
|
||||||
|
mail = HelperMailer.use_mailer
|
||||||
|
assert_match "using helpers", mail.body.encoded
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_use_message
|
||||||
|
mail = HelperMailer.use_message
|
||||||
|
assert_match "using helpers", mail.body.encoded
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -1,94 +0,0 @@
|
||||||
require 'abstract_unit'
|
|
||||||
|
|
||||||
module MailerHelper
|
|
||||||
def person_name
|
|
||||||
"Mr. Joe Person"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
class HelperMailer < ActionMailer::Base
|
|
||||||
helper MailerHelper
|
|
||||||
helper :example
|
|
||||||
|
|
||||||
def use_helper
|
|
||||||
recipients 'test@localhost'
|
|
||||||
subject "using helpers"
|
|
||||||
from "tester@example.com"
|
|
||||||
end
|
|
||||||
|
|
||||||
def use_example_helper
|
|
||||||
recipients 'test@localhost'
|
|
||||||
subject "using helpers"
|
|
||||||
from "tester@example.com"
|
|
||||||
|
|
||||||
@text = "emphasize me!"
|
|
||||||
end
|
|
||||||
|
|
||||||
def use_mail_helper
|
|
||||||
recipients 'test@localhost'
|
|
||||||
subject "using mailing helpers"
|
|
||||||
from "tester@example.com"
|
|
||||||
|
|
||||||
@text = "But soft! What light through yonder window breaks? It is the east, " +
|
|
||||||
"and Juliet is the sun. Arise, fair sun, and kill the envious moon, " +
|
|
||||||
"which is sick and pale with grief that thou, her maid, art far more " +
|
|
||||||
"fair than she. Be not her maid, for she is envious! Her vestal " +
|
|
||||||
"livery is but sick and green, and none but fools do wear it. Cast " +
|
|
||||||
"it off!"
|
|
||||||
end
|
|
||||||
|
|
||||||
def use_helper_method
|
|
||||||
recipients 'test@localhost'
|
|
||||||
subject "using helpers"
|
|
||||||
from "tester@example.com"
|
|
||||||
|
|
||||||
@text = "emphasize me!"
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def name_of_the_mailer_class
|
|
||||||
self.class.name
|
|
||||||
end
|
|
||||||
helper_method :name_of_the_mailer_class
|
|
||||||
end
|
|
||||||
|
|
||||||
class MailerHelperTest < ActiveSupport::TestCase
|
|
||||||
def new_mail( charset="utf-8" )
|
|
||||||
mail = Mail.new
|
|
||||||
mail.set_content_type "text", "plain", { "charset" => charset } if charset
|
|
||||||
mail
|
|
||||||
end
|
|
||||||
|
|
||||||
def setup
|
|
||||||
set_delivery_method :test
|
|
||||||
ActionMailer::Base.perform_deliveries = true
|
|
||||||
ActionMailer::Base.deliveries.clear
|
|
||||||
end
|
|
||||||
|
|
||||||
def teardown
|
|
||||||
restore_delivery_method
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_use_helper
|
|
||||||
mail = HelperMailer.use_helper
|
|
||||||
assert_match %r{Mr. Joe Person}, mail.encoded
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_use_example_helper
|
|
||||||
mail = HelperMailer.use_example_helper
|
|
||||||
assert_match %r{<em><strong><small>emphasize me!}, mail.encoded
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_use_helper_method
|
|
||||||
mail = HelperMailer.use_helper_method
|
|
||||||
assert_match %r{HelperMailer}, mail.encoded
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_use_mail_helper
|
|
||||||
mail = HelperMailer.use_mail_helper
|
|
||||||
assert_match %r{ But soft!}, mail.encoded
|
|
||||||
assert_match %r{east, and\r\n Juliet}, mail.encoded
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
Loading…
Reference in New Issue