class NumericalityValidationTest

Constants

BIGDECIMAL
BIGDECIMAL_STRINGS
BLANK
FLOATS
FLOAT_STRINGS
INFINITY
INTEGERS
INTEGER_STRINGS
JUNK
NIL

Public Instance Methods

teardown() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 12
def teardown
  Topic.clear_validators!
end
test_default_validates_numericality_of() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 27
def test_default_validates_numericality_of
  Topic.validates_numericality_of :approved
  invalid!(NIL + BLANK + JUNK)
  valid!(FLOATS + INTEGERS + BIGDECIMAL + INFINITY)
end
test_validates_numericality_of_for_ruby_class() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 250
def test_validates_numericality_of_for_ruby_class
  Person.validates_numericality_of :karma, allow_nil: false

  p = Person.new
  p.karma = "Pix"
  assert p.invalid?

  assert_equal ["is not a number"], p.errors[:karma]

  p.karma = "1234"
  assert p.valid?
ensure
  Person.clear_validators!
end
test_validates_numericality_of_with_blank_allowed() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 40
def test_validates_numericality_of_with_blank_allowed
  Topic.validates_numericality_of :approved, allow_blank: true

  invalid!(JUNK)
  valid!(NIL + BLANK + FLOATS + INTEGERS + BIGDECIMAL + INFINITY)
end
test_validates_numericality_of_with_integer_only() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 47
def test_validates_numericality_of_with_integer_only
  Topic.validates_numericality_of :approved, only_integer: true

  invalid!(NIL + BLANK + JUNK + FLOATS + BIGDECIMAL + INFINITY)
  valid!(INTEGERS)
end
test_validates_numericality_of_with_integer_only_and_nil_allowed() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 54
def test_validates_numericality_of_with_integer_only_and_nil_allowed
  Topic.validates_numericality_of :approved, only_integer: true, allow_nil: true

  invalid!(JUNK + BLANK + FLOATS + BIGDECIMAL + INFINITY)
  valid!(NIL + INTEGERS)
end
test_validates_numericality_of_with_integer_only_and_proc_as_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 68
def test_validates_numericality_of_with_integer_only_and_proc_as_value
  Topic.send(:define_method, :allow_only_integers?, lambda { false })
  Topic.validates_numericality_of :approved, only_integer: Proc.new(&:allow_only_integers?)

  invalid!(NIL + BLANK + JUNK)
  valid!(FLOATS + INTEGERS + BIGDECIMAL + INFINITY)
end
test_validates_numericality_of_with_integer_only_and_symbol_as_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 61
def test_validates_numericality_of_with_integer_only_and_symbol_as_value
  Topic.validates_numericality_of :approved, only_integer: :condition_is_true_but_its_not

  invalid!(NIL + BLANK + JUNK)
  valid!(FLOATS + INTEGERS + BIGDECIMAL + INFINITY)
end
test_validates_numericality_of_with_nil_allowed() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 33
def test_validates_numericality_of_with_nil_allowed
  Topic.validates_numericality_of :approved, allow_nil: true

  invalid!(JUNK + BLANK)
  valid!(NIL + FLOATS + INTEGERS + BIGDECIMAL + INFINITY)
end
test_validates_numericality_with_equal_to() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 118
def test_validates_numericality_with_equal_to
  Topic.validates_numericality_of :approved, equal_to: 10

  invalid!([-10, 11] + INFINITY, "must be equal to 10")
  valid!([10])
end
test_validates_numericality_with_equal_to_using_differing_numeric_types() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 125
def test_validates_numericality_with_equal_to_using_differing_numeric_types
  Topic.validates_numericality_of :approved, equal_to: BigDecimal.new("97.18")

  invalid!([-97.18], "must be equal to 97.18")
  valid!([BigDecimal.new("97.18")])
end
test_validates_numericality_with_equal_to_using_string_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 132
def test_validates_numericality_with_equal_to_using_string_value
  Topic.validates_numericality_of :approved, equal_to: 10

  invalid!(["-10", "9", "9.9", "10.1", "11"], "must be equal to 10")
  valid!(["10"])
end
test_validates_numericality_with_even() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 188
def test_validates_numericality_with_even
  Topic.validates_numericality_of :approved, even: true

  invalid!([-1, 1], "must be even")
  valid!([-2, 2])
