require File.dirname(__FILE__) + '/../test_helper'
-class MessageTest < Test::Unit::TestCase
- fixtures :messages, :users
+class MessageTest < ActiveSupport::TestCase
+ api_fixtures
+ fixtures :messages
EURO = "\xe2\x82\xac" #euro symbol
def test_check_empty_message_fails
message = Message.new
assert !message.valid?
- assert message.errors.invalid?(:title)
- assert message.errors.invalid?(:body)
- assert message.errors.invalid?(:sent_on)
+ assert message.errors[:title].any?
+ assert message.errors[:body].any?
+ assert message.errors[:sent_on].any?
assert true, message.message_read
end
"\xe1\x82\x4a", # three-byte identifier, contination and (incorrectly) plain ASCII
]
invalid_sequences.each do |char|
- assert_raise(ActiveRecord::RecordInvalid) { make_message(char, 1).save! }
+ begin
+ # create a message and save to the database
+ msg = make_message(char, 1)
+ # if the save throws, thats fine and the test should pass, as we're
+ # only testing invalid sequences anyway.
+ msg.save!
+
+ # get the saved message back and check that it is identical - i.e:
+ # its OK to accept invalid UTF-8 as long as we return it unmodified.
+ db_msg = msg.class.find(msg.id)
+ assert_equal char, db_msg.title, "Database silently truncated message title"
+
+ rescue ActiveRecord::RecordInvalid
+ # because we only test invalid sequences it is OK to barf on them
+ end
end
end