diff options
| author | Louise Crow <louise.crow@gmail.com> | 2015-05-28 11:57:18 +0100 | 
|---|---|---|
| committer | Louise Crow <louise.crow@gmail.com> | 2015-05-28 11:57:18 +0100 | 
| commit | c1947ec633e29abd65f1e3737707e2a7f79b5fc8 (patch) | |
| tree | bcee9e60dba9b7834c910a11719404eb4d4d7e03 /spec/models/raw_email_spec.rb | |
| parent | 005ca27e756ed7448c114de9ba0e9545352133ac (diff) | |
| parent | c0a76dd0b1816f9a324e6187795c18abf36eeed5 (diff) | |
Merge branch 'handle-unparsed-email-as-binary' into hotfix/0.21.0.33
Diffstat (limited to 'spec/models/raw_email_spec.rb')
| -rw-r--r-- | spec/models/raw_email_spec.rb | 71 | 
1 files changed, 43 insertions, 28 deletions
diff --git a/spec/models/raw_email_spec.rb b/spec/models/raw_email_spec.rb index aa82b0bc3..8e0d3b457 100644 --- a/spec/models/raw_email_spec.rb +++ b/spec/models/raw_email_spec.rb @@ -1,3 +1,4 @@ +# -*- encoding : utf-8 -*-  # == Schema Information  #  # Table name: raw_emails @@ -7,37 +8,51 @@  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') -describe User, "manipulating a raw email" do  -    before do -        @raw_email = RawEmail.new -        incoming_message = mock_model(IncomingMessage) -        info_request = mock_model(InfoRequest) -        incoming_message.stub!(:info_request).and_return(info_request) -        @raw_email.stub!(:incoming_message).and_return(incoming_message) +describe RawEmail do + +    def roundtrip_data(raw_email, data) +        raw_email.data = data +        raw_email.save! +        raw_email.reload +        raw_email.data      end -    it 'putting data in comes back out' do  -        @raw_email.data = "Hello, world!" -        @raw_email.save! -        @raw_email.reload -        @raw_email.data.should == "Hello, world!" +    describe :data do + +        it 'roundtrips data unchanged' do +            raw_email = FactoryGirl.create(:incoming_message).raw_email +            data = roundtrip_data(raw_email, "Hello, world!") +            data.should == "Hello, world!" +        end + +        it 'returns an unchanged binary string with a valid encoding if the data is non-ascii and non-utf-8' do +            raw_email = FactoryGirl.create(:incoming_message).raw_email +            data = roundtrip_data(raw_email, "\xA0") + +            if data.respond_to?(:encoding) +                data.encoding.to_s.should == 'ASCII-8BIT' +                data.valid_encoding?.should be_true +                data = data.force_encoding('UTF-8') +            end +            data.should == "\xA0" +        end +      end -    # TODO: this test fails, hopefully will be fixed in later Rails. -    # Doesn't matter too much for us for storing raw_emails, it would seem, -    # but keep an eye out. - -    # This is testing a bug in Rails PostgreSQL code -    # http://blog.aradine.com/2009/09/rubys-marshal-and-activerecord-and.html -    # https://rails.lighthouseapp.com/projects/8994/tickets/1063-binary-data-broken-with-postgresql-adapter -#    it 'putting data in comes back out even if it has a backslash in it' do  -#        @raw_email.data = "This \\ that" -#        @raw_email.save! -#        @raw_email.reload -#        $stderr.puts @raw_email.data -#        $stderr.puts "This \\ that" -#        @raw_email.data.should == "This \\ that" -#    end +    describe :data_as_text do + +        it 'returns a utf-8 string with a valid encoding if the data is non-ascii and non-utf8' do +            raw_email = FactoryGirl.create(:incoming_message).raw_email +            roundtrip_data(raw_email, "\xA0ccc") +            data_as_text = raw_email.data_as_text +            data_as_text.should == "ccc" +            if data_as_text.respond_to?(:encoding) +                data_as_text.encoding.to_s.should == 'UTF-8' +                data_as_text.valid_encoding?.should be_true +            end +        end + +    end  end -  +  | 
