require File.expand_path(File.dirname(__FILE__) + '/helper') describe "Email" do context 'the mailer in a app' do should 'send a basic inline email' do mock_app do register Padrino::Mailer get "/" do email do from 'padrino@me.com' to 'padrino@you.com' subject 'Hello there Padrino' body 'Body' via :test end end end get "/" assert ok? email = pop_last_delivery assert_equal ['padrino@me.com'], email.from assert_equal ['padrino@you.com'], email.to assert_equal 'Hello there Padrino', email.subject assert_equal 'Body', email.body.to_s end should 'send a basic inline from hash' do mock_app do register Padrino::Mailer get "/" do email({ :from => 'padrino@me.com', :to => 'padrino@you.com', :subject => 'Hello there Padrino', :body => 'Body', :via => :test }) end end get "/" assert ok? email = pop_last_delivery assert_equal ['padrino@me.com'], email.from assert_equal ['padrino@you.com'], email.to assert_equal 'Hello there Padrino', email.subject assert_equal 'Body', email.body.to_s end should 'send an basic email with body template' do mock_app do register Padrino::Mailer get "/" do email do views File.dirname(__FILE__) + '/fixtures' from 'padrino@me.com' to 'padrino@you.com' subject 'Hello there Padrino' render :basic via :test end end end get "/" assert ok? email = pop_last_delivery assert_equal ['padrino@me.com'], email.from assert_equal ['padrino@you.com'], email.to assert_equal 'Hello there Padrino', email.subject assert_equal 'This is a body of text from a template with interpolated <i> and non-interpolated tags
', email.body.to_s.chomp end should 'send emails with scoped mailer defaults' do mock_app do register Padrino::Mailer set :views, File.dirname(__FILE__) + '/fixtures/views' set :delivery_method, :test mailer :alternate do defaults :from => 'padrino@from.com', :to => 'padrino@to.com' email :foo do to 'padrino@different.com' subject 'Hello there again Padrino' via :test render 'alternate/foo' end end get("/") { deliver(:alternate, :foo) } end get "/" assert ok? email = pop_last_delivery assert_equal ['padrino@from.com'], email.from, "should have used default value" assert_equal ['padrino@different.com'], email.to, "should have overwritten default value" assert_equal 'Hello there again Padrino', email.subject assert_equal 'This is a foo message in mailers/alternate dir', email.body.to_s.chomp end should 'send emails with app mailer defaults' do mock_app do register Padrino::Mailer set :delivery_method, :test set :views, File.dirname(__FILE__) + '/fixtures/views' set :mailer_defaults, :from => 'padrino@from.com', :to => 'padrino@to.com', :subject => "This is a test" mailer :alternate do email :foo do to 'padrino@different.com' via :test render 'alternate/foo' end end get("/") { deliver(:alternate, :foo) } end get "/" assert ok? email = pop_last_delivery assert_equal ['padrino@from.com'], email.from, "should have used default value" assert_equal ['padrino@different.com'], email.to, "should have overwritten default value" assert_equal 'This is a test', email.subject assert_equal 'This is a foo message in mailers/alternate dir', email.body.to_s.chomp end should 'send emails without layout' do mock_app do register Padrino::Mailer set :views, File.dirname(__FILE__) + '/fixtures/views' set :delivery_method, :test mailer :alternate do email :foo do from 'padrino@me.com' to 'padrino@you.com' subject 'Hello there Padrino' via :test render 'alternate/foo' end end get("/") { deliver(:alternate, :foo) } end get "/" assert ok? email = pop_last_delivery assert_equal ['padrino@me.com'], email.from assert_equal ['padrino@you.com'], email.to assert_equal 'Hello there Padrino', email.subject assert_equal 'This is a foo message in mailers/alternate dir', email.body.to_s.chomp assert_match /TestMailer/, email.delivery_method.to_s end should 'raise an error if there are two messages with the same name' do assert_raises RuntimeError do mock_app do register Padrino::Mailer mailer :foo do email :bar do; end email :bar do; end end end end end end end