diff options
Diffstat (limited to 'spec/models/application_mailer_spec.rb')
-rw-r--r-- | spec/models/application_mailer_spec.rb | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/spec/models/application_mailer_spec.rb b/spec/models/application_mailer_spec.rb deleted file mode 100644 index acf5f43bc..000000000 --- a/spec/models/application_mailer_spec.rb +++ /dev/null @@ -1,162 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') - - -describe ApplicationMailer do - - context 'when using plugins' do - - def set_base_views - ApplicationMailer.class_eval do - @previous_view_paths = self.view_paths.dup - self.view_paths.clear - self.view_paths << File.join(Rails.root, 'spec', 'fixtures', 'theme_views', 'core') - end - end - - def add_mail_methods(method_names) - method_names.each{ |method_name| ApplicationMailer.send(:define_method, method_name){} } - end - - def remove_mail_methods(method_names) - method_names.each do |method_name| - if ApplicationMailer.respond_to?(method_name) - ApplicationMailer.send(:remove_method, method_name) - end - end - end - - def prepend_theme_views(theme_name) - ApplicationMailer.class_eval do - view_paths.unshift File.join(Rails.root, 'spec', 'fixtures', 'theme_views', theme_name) - end - end - - def append_theme_views(theme_name) - ApplicationMailer.class_eval do - view_paths << File.join(Rails.root, 'spec', 'fixtures', 'theme_views', theme_name) - end - end - - def reset_views - ApplicationMailer.class_eval do - self.view_paths = @previous_view_paths - end - end - - def create_multipart_method(method_name) - ApplicationMailer.send(:define_method, method_name) do - attachment :content_type => 'message/rfc822', - :body => 'xxx', - :filename => "original.eml", - :transfer_encoding => '7bit', - :content_disposition => 'inline' - end - end - - before do - set_base_views - add_mail_methods(['simple', 'theme_only', 'core_only', 'neither']) - end - - describe 'when a plugin prepends its mail templates to the view paths' do - - it 'should render a theme template in preference to a core template' do - prepend_theme_views('theme_one') - @mail = ApplicationMailer.create_simple() - @mail.body.should match('Theme simple') - end - - it 'should render the template provided by the theme if no template is available in core' do - prepend_theme_views('theme_one') - @mail = ApplicationMailer.create_theme_only() - @mail.body.should match('Theme only') - end - - it 'should render the template provided by core if there is no theme template' do - prepend_theme_views('theme_one') - @mail = ApplicationMailer.create_core_only() - @mail.body.should match('Core only') - end - - it 'should raise an error if the template is in neither core nor theme' do - prepend_theme_views('theme_one') - expected_error = 'Missing template application_mailer/neither.erb in view path' - lambda{ ApplicationMailer.create_neither() }.should raise_error(/#{expected_error}/) - end - - it 'should render a multipart email using a theme template' do - prepend_theme_views('theme_one') - create_multipart_method('multipart_theme_only') - @mail = ApplicationMailer.create_multipart_theme_only() - @mail.parts.size.should == 2 - message_part = @mail.parts[0].to_s - message_part.should match("Theme multipart") - end - - it 'should render a multipart email using a core template' do - prepend_theme_views('theme_one') - create_multipart_method('multipart_core_only') - @mail = ApplicationMailer.create_multipart_core_only() - @mail.parts.size.should == 2 - message_part = @mail.parts[0].to_s - message_part.should match("Core multipart") - end - - end - - describe 'when a plugin appends its mail templates to the view paths' do - - it 'should render a core template in preference to a theme template' do - append_theme_views('theme_one') - @mail = ApplicationMailer.create_simple() - @mail.body.should match('Core simple') - end - - it 'should render the template provided by the theme if no template is available in core' do - append_theme_views('theme_one') - @mail = ApplicationMailer.create_theme_only() - @mail.body.should match('Theme only') - end - - it 'should render the template provided by core if there is no theme template' do - append_theme_views('theme_one') - @mail = ApplicationMailer.create_core_only() - @mail.body.should match('Core only') - end - - it 'should raise an error if the template is in neither core nor theme' do - append_theme_views('theme_one') - expected_error = 'Missing template application_mailer/neither.erb in view path' - lambda{ ApplicationMailer.create_neither() }.should raise_error(/#{expected_error}/) - end - - it 'should render a multipart email using a core template' do - append_theme_views('theme_one') - create_multipart_method('multipart_core_only') - @mail = ApplicationMailer.create_multipart_core_only() - @mail.parts.size.should == 2 - message_part = @mail.parts[0].to_s - message_part.should match("Core multipart") - end - - it 'should render a multipart email using a theme template' do - append_theme_views('theme_one') - create_multipart_method('multipart_theme_only') - @mail = ApplicationMailer.create_multipart_theme_only() - @mail.parts.size.should == 2 - message_part = @mail.parts[0].to_s - message_part.should match("Theme multipart") - end - - end - - after do - reset_views - remove_mail_methods(['simple', 'theme_only', 'core_only', 'neither', 'multipart']) - end - end - -end - - - |