-
Notifications
You must be signed in to change notification settings - Fork 21.4k
/
numericality_validation_test.rb
121 lines (87 loc) · 3.04 KB
/
numericality_validation_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# frozen_string_literal: true
require "cases/helper"
require "models/numeric_data"
class NumericalityValidationTest < ActiveRecord::TestCase
def setup
@model_class = NumericData.dup
end
attr_reader :model_class
def test_column_with_precision
model_class.validates_numericality_of(
:unscaled_bank_balance, equal_to: 10_000_000.12
)
subject = model_class.new(unscaled_bank_balance: 10_000_000.121)
assert_predicate subject, :valid?
end
def test_column_with_precision_higher_than_double_fig
model_class.validates_numericality_of(
:decimal_number_big_precision, equal_to: 10_000_000.3
)
subject = model_class.new(decimal_number_big_precision: 10_000_000.3)
assert_predicate subject, :valid?
end
def test_column_with_scale
model_class.validates_numericality_of(
:bank_balance, greater_than: 10
)
subject = model_class.new(bank_balance: 10.001)
assert_not_predicate subject, :valid?
end
def test_no_column_precision
model_class.validates_numericality_of(
:decimal_number, equal_to: 1_000_000_000.123454
)
subject = model_class.new(decimal_number: 1_000_000_000.1234545)
assert_predicate subject, :valid?
end
def test_virtual_attribute
model_class.attribute(:virtual_decimal_number, :decimal)
model_class.validates_numericality_of(
:virtual_decimal_number, equal_to: 1_000_000_000.123454
)
subject = model_class.new(virtual_decimal_number: 1_000_000_000.1234545)
assert_predicate subject, :valid?
end
def test_on_abstract_class
abstract_class = Class.new(ActiveRecord::Base) do
self.abstract_class = true
validates(:bank_balance, numericality: { equal_to: 10_000_000.12 })
end
klass = Class.new(abstract_class) do
def self.table_name
"numeric_data"
end
def self.name
"MyClass"
end
end
subject = klass.new(bank_balance: 10_000_000.12)
assert_predicate(subject, :valid?)
end
def test_virtual_attribute_with_precision
model_class.attribute(:virtual_decimal_number, :decimal, precision: 5)
model_class.validates_numericality_of(
:virtual_decimal_number, equal_to: 123.45
)
subject = model_class.new(virtual_decimal_number: 123.455)
assert_predicate subject, :valid?
end
def test_virtual_attribute_with_scale
model_class.attribute(:virtual_decimal_number, :decimal, scale: 2)
model_class.validates_numericality_of(
:virtual_decimal_number, greater_than: 1
)
subject = model_class.new(virtual_decimal_number: 1.001)
assert_not_predicate subject, :valid?
end
def test_aliased_attribute
model_class.validates_numericality_of(:new_bank_balance, greater_or_equal_than: 0)
subject = model_class.new(new_bank_balance: "abcd")
assert_not_predicate subject, :valid?
end
def test_allow_nil_works_for_casted_value
model_class.validates_numericality_of(:bank_balance, greater_than: 0, allow_nil: true)
subject = model_class.new(bank_balance: "")
assert_predicate subject, :valid?
end
end