diff options
Diffstat (limited to 'spec')
13 files changed, 179 insertions, 9 deletions
diff --git a/spec/fixtures/locale/en/app.po b/spec/fixtures/locale/en/app.po index 5c40446d8..91af9b72b 100644 --- a/spec/fixtures/locale/en/app.po +++ b/spec/fixtures/locale/en/app.po @@ -356,7 +356,7 @@ msgstr "" #: app/views/general/_advanced_search_tips.rhtml:16 msgid "" -"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n" +"<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \n" " and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n" " can be present, you have to put <code>AND</code> explicitly if you only want results them all present." msgstr "" @@ -1098,7 +1098,7 @@ msgid "Forgotten your password?" msgstr "" #: app/views/public_body/list.rhtml:47 -msgid "Found {{count}} public bodies {{description}}" +msgid "Found {{count}} public authorities {{description}}" msgstr "" #: app/models/info_request.rb:257 diff --git a/spec/fixtures/locale/en_GB/app.po b/spec/fixtures/locale/en_GB/app.po index 5c40446d8..91af9b72b 100644 --- a/spec/fixtures/locale/en_GB/app.po +++ b/spec/fixtures/locale/en_GB/app.po @@ -356,7 +356,7 @@ msgstr "" #: app/views/general/_advanced_search_tips.rhtml:16 msgid "" -"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n" +"<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \n" " and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n" " can be present, you have to put <code>AND</code> explicitly if you only want results them all present." msgstr "" @@ -1098,7 +1098,7 @@ msgid "Forgotten your password?" msgstr "" #: app/views/public_body/list.rhtml:47 -msgid "Found {{count}} public bodies {{description}}" +msgid "Found {{count}} public authorities {{description}}" msgstr "" #: app/models/info_request.rb:257 diff --git a/spec/fixtures/locale/es/app.po b/spec/fixtures/locale/es/app.po index dd8e10969..4e54a1d40 100644 --- a/spec/fixtures/locale/es/app.po +++ b/spec/fixtures/locale/es/app.po @@ -424,7 +424,7 @@ msgstr "<strong><code>status:</code></strong> para filtrar en función del estad #: app/views/general/_advanced_search_tips.rhtml:16 msgid "" -"<strong><code>tag:charity</code></strong> to find all public bodies or requests with a given tag. You can include multiple tags, \n" +"<strong><code>tag:charity</code></strong> to find all public authorities or requests with a given tag. You can include multiple tags, \n" " and tag values, e.g. <code>tag:openlylocal AND tag:financial_transaction:335633</code>. Note that by default any of the tags\n" " can be present, you have to put <code>AND</code> explicitly if you only want results them all present." msgstr "<strong><code>tag:salud</code></strong> para buscar todos los organismos públicos o solicitudes con la etiqueta dada. Puedes incluir múltiples etiquetas, \n y valores, e.g. <code>tag:salud AND tag:financial_transaction:335633</code>. Por defecto, basta con que cualquiera de las etiquetas\n esté presente, añade <code>AND</code> explícitamente si sólo quiere resultados con todas ellas presentes." @@ -1221,7 +1221,7 @@ msgid "Forgotten your password?" msgstr "¿Has olvidado tu contraseña?" #: app/views/public_body/list.rhtml:47 -msgid "Found {{count}} public bodies {{description}}" +msgid "Found {{count}} public authorities {{description}}" msgstr "Encontrados {{count}} organismos públicos {{description}}" #: app/models/info_request.rb:257 diff --git a/spec/fixtures/theme_views/core/application_mailer/core_only.rhtml b/spec/fixtures/theme_views/core/application_mailer/core_only.rhtml new file mode 100644 index 000000000..53b7798ec --- /dev/null +++ b/spec/fixtures/theme_views/core/application_mailer/core_only.rhtml @@ -0,0 +1 @@ +Core only
\ No newline at end of file diff --git a/spec/fixtures/theme_views/core/application_mailer/multipart_core_only.rhtml b/spec/fixtures/theme_views/core/application_mailer/multipart_core_only.rhtml new file mode 100644 index 000000000..646a349f8 --- /dev/null +++ b/spec/fixtures/theme_views/core/application_mailer/multipart_core_only.rhtml @@ -0,0 +1 @@ +Core multipart
\ No newline at end of file diff --git a/spec/fixtures/theme_views/core/application_mailer/simple.rhtml b/spec/fixtures/theme_views/core/application_mailer/simple.rhtml new file mode 100644 index 000000000..a3937c940 --- /dev/null +++ b/spec/fixtures/theme_views/core/application_mailer/simple.rhtml @@ -0,0 +1 @@ +Core simple
\ No newline at end of file diff --git a/spec/fixtures/theme_views/theme_one/application_mailer/multipart_theme_only.rhtml b/spec/fixtures/theme_views/theme_one/application_mailer/multipart_theme_only.rhtml new file mode 100644 index 000000000..d6423fbb4 --- /dev/null +++ b/spec/fixtures/theme_views/theme_one/application_mailer/multipart_theme_only.rhtml @@ -0,0 +1 @@ +Theme multipart
\ No newline at end of file diff --git a/spec/fixtures/theme_views/theme_one/application_mailer/simple.rhtml b/spec/fixtures/theme_views/theme_one/application_mailer/simple.rhtml new file mode 100644 index 000000000..ad43e0c87 --- /dev/null +++ b/spec/fixtures/theme_views/theme_one/application_mailer/simple.rhtml @@ -0,0 +1 @@ +Theme simple
\ No newline at end of file diff --git a/spec/fixtures/theme_views/theme_one/application_mailer/theme_only.rhtml b/spec/fixtures/theme_views/theme_one/application_mailer/theme_only.rhtml new file mode 100644 index 000000000..865445815 --- /dev/null +++ b/spec/fixtures/theme_views/theme_one/application_mailer/theme_only.rhtml @@ -0,0 +1 @@ +Theme only
\ No newline at end of file diff --git a/spec/models/application_mailer_spec.rb b/spec/models/application_mailer_spec.rb index 12527c6e8..a90f79c01 100644 --- a/spec/models/application_mailer_spec.rb +++ b/spec/models/application_mailer_spec.rb @@ -1,8 +1,160 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') -describe ApplicationMailer, " when blah" do - before do + +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') + lambda{ ApplicationMailer.create_neither() }.should raise_error('Missing template application_mailer/neither.erb in view path spec/fixtures/theme_views/theme_one:spec/fixtures/theme_views/core') + 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') + lambda{ ApplicationMailer.create_neither() }.should raise_error('Missing template application_mailer/neither.erb in view path spec/fixtures/theme_views/core:spec/fixtures/theme_views/theme_one') + 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 + diff --git a/spec/models/public_body_spec.rb b/spec/models/public_body_spec.rb index 011824190..c2e0a6353 100644 --- a/spec/models/public_body_spec.rb +++ b/spec/models/public_body_spec.rb @@ -453,3 +453,11 @@ describe PublicBody do end end + +describe PublicBody, " when override all public body request emails set" do + it "should return the overridden request email" do + MySociety::Config.should_receive(:get).with("OVERRIDE_ALL_PUBLIC_BODY_REQUEST_EMAILS", "").twice.and_return("catch_all_test_email@foo.com") + @geraldine = public_bodies(:geraldine_public_body) + @geraldine.request_email.should == "catch_all_test_email@foo.com" + end +end diff --git a/spec/models/request_mailer_spec.rb b/spec/models/request_mailer_spec.rb index 269208405..84804d4ca 100644 --- a/spec/models/request_mailer_spec.rb +++ b/spec/models/request_mailer_spec.rb @@ -97,10 +97,12 @@ describe RequestMailer, " when receiving incoming mail" do # check attached bounce is good copy of incoming-request-plain.email mail.multipart?.should == true mail.parts.size.should == 2 + message_part = mail.parts[0].to_s bounced_mail = TMail::Mail.parse(mail.parts[1].body) bounced_mail.to.should == [ ir.incoming_email ] bounced_mail.from.should == [ 'geraldinequango@localhost' ] - bounced_mail.body.include?("That's so totally a rubbish question") + bounced_mail.body.include?("That's so totally a rubbish question").should be_true + message_part.include?("marked to no longer receive responses").should be_true deliveries.clear end @@ -324,3 +326,4 @@ describe RequestMailer, 'when sending mail when someone has updated an old uncla end end + diff --git a/spec/views/public_body/show.rhtml_spec.rb b/spec/views/public_body/show.rhtml_spec.rb index 1d21f80c4..a42516d72 100644 --- a/spec/views/public_body/show.rhtml_spec.rb +++ b/spec/views/public_body/show.rhtml_spec.rb @@ -12,6 +12,7 @@ describe "when viewing a body" do :info_requests => [1, 2, 3, 4], # out of sync with Xapian :publication_scheme => '', :calculated_home_page => '') + @pb.stub!(:override_request_email).and_return(nil) @pb.stub!(:is_requestable?).and_return(true) @pb.stub!(:has_notes?).and_return(false) @pb.stub!(:has_tag?).and_return(false) |