aboutsummaryrefslogtreecommitdiffstats
path: root/spec/models/raw_email_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/raw_email_spec.rb')
-rw-r--r--spec/models/raw_email_spec.rb71
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
-
+