end
test_validates_numericality_with_exponent_number() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 265
def test_validates_numericality_with_exponent_number
  base = 10_000_000_000_000_000
  Topic.validates_numericality_of :approved, less_than_or_equal_to: base
  topic = Topic.new
  topic.approved = (base + 1).to_s

  assert topic.invalid?
end
test_validates_numericality_with_greater_than() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 76
def test_validates_numericality_with_greater_than
  Topic.validates_numericality_of :approved, greater_than: 10

  invalid!([-10, 10], "must be greater than 10")
  valid!([11])
end
test_validates_numericality_with_greater_than_less_than_and_even() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 195
def test_validates_numericality_with_greater_than_less_than_and_even
  Topic.validates_numericality_of :approved, greater_than: 1, less_than: 4, even: true

  invalid!([1, 3, 4])
  valid!([2])
end
test_validates_numericality_with_greater_than_or_equal() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 97
def test_validates_numericality_with_greater_than_or_equal
  Topic.validates_numericality_of :approved, greater_than_or_equal_to: 10

  invalid!([-9, 9], "must be greater than or equal to 10")
  valid!([10])
end
test_validates_numericality_with_greater_than_or_equal_using_differing_numeric_types() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 104
def test_validates_numericality_with_greater_than_or_equal_using_differing_numeric_types
  Topic.validates_numericality_of :approved, greater_than_or_equal_to: BigDecimal.new("97.18")

  invalid!([-97.18, 97.17, 97, BigDecimal.new("97.17"), BigDecimal.new("-97.18")], "must be greater than or equal to 97.18")
  valid!([97.18, 98, BigDecimal.new("97.19")])
end
test_validates_numericality_with_greater_than_or_equal_using_string_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 111
def test_validates_numericality_with_greater_than_or_equal_using_string_value
  Topic.validates_numericality_of :approved, greater_than_or_equal_to: 10

  invalid!(["-10", "9", "9.9"], "must be greater than or equal to 10")
  valid!(["10", "10.1", "11"])
end
test_validates_numericality_with_greater_than_using_differing_numeric_types() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 83
def test_validates_numericality_with_greater_than_using_differing_numeric_types
  Topic.validates_numericality_of :approved, greater_than: BigDecimal.new("97.18")

  invalid!([-97.18, BigDecimal.new("97.18"), BigDecimal("-97.18")], "must be greater than 97.18")
  valid!([97.19, 98, BigDecimal.new("98"), BigDecimal.new("97.19")])
end
test_validates_numericality_with_greater_than_using_string_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 90
def test_validates_numericality_with_greater_than_using_string_value
  Topic.validates_numericality_of :approved, greater_than: 10

  invalid!(["-10", "9", "9.9", "10"], "must be greater than 10")
  valid!(["10.1", "11"])
end
test_validates_numericality_with_invalid_args() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 274
def test_validates_numericality_with_invalid_args
  assert_raise(ArgumentError) { Topic.validates_numericality_of :approved, greater_than_or_equal_to: "foo" }
  assert_raise(ArgumentError) { Topic.validates_numericality_of :approved, less_than_or_equal_to: "foo" }
  assert_raise(ArgumentError) { Topic.validates_numericality_of :approved, greater_than: "foo" }
  assert_raise(ArgumentError) { Topic.validates_numericality_of :approved, less_than: "foo" }
  assert_raise(ArgumentError) { Topic.validates_numericality_of :approved, equal_to: "foo" }
end
test_validates_numericality_with_less_than() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 139
def test_validates_numericality_with_less_than
  Topic.validates_numericality_of :approved, less_than: 10

  invalid!([10], "must be less than 10")
  valid!([-9, 9])
end
test_validates_numericality_with_less_than_or_equal_to() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 160
def test_validates_numericality_with_less_than_or_equal_to
  Topic.validates_numericality_of :approved, less_than_or_equal_to: 10

  invalid!([11], "must be less than or equal to 10")
  valid!([-10, 10])
end
test_validates_numericality_with_less_than_or_equal_to_using_differing_numeric_types() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 167
def test_validates_numericality_with_less_than_or_equal_to_using_differing_numeric_types
  Topic.validates_numericality_of :approved, less_than_or_equal_to: BigDecimal.new("97.18")

  invalid!([97.19, 98], "must be less than or equal to 97.18")
  valid!([-97.18, BigDecimal.new("-97.18"), BigDecimal.new("97.18")])
end
test_validates_numericality_with_less_than_or_equal_using_string_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 174
def test_validates_numericality_with_less_than_or_equal_using_string_value
  Topic.validates_numericality_of :approved, less_than_or_equal_to: 10

  invalid!(["10.1", "11"], "must be less than or equal to 10")
  valid!(["-10", "9", "9.9", "10"])
end
test_validates_numericality_with_less_than_using_differing_numeric_types() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 146
def test_validates_numericality_with_less_than_using_differing_numeric_types
  Topic.validates_numericality_of :approved, less_than: BigDecimal.new("97.18")

  invalid!([97.18, BigDecimal.new("97.18")], "must be less than 97.18")
  valid!([-97.0, 97.0, -97, 97, BigDecimal.new("-97"), BigDecimal.new("97")])
end
test_validates_numericality_with_less_than_using_string_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 153
def test_validates_numericality_with_less_than_using_string_value
  Topic.validates_numericality_of :approved, less_than: 10

  invalid!(["10", "10.1", "11"], "must be less than 10")
  valid!(["-10", "9", "9.9"])
end
test_validates_numericality_with_numeric_message() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 236
def test_validates_numericality_with_numeric_message
  Topic.validates_numericality_of :approved, less_than: 4, message: "smaller than %{count}"
  topic = Topic.new("title" => "numeric test", "approved" => 10)

  assert !topic.valid?
  assert_equal ["smaller than 4"], topic.errors[:approved]

  Topic.validates_numericality_of :approved, greater_than: 4, message: "greater than %{count}"
  topic = Topic.new("title" => "numeric test", "approved" => 1)

  assert !topic.valid?
  assert_equal ["greater than 4"], topic.errors[:approved]
end
test_validates_numericality_with_odd() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 181
def test_validates_numericality_with_odd
  Topic.validates_numericality_of :approved, odd: true

  invalid!([-2, 2], "must be odd")
  valid!([-1, 1])
end
test_validates_numericality_with_other_than() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 202
def test_validates_numericality_with_other_than
  Topic.validates_numericality_of :approved, other_than: 0

  invalid!([0, 0.0])
  valid!([-1, 42])
end
test_validates_numericality_with_other_than_using_string_value() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 209
def test_validates_numericality_with_other_than_using_string_value
  Topic.validates_numericality_of :approved, other_than: 0

  invalid!(["0", "0.0"])
  valid!(["-1", "1.1", "42"])
end
test_validates_numericality_with_proc() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 216
def test_validates_numericality_with_proc
  Topic.send(:define_method, :min_approved, lambda { 5 })
  Topic.validates_numericality_of :approved, greater_than_or_equal_to: Proc.new(&:min_approved)

  invalid!([3, 4])
  valid!([5, 6])
ensure
  Topic.send(:remove_method, :min_approved)
end
test_validates_numericality_with_symbol() click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 226
def test_validates_numericality_with_symbol
  Topic.send(:define_method, :max_approved, lambda { 5 })
  Topic.validates_numericality_of :approved, less_than_or_equal_to: :max_approved

  invalid!([6])
  valid!([4, 5])
ensure
  Topic.send(:remove_method, :max_approved)
end

Private Instance Methods

invalid!(values, error = nil) click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 284
def invalid!(values, error = nil)
  with_each_topic_approved_value(values) do |topic, value|
    assert topic.invalid?, "#{value.inspect} not rejected as a number"
    assert topic.errors[:approved].any?, "FAILED for #{value.inspect}"
    assert_equal error, topic.errors[:approved].first if error
  end
end
valid!(values) click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 292
def valid!(values)
  with_each_topic_approved_value(values) do |topic, value|
    assert topic.valid?, "#{value.inspect} not accepted as a number with validation error: #{topic.errors[:approved].first}"
  end
end
with_each_topic_approved_value(values) { |topic, value| ... } click to toggle source
# File activemodel/test/cases/validations/numericality_validation_test.rb, line 298
def with_each_topic_approved_value(values)
  topic = Topic.new(title: "numeric test", content: "whatever")
  values.each do |value|
    topic.approved = value
    yield topic, value
  end
end