diff options
author | Louise Crow <louise.crow@gmail.com> | 2012-12-11 14:07:54 +0000 |
---|---|---|
committer | Louise Crow <louise.crow@gmail.com> | 2012-12-11 14:23:16 +0000 |
commit | e898190fe61a4369ee83e94a24327ff437435b07 (patch) | |
tree | 42f1fe6ee90dfe0bf3f9c7d36a80490b63056978 | |
parent | 7cfa3956fd373db35948ef33cde652b30229f9ad (diff) |
Wrap specs on the extraction of RFC-822 headers in code that sets the ENV timezone. TMail renders headers using localtime, which is not ideal, but we're migrating away from it anyway, so I'm not sure it's worth delving into the internals of TMail to fix it.
-rw-r--r-- | spec/lib/mail_handler/mail_handler_spec.rb | 24 | ||||
-rw-r--r-- | spec/lib/timezone_fixes_spec.rb | 16 | ||||
-rw-r--r-- | spec/models/incoming_message_spec.rb | 56 | ||||
-rw-r--r-- | spec/spec_helper.rb | 15 |
4 files changed, 61 insertions, 50 deletions
diff --git a/spec/lib/mail_handler/mail_handler_spec.rb b/spec/lib/mail_handler/mail_handler_spec.rb index ae65210f2..48c32e2bc 100644 --- a/spec/lib/mail_handler/mail_handler_spec.rb +++ b/spec/lib/mail_handler/mail_handler_spec.rb @@ -283,16 +283,20 @@ describe 'when getting attachment attributes' do end it 'should expand a mail attached as text' do - mail = get_fixture_mail('rfc822-attachment.email') - attributes = MailHandler.get_attachment_attributes(mail) - attributes.size.should == 2 - rfc_attachment = attributes[1] - rfc_attachment[:within_rfc822_subject].should == 'Freedom of Information request' - headers = ['Date: Thu, 13 Mar 2008 16:57:33 +0000', - 'Subject: Freedom of Information request', - 'From: An FOI Officer <foi.officer@example.com>', - 'To: request-bounce-xx-xxxxx@whatdotheyno.com'] - rfc_attachment[:body].should == "#{headers.join("\n")}\n\nsome example text" + # Note that this spec will only pass using Tmail in the timezone set as datetime headers + # are rendered out in the local time - using the Mail gem this is not necessary + with_env_tz('London') do + mail = get_fixture_mail('rfc822-attachment.email') + attributes = MailHandler.get_attachment_attributes(mail) + attributes.size.should == 2 + rfc_attachment = attributes[1] + rfc_attachment[:within_rfc822_subject].should == 'Freedom of Information request' + headers = ['Date: Thu, 13 Mar 2008 16:57:33 +0000', + 'Subject: Freedom of Information request', + 'From: An FOI Officer <foi.officer@example.com>', + 'To: request-bounce-xx-xxxxx@whatdotheyno.com'] + rfc_attachment[:body].should == "#{headers.join("\n")}\n\nsome example text" + end end it 'should handle a mail which causes Tmail to generate a blank header value' do diff --git a/spec/lib/timezone_fixes_spec.rb b/spec/lib/timezone_fixes_spec.rb index a2bea5f64..525bd7561 100644 --- a/spec/lib/timezone_fixes_spec.rb +++ b/spec/lib/timezone_fixes_spec.rb @@ -92,22 +92,6 @@ describe "when doing things with timezones" do end end - - protected - - def with_env_tz(new_tz = 'US/Eastern') - old_tz, ENV['TZ'] = ENV['TZ'], new_tz - yield - ensure - old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ') - end - - def with_active_record_default_timezone(zone) - old_zone, ActiveRecord::Base.default_timezone = ActiveRecord::Base.default_timezone, zone - yield - ensure - ActiveRecord::Base.default_timezone = old_zone - end end diff --git a/spec/models/incoming_message_spec.rb b/spec/models/incoming_message_spec.rb index 70b323e9f..6fc0ff3cc 100644 --- a/spec/models/incoming_message_spec.rb +++ b/spec/models/incoming_message_spec.rb @@ -429,21 +429,25 @@ end describe IncomingMessage, "when messages are attached to messages" do it 'should expand an RFC822 attachment' do - mail_body = load_file_fixture('rfc822-attachment.email') - mail = MailHandler.mail_from_raw_email(mail_body) - - im = incoming_messages(:useless_incoming_message) - im.stub!(:mail).and_return(mail) - - attachments = im.get_attachments_for_display - attachments.size.should == 1 - attachment = attachments.first - - attachment.content_type.should == 'text/plain' - attachment.filename.should == "Freedom of Information request.txt" - attachment.charset.should == "utf-8" - attachment.within_rfc822_subject.should == "Freedom of Information request" - attachment.hexdigest.should == 'f10fe56e4f2287685a58b71329f09639' + # Note that this spec will only pass using Tmail in the timezone set as datetime headers + # are rendered out in the local time - using the Mail gem this is not necessary + with_env_tz('London') do + mail_body = load_file_fixture('rfc822-attachment.email') + mail = MailHandler.mail_from_raw_email(mail_body) + + im = incoming_messages(:useless_incoming_message) + im.stub!(:mail).and_return(mail) + + attachments = im.get_attachments_for_display + attachments.size.should == 1 + attachment = attachments.first + + attachment.content_type.should == 'text/plain' + attachment.filename.should == "Freedom of Information request.txt" + attachment.charset.should == "utf-8" + attachment.within_rfc822_subject.should == "Freedom of Information request" + attachment.hexdigest.should == 'f10fe56e4f2287685a58b71329f09639' + end end it "should flatten all the attachments out" do @@ -463,15 +467,19 @@ describe IncomingMessage, "when messages are attached to messages" do end it 'should add headers to attached plain text message bodies' do - mail_body = load_file_fixture('incoming-request-attachment-headers.email') - mail = MailHandler.mail_from_raw_email(mail_body) - - im = incoming_messages(:useless_incoming_message) - im.stub!(:mail).and_return(mail) - - attachments = im.get_attachments_for_display - attachments.size.should == 2 - attachments[0].body.should match('Date: Fri, 23 May 2008') + # Note that this spec will only pass using Tmail in the timezone set as datetime headers + # are rendered out in the local time - using the Mail gem this is not necessary + with_env_tz('London') do + mail_body = load_file_fixture('incoming-request-attachment-headers.email') + mail = MailHandler.mail_from_raw_email(mail_body) + + im = incoming_messages(:useless_incoming_message) + im.stub!(:mail).and_return(mail) + + attachments = im.get_attachments_for_display + attachments.size.should == 2 + attachments[0].body.should match('Date: Fri, 23 May 2008') + end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 4cf376624..561a75da6 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -275,3 +275,18 @@ class ApplicationController < ActionController::Base @popup_banner = nil end end + + +def with_env_tz(new_tz = 'US/Eastern') + old_tz, ENV['TZ'] = ENV['TZ'], new_tz + yield +ensure + old_tz ? ENV['TZ'] = old_tz : ENV.delete('TZ') +end + +def with_active_record_default_timezone(zone) + old_zone, ActiveRecord::Base.default_timezone = ActiveRecord::Base.default_timezone, zone + yield +ensure + ActiveRecord::Base.default_timezone = old_zone +end |