diff options
author | Sean Griffin <sean@thoughtbot.com> | 2014-06-24 06:55:24 -0600 |
---|---|---|
committer | Sean Griffin <sean@thoughtbot.com> | 2014-06-24 08:32:30 -0600 |
commit | 50fa366783c2403d909a6fa5b7fc6d4c7fdacf7f (patch) | |
tree | 20c9ec3ac39490d6a56c44013bfe92a985c193d0 /activerecord/test | |
parent | 9ac1ce11ad9ec22157d2e542437c5c5cccaf58fe (diff) | |
download | rails-50fa366783c2403d909a6fa5b7fc6d4c7fdacf7f.tar.gz rails-50fa366783c2403d909a6fa5b7fc6d4c7fdacf7f.tar.bz2 rails-50fa366783c2403d909a6fa5b7fc6d4c7fdacf7f.zip |
Always assume strings with non-numeric characters change numeric types
We previously only did this if the old value was zero, to make sure
numericality validations run and failed if the user gave 'wibble' as the
value, which would be type cast to 0. However, numericality validations
will fail if there are any non-numeric characters in the string, so 5 ->
'5wibble' should also be marked as changed.
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/types_test.rb | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/activerecord/test/cases/types_test.rb b/activerecord/test/cases/types_test.rb index 731f8cfba3..961aae88cb 100644 --- a/activerecord/test/cases/types_test.rb +++ b/activerecord/test/cases/types_test.rb @@ -79,11 +79,29 @@ module ActiveRecord assert_nil type.type_cast_from_user(1.0/0.0) end + def test_changing_integers + type = Type::Integer.new + + assert type.changed?(5, 5, '5wibble') + assert_not type.changed?(5, 5, '5') + assert_not type.changed?(5, 5, '5.0') + assert_not type.changed?(nil, nil, nil) + end + def test_type_cast_float type = Type::Float.new assert_equal 1.0, type.type_cast_from_user("1") end + def test_changing_float + type = Type::Float.new + + assert type.changed?(5.0, 5.0, '5wibble') + assert_not type.changed?(5.0, 5.0, '5') + assert_not type.changed?(5.0, 5.0, '5.0') + assert_not type.changed?(nil, nil, nil) + end + def test_type_cast_decimal type = Type::Decimal.new assert_equal BigDecimal.new("0"), type.type_cast_from_user(BigDecimal.new("0")) |