Skip to content

Commit

Permalink
Move config_accessor :asset_host from ActionController::Base to Abstr…
Browse files Browse the repository at this point in the history
…actController which fixes issues with asset_host in ActionMailer

Including:
  - Moved mailer objects in separate directory
  - Added two tests for asset_host configuration option
  • Loading branch information
jeroenvandijk authored and josevalim committed Jul 23, 2010
1 parent 5ebc1d8 commit affeb51
Show file tree
Hide file tree
Showing 7 changed files with 167 additions and 131 deletions.
156 changes: 27 additions & 129 deletions actionmailer/test/base_test.rb
Expand Up @@ -2,139 +2,17 @@
require 'abstract_unit'
require 'active_support/time'

require 'mailers/base_mailer'
require 'mailers/proc_mailer'
require 'mailers/asset_mailer'

class BaseTest < ActiveSupport::TestCase
# TODO Add some tests for implicity layout render and url helpers
# so we can get rid of old base tests altogether with old base.
class BaseMailer < ActionMailer::Base
self.mailer_name = "base_mailer"

default :to => 'system@test.lindsaar.net',
:from => 'jose@test.plataformatec.com',
:reply_to => 'mikel@test.lindsaar.net'

def welcome(hash = {})
headers['X-SPAM'] = "Not SPAM"
mail({:subject => "The first email on new API!"}.merge!(hash))
end

def welcome_with_headers(hash = {})
headers hash
mail
end

def welcome_from_another_path(path)
mail(:template_name => "welcome", :template_path => path)
end

def html_only(hash = {})
mail(hash)
end

def plain_text_only(hash = {})
mail(hash)
end

def inline_attachment
attachments.inline['logo.png'] = "\312\213\254\232"
mail
end

def attachment_with_content(hash = {})
attachments['invoice.pdf'] = 'This is test File content'
mail(hash)
end

def attachment_with_hash
attachments['invoice.jpg'] = { :data => "\312\213\254\232)b",
:mime_type => "image/x-jpg",
:transfer_encoding => "base64" }
mail
end

def attachment_with_hash_default_encoding
attachments['invoice.jpg'] = { :data => "\312\213\254\232)b",
:mime_type => "image/x-jpg" }
mail
end

def implicit_multipart(hash = {})
attachments['invoice.pdf'] = 'This is test File content' if hash.delete(:attachments)
mail(hash)
end

def implicit_with_locale(hash = {})
mail(hash)
end

def explicit_multipart(hash = {})
attachments['invoice.pdf'] = 'This is test File content' if hash.delete(:attachments)
mail(hash) do |format|
format.text { render :text => "TEXT Explicit Multipart" }
format.html { render :text => "HTML Explicit Multipart" }
end
end

def explicit_multipart_templates(hash = {})
mail(hash) do |format|
format.html
format.text
end
end

def explicit_multipart_with_any(hash = {})
mail(hash) do |format|
format.any(:text, :html){ render :text => "Format with any!" }
end
end

def explicit_multipart_with_options(include_html = false)
mail do |format|
format.text(:content_transfer_encoding => "base64"){ render "welcome" }
format.html{ render "welcome" } if include_html
end
end

def explicit_multipart_with_one_template(hash = {})
mail(hash) do |format|
format.html
format.text
end
end

def implicit_different_template(template_name='')
mail(:template_name => template_name)
end

def explicit_different_template(template_name='')
mail do |format|
format.text { render :template => "#{mailer_name}/#{template_name}" }
format.html { render :template => "#{mailer_name}/#{template_name}" }
end
end

def different_layout(layout_name='')
mail do |format|
format.text { render :layout => layout_name }
format.html { render :layout => layout_name }
end
end
end

class ProcMailer < ActionMailer::Base
default :to => 'system@test.lindsaar.net',
'X-Proc-Method' => Proc.new { Time.now.to_i.to_s },
:subject => Proc.new { give_a_greeting }

def welcome
mail
end

private

def give_a_greeting
"Thanks for signing up this afternoon"
end

def teardown
ActionMailer::Base.asset_host = nil
ActionMailer::Base.assets_dir = nil
end

test "method call to mail does not raise error" do
Expand Down Expand Up @@ -570,6 +448,26 @@ def give_a_greeting
assert_equal("Welcome from another path", mail.body.encoded)
end

test "assets tags should use ActionMailer's asset_host settings" do
ActionMailer::Base.config.asset_host = "http://global.com"
ActionMailer::Base.config.assets_dir = "global/"

mail = AssetMailer.welcome

assert_equal(%{<img alt="Dummy" src="http://global.com/images/dummy.png" />}, mail.body.to_s.strip)
end

test "assets tags should use a Mailer's asset_host settings when available" do
ActionMailer::Base.config.asset_host = "global.com"
ActionMailer::Base.config.assets_dir = "global/"

AssetMailer.asset_host = "http://local.com"

mail = AssetMailer.welcome

assert_equal(%{<img alt="Dummy" src="http://local.com/images/dummy.png" />}, mail.body.to_s.strip)
end

# Before and After hooks

class MyObserver
Expand Down
1 change: 1 addition & 0 deletions actionmailer/test/fixtures/asset_mailer/welcome.html.erb
@@ -0,0 +1 @@
<%= image_tag "dummy.png" %>
7 changes: 7 additions & 0 deletions actionmailer/test/mailers/asset_mailer.rb
@@ -0,0 +1,7 @@
class AssetMailer < ActionMailer::Base
self.mailer_name = "asset_mailer"

def welcome
mail
end
end
114 changes: 114 additions & 0 deletions actionmailer/test/mailers/base_mailer.rb
@@ -0,0 +1,114 @@
class BaseMailer < ActionMailer::Base
self.mailer_name = "base_mailer"

default :to => 'system@test.lindsaar.net',
:from => 'jose@test.plataformatec.com',
:reply_to => 'mikel@test.lindsaar.net'

def welcome(hash = {})
headers['X-SPAM'] = "Not SPAM"
mail({:subject => "The first email on new API!"}.merge!(hash))
end

def welcome_with_headers(hash = {})
headers hash
mail
end

def welcome_from_another_path(path)
mail(:template_name => "welcome", :template_path => path)
end

def html_only(hash = {})
mail(hash)
end

def plain_text_only(hash = {})
mail(hash)
end

def inline_attachment
attachments.inline['logo.png'] = "\312\213\254\232"
mail
end

def attachment_with_content(hash = {})
attachments['invoice.pdf'] = 'This is test File content'
mail(hash)
end

def attachment_with_hash
attachments['invoice.jpg'] = { :data => "\312\213\254\232)b",
:mime_type => "image/x-jpg",
:transfer_encoding => "base64" }
mail
end

def attachment_with_hash_default_encoding
attachments['invoice.jpg'] = { :data => "\312\213\254\232)b",
:mime_type => "image/x-jpg" }
mail
end

def implicit_multipart(hash = {})
attachments['invoice.pdf'] = 'This is test File content' if hash.delete(:attachments)
mail(hash)
end

def implicit_with_locale(hash = {})
mail(hash)
end

def explicit_multipart(hash = {})
attachments['invoice.pdf'] = 'This is test File content' if hash.delete(:attachments)
mail(hash) do |format|
format.text { render :text => "TEXT Explicit Multipart" }
format.html { render :text => "HTML Explicit Multipart" }
end
end

def explicit_multipart_templates(hash = {})
mail(hash) do |format|
format.html
format.text
end
end

def explicit_multipart_with_any(hash = {})
mail(hash) do |format|
format.any(:text, :html){ render :text => "Format with any!" }
end
end

def explicit_multipart_with_options(include_html = false)
mail do |format|
format.text(:content_transfer_encoding => "base64"){ render "welcome" }
format.html{ render "welcome" } if include_html
end
end

def explicit_multipart_with_one_template(hash = {})
mail(hash) do |format|
format.html
format.text
end
end

def implicit_different_template(template_name='')
mail(:template_name => template_name)
end

def explicit_different_template(template_name='')
mail do |format|
format.text { render :template => "#{mailer_name}/#{template_name}" }
format.html { render :template => "#{mailer_name}/#{template_name}" }
end
end

def different_layout(layout_name='')
mail do |format|
format.text { render :layout => layout_name }
format.html { render :layout => layout_name }
end
end
end
16 changes: 16 additions & 0 deletions actionmailer/test/mailers/proc_mailer.rb
@@ -0,0 +1,16 @@
class ProcMailer < ActionMailer::Base
default :to => 'system@test.lindsaar.net',
'X-Proc-Method' => Proc.new { Time.now.to_i.to_s },
:subject => Proc.new { give_a_greeting }

def welcome
mail
end

private

def give_a_greeting
"Thanks for signing up this afternoon"
end

end
2 changes: 1 addition & 1 deletion actionpack/lib/abstract_controller/asset_paths.rb
Expand Up @@ -3,7 +3,7 @@ module AssetPaths
extend ActiveSupport::Concern

included do
config_accessor :assets_dir, :javascripts_dir, :stylesheets_dir
config_accessor :asset_host, :assets_dir, :javascripts_dir, :stylesheets_dir
end
end
end
2 changes: 1 addition & 1 deletion actionpack/lib/action_controller/base.rb
Expand Up @@ -63,7 +63,7 @@ def self.inherited(klass)
klass.helper :all
end

config_accessor :asset_host, :asset_path
config_accessor :asset_path
ActiveSupport.run_load_hooks(:action_controller, self)
end
end
Expand Down

0 comments on commit affeb51

Please sign in to comment.