detox 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +19 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +40 -0
- data/Rakefile +11 -0
- data/detox.gemspec +27 -0
- data/gemfiles/activemodel_3_2_x.gemfile +5 -0
- data/gemfiles/activemodel_4_0_x.gemfile +5 -0
- data/lib/active_model/validations/absence.rb +19 -0
- data/lib/detox.rb +11 -0
- data/lib/detox/array_validity.rb +23 -0
- data/lib/detox/locales/en.yml +21 -0
- data/lib/detox/locales/ja.yml +21 -0
- data/lib/detox/validations/all.rb +41 -0
- data/lib/detox/validations/any.rb +57 -0
- data/lib/detox/validations/ordering.rb +34 -0
- data/lib/detox/validations/possession.rb +30 -0
- data/lib/detox/validity_broker.rb +55 -0
- data/lib/detox/version.rb +4 -0
- data/spec/detox/array_validity_spec.rb +214 -0
- data/spec/detox/validations/all_absence_spec.rb +147 -0
- data/spec/detox/validations/all_acceptance_spec.rb +352 -0
- data/spec/detox/validations/all_exclusion_spec.rb +137 -0
- data/spec/detox/validations/all_format_spec.rb +351 -0
- data/spec/detox/validations/all_inclusion_spec.rb +352 -0
- data/spec/detox/validations/all_length_spec.rb +388 -0
- data/spec/detox/validations/all_numericality_spec.rb +369 -0
- data/spec/detox/validations/all_presence_spec.rb +159 -0
- data/spec/detox/validations/any_absence_spec.rb +597 -0
- data/spec/detox/validations/any_acceptance_spec.rb +597 -0
- data/spec/detox/validations/any_exclusion_spec.rb +597 -0
- data/spec/detox/validations/any_format_spec.rb +597 -0
- data/spec/detox/validations/any_inclusion_spec.rb +597 -0
- data/spec/detox/validations/any_length_spec.rb +597 -0
- data/spec/detox/validations/any_numericality_spec.rb +609 -0
- data/spec/detox/validations/any_presence_spec.rb +596 -0
- data/spec/detox/validations/any_validator_check_validity_spec.rb +126 -0
- data/spec/detox/validations/ordering_spec.rb +452 -0
- data/spec/detox/validations/possession_spec.rb +263 -0
- data/spec/detox/validity_broker_spec.rb +126 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/test_class/all_absence_test.rb +14 -0
- data/spec/test_class/all_acceptance_test.rb +27 -0
- data/spec/test_class/all_exclusion_test.rb +15 -0
- data/spec/test_class/all_format_test.rb +26 -0
- data/spec/test_class/all_inclusion_test.rb +27 -0
- data/spec/test_class/all_length_test.rb +28 -0
- data/spec/test_class/all_numericality_test.rb +33 -0
- data/spec/test_class/all_presence_test.rb +14 -0
- data/spec/test_class/any_absence_test.rb +33 -0
- data/spec/test_class/any_acceptance_test.rb +34 -0
- data/spec/test_class/any_exclusion_test.rb +34 -0
- data/spec/test_class/any_format_test.rb +34 -0
- data/spec/test_class/any_inclusion_test.rb +33 -0
- data/spec/test_class/any_length_test.rb +33 -0
- data/spec/test_class/any_numericality_test.rb +35 -0
- data/spec/test_class/any_presence_test.rb +33 -0
- data/spec/test_class/array_validity_test.rb +6 -0
- data/spec/test_class/model_base.rb +11 -0
- data/spec/test_class/ordering_test.rb +33 -0
- data/spec/test_class/possession_test.rb +22 -0
- metadata +219 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "test_class/model_base"
|
4
|
+
|
5
|
+
describe "Any*Validator#check_validity!" do
|
6
|
+
context "when no option" do
|
7
|
+
it "not raise Error" do
|
8
|
+
expect do
|
9
|
+
class AnyTestWhenNoOption < ModelBase
|
10
|
+
attr_accessor :values
|
11
|
+
validates :values, :any_presence => true
|
12
|
+
end
|
13
|
+
end.not_to raise_error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
context "when :min_valid_count is positive integer and without :max_valid_count" do
|
17
|
+
it "not raise Error" do
|
18
|
+
expect do
|
19
|
+
class AnyTestWhenMinValidCountIsPositiveIntegerAndWithoutMaxValidCount < ModelBase
|
20
|
+
attr_accessor :values
|
21
|
+
validates :values, :any_presence => { :min_valid_count => 2 }
|
22
|
+
end
|
23
|
+
end.not_to raise_error
|
24
|
+
end
|
25
|
+
end
|
26
|
+
context "when :min_valid_count is not integer" do
|
27
|
+
it "raise ArgumentError(:min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil)" do
|
28
|
+
expect do
|
29
|
+
class AnyTestWhenMinValidCountIsNotInteger < ModelBase
|
30
|
+
attr_accessor :values
|
31
|
+
validates :values, :any_presence => { :min_valid_count => "1" }
|
32
|
+
end
|
33
|
+
end.to raise_error(ArgumentError, ":min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
context "when :min_valid_count is negative integer" do
|
37
|
+
it "raise ArgumentError(:min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil)" do
|
38
|
+
expect do
|
39
|
+
class AnyTestWhenMinValidCountIsNegativeInteger < ModelBase
|
40
|
+
attr_accessor :values
|
41
|
+
validates :values, :any_presence => { :min_valid_count => -1 }
|
42
|
+
end
|
43
|
+
end.to raise_error(ArgumentError, ":min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil")
|
44
|
+
end
|
45
|
+
end
|
46
|
+
context "when :min_valid_count is 0" do
|
47
|
+
it "raise ArgumentError(:min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil)" do
|
48
|
+
expect do
|
49
|
+
class AnyTestWhenMinValidCountIsZero < ModelBase
|
50
|
+
attr_accessor :values
|
51
|
+
validates :values, :any_presence => { :min_valid_count => 0 }
|
52
|
+
end
|
53
|
+
end.to raise_error(ArgumentError, ":min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil")
|
54
|
+
end
|
55
|
+
end
|
56
|
+
context "when without :min_valid_count and :max_valid_count is positive integer" do
|
57
|
+
it "not raise Error" do
|
58
|
+
expect do
|
59
|
+
class AnyTestWhenWithoutMinValidCountAndMaxValidCountIsPositiveInteger < ModelBase
|
60
|
+
attr_accessor :values
|
61
|
+
validates :values, :any_presence => { :max_valid_count => 2 }
|
62
|
+
end
|
63
|
+
end.not_to raise_error
|
64
|
+
end
|
65
|
+
end
|
66
|
+
context "when :max_valid_count is not integer" do
|
67
|
+
it "raise ArgumentError(:min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil)" do
|
68
|
+
expect do
|
69
|
+
class AnyTestWhenMaxValidCountIsNotInteger < ModelBase
|
70
|
+
attr_accessor :values
|
71
|
+
validates :values, :any_presence => { :max_valid_count => "1" }
|
72
|
+
end
|
73
|
+
end.to raise_error(ArgumentError, ":min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil")
|
74
|
+
end
|
75
|
+
end
|
76
|
+
context "when :max_valid_count is negative integer" do
|
77
|
+
it "raise ArgumentError(:max_valid_count and :min_valid_count must be a positive integer ( greater than 0 ) or nil)" do
|
78
|
+
expect do
|
79
|
+
class AnyTestWhenMaxValidCountIsNegativeInteger < ModelBase
|
80
|
+
attr_accessor :values
|
81
|
+
validates :values, :any_presence => { :max_valid_count => -1 }
|
82
|
+
end
|
83
|
+
end.to raise_error(ArgumentError, ":min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
context "when :max_valid_count is 0" do
|
87
|
+
it "raise ArgumentError(:max_valid_count and :min_valid_count must be a positive integer ( greater than 0 ) or nil)" do
|
88
|
+
expect do
|
89
|
+
class AnyTestWhenMaxValidCountIsZero < ModelBase
|
90
|
+
attr_accessor :values
|
91
|
+
validates :values, :any_presence => { :max_valid_count => 0 }
|
92
|
+
end
|
93
|
+
end.to raise_error(ArgumentError, ":min_valid_count and :max_valid_count must be a positive integer ( greater than 0 ) or nil")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
context "when :min_valid_count is greater than :max_valid_count" do
|
97
|
+
it "raise ArgumentError(:min_valid_count must be less than or equal to:max_valid_count)" do
|
98
|
+
expect do
|
99
|
+
class AnyTestWhenMinValidCountIsGreaterThanMaxValidCount < ModelBase
|
100
|
+
attr_accessor :values
|
101
|
+
validates :values, :any_presence => { :min_valid_count => 3, :max_valid_count => 2 }
|
102
|
+
end
|
103
|
+
end.to raise_error(ArgumentError, ":min_valid_count must be less than or equal to :max_valid_count")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
context "when :min_valid_count equals to :max_valid_count" do
|
107
|
+
it "not raise Error" do
|
108
|
+
expect do
|
109
|
+
class AnyTestWhenMaxValidCountEqualsToMaxValidCount < ModelBase
|
110
|
+
attr_accessor :values
|
111
|
+
validates :values, :any_presence => { :min_valid_count => 3, :max_valid_count => 3 }
|
112
|
+
end
|
113
|
+
end.not_to raise_error
|
114
|
+
end
|
115
|
+
end
|
116
|
+
context "when :min_valid_count is less than :max_valid_count" do
|
117
|
+
it "not raise Error" do
|
118
|
+
expect do
|
119
|
+
class AnyTestWhenMinValidCountIsLessThanMaxValidCount < ModelBase
|
120
|
+
attr_accessor :values
|
121
|
+
validates :values, :any_presence => { :min_valid_count => 2, :max_valid_count => 3 }
|
122
|
+
end
|
123
|
+
end.not_to raise_error
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -0,0 +1,452 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require "spec_helper"
|
3
|
+
require "active_support/i18n"
|
4
|
+
require "test_class/ordering_test"
|
5
|
+
|
6
|
+
describe Detox::Validations::OrderingValidator do
|
7
|
+
describe "validation result" do
|
8
|
+
context "when given no option" do# {{{
|
9
|
+
let(:test) { OrderingTestWithoutOption.new }
|
10
|
+
|
11
|
+
context "when apply to nil" do
|
12
|
+
it "is valid" do
|
13
|
+
test.seq = nil
|
14
|
+
expect(test.valid?).to eq true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when apply to Array" do# {{{
|
19
|
+
context "when apply to [] (empty)" do
|
20
|
+
it "is valid" do
|
21
|
+
test.seq = []
|
22
|
+
expect(test.valid?).to eq true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
context "when apply to ['1', '2', '3'] (valid as order, sequencial)" do
|
26
|
+
it "is valid" do
|
27
|
+
test.seq = ["1", "2", "3"]
|
28
|
+
expect(test.valid?).to eq true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
context "when apply to ['2', '3', '1'] (valid as order, not sequencial)" do
|
32
|
+
it "is valid" do
|
33
|
+
test.seq = ["2", "3", "1"]
|
34
|
+
expect(test.valid?).to eq true
|
35
|
+
end
|
36
|
+
end
|
37
|
+
context "when apply to ['1', '2', '4'] (invalid as order)" do
|
38
|
+
it "is invalid" do
|
39
|
+
test.seq = ['1', '2', '4']
|
40
|
+
expect(test.valid?).to eq false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
context "when apply to ['1', '2', nil, '3'] (contains nil)" do
|
44
|
+
it "is invalid" do
|
45
|
+
test.seq = ['1', '2', nil, '3']
|
46
|
+
expect(test.valid?).to eq false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
context "when apply to ['1', '2', '', '3'] (contains empty)" do
|
50
|
+
it "is invalid" do
|
51
|
+
test.seq = ['1', '2', '', '3']
|
52
|
+
expect(test.valid?).to eq false
|
53
|
+
end
|
54
|
+
end
|
55
|
+
context "when apply to ['1', '2', ' ', '3'] (contains blank)" do
|
56
|
+
it "is invalid" do
|
57
|
+
test.seq = ['1', '2', ' ', '3']
|
58
|
+
expect(test.valid?).to eq false
|
59
|
+
end
|
60
|
+
end
|
61
|
+
context "when apply to [1, 2, 3] (number values)" do
|
62
|
+
it "is valid" do
|
63
|
+
test.seq = [1, 2, 3]
|
64
|
+
expect(test.valid?).to eq true
|
65
|
+
end
|
66
|
+
end
|
67
|
+
context "when apply to [2, 3, 4] (origin is not 1)" do
|
68
|
+
it "is invalid" do
|
69
|
+
test.seq = [2, 3, 4]
|
70
|
+
expect(test.valid?).to eq false
|
71
|
+
end
|
72
|
+
end
|
73
|
+
context "when apply to ['1', '2', '1'] (contains duplicative value)" do
|
74
|
+
it "is invalid" do
|
75
|
+
test.seq = ["1", "2", "1"]
|
76
|
+
expect(test.valid?).to eq false
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end# }}}
|
80
|
+
|
81
|
+
context "when apply to Hash" do# {{{
|
82
|
+
context "when apply to {} (empty)" do
|
83
|
+
it "is valid" do
|
84
|
+
test.seq = []
|
85
|
+
expect(test.valid?).to eq true
|
86
|
+
end
|
87
|
+
end
|
88
|
+
context "when apply to { :a => '2', :b => '3', :c => '1' } (valid as order)" do
|
89
|
+
it "is valid" do
|
90
|
+
test.seq = { :a => '2', :b => '3', :c => '1' }
|
91
|
+
expect(test.valid?).to eq true
|
92
|
+
end
|
93
|
+
end
|
94
|
+
context "when apply to { :a => '1', :b => '2', :c => '4' } (invalid as order)" do
|
95
|
+
it "is invalid" do
|
96
|
+
test.seq = { :a => '1', :b => '2', :c => '4' }
|
97
|
+
expect(test.valid?).to eq false
|
98
|
+
end
|
99
|
+
end
|
100
|
+
context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3' } (contains nil)" do
|
101
|
+
it "is invalid" do
|
102
|
+
test.seq = { :a => '1', :b => '2', :c => nil, :d => '3' }
|
103
|
+
expect(test.valid?).to eq false
|
104
|
+
end
|
105
|
+
end
|
106
|
+
context "when apply to { :a => '1', :b => '2', :c => '', :d => '3' } (contains empty)" do
|
107
|
+
it "is invalid" do
|
108
|
+
test.seq = { :a => '1', :b => '2', :c => '', :d => '3' }
|
109
|
+
expect(test.valid?).to eq false
|
110
|
+
end
|
111
|
+
end
|
112
|
+
context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3' } (contains blank)" do
|
113
|
+
it "is invalid" do
|
114
|
+
test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3' }
|
115
|
+
expect(test.valid?).to eq false
|
116
|
+
end
|
117
|
+
end
|
118
|
+
context "when apply to { :a => 2, :b => 3, :c => 1 } (number values)" do
|
119
|
+
it "is valid" do
|
120
|
+
test.seq = { :a => 2, :b => 3, :c => 1 }
|
121
|
+
expect(test.valid?).to eq true
|
122
|
+
end
|
123
|
+
end
|
124
|
+
context "when apply to { :a => '2', :b => '3', :c => '4' } (origin is not 1)" do
|
125
|
+
it "is invalid" do
|
126
|
+
test.seq = { :a => '2', :b => '3', :c => '4' }
|
127
|
+
expect(test.valid?).to eq false
|
128
|
+
end
|
129
|
+
end
|
130
|
+
context "when apply to { :a => '1', :b => '2', :c => '1' } (contains duplicative value)" do
|
131
|
+
it "is invalid" do
|
132
|
+
test.seq = { :a => '1', :b => '2', :c => '1' }
|
133
|
+
expect(test.valid?).to eq false
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end# }}}
|
137
|
+
end# }}}
|
138
|
+
|
139
|
+
context "when given ignore_nil_value option" do# {{{
|
140
|
+
let(:test) { OrderingTestWithIgnoreNilValueOption.new }
|
141
|
+
|
142
|
+
context "when apply to nil" do
|
143
|
+
it "is valid" do
|
144
|
+
test.seq = nil
|
145
|
+
expect(test.valid?).to eq true
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
context "when apply to Array" do# {{{
|
150
|
+
context "when apply to [] (empty)" do
|
151
|
+
it "is valid" do
|
152
|
+
test.seq = []
|
153
|
+
expect(test.valid?).to eq true
|
154
|
+
end
|
155
|
+
end
|
156
|
+
context "when apply to ['2', '3', '1'] (valid as order, not sequencial)" do
|
157
|
+
it "is valid" do
|
158
|
+
test.seq = ["2", "3", "1"]
|
159
|
+
expect(test.valid?).to eq true
|
160
|
+
end
|
161
|
+
end
|
162
|
+
context "when apply to ['1', '2', '4'] (invalid as order)" do
|
163
|
+
it "is invalid" do
|
164
|
+
test.seq = ['1', '2', '4']
|
165
|
+
expect(test.valid?).to eq false
|
166
|
+
end
|
167
|
+
end
|
168
|
+
context "when apply to ['1', '2', nil, '3'] (contains nil)" do
|
169
|
+
it "is valid" do
|
170
|
+
test.seq = ['1', '2', '3']
|
171
|
+
expect(test.valid?).to eq true
|
172
|
+
end
|
173
|
+
end
|
174
|
+
context "when apply to ['1', '2', '', '3'] (contains empty)" do
|
175
|
+
it "is invalid" do
|
176
|
+
test.seq = ['1', '2', '', '3']
|
177
|
+
expect(test.valid?).to eq false
|
178
|
+
end
|
179
|
+
end
|
180
|
+
context "when apply to ['1', '2', ' ', '3'] (contains blank)" do
|
181
|
+
it "is invalid" do
|
182
|
+
test.seq = ['1', '2', ' ', '3']
|
183
|
+
expect(test.valid?).to eq false
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end# }}}
|
187
|
+
|
188
|
+
context "when apply to Hash" do# {{{
|
189
|
+
context "when apply to {} (empty)" do
|
190
|
+
it "is valid" do
|
191
|
+
test.seq = []
|
192
|
+
expect(test.valid?).to eq true
|
193
|
+
end
|
194
|
+
end
|
195
|
+
context "when apply to { :a => '2', :b => '3', :c => '1' } (valid as order)" do
|
196
|
+
it "is valid" do
|
197
|
+
test.seq = { :a => '2', :b => '3', :c => '1' }
|
198
|
+
expect(test.valid?).to eq true
|
199
|
+
end
|
200
|
+
end
|
201
|
+
context "when apply to { :a => '1', :b => '2', :c => '4' } (invalid as order)" do
|
202
|
+
it "is invalid" do
|
203
|
+
test.seq = { :a => '1', :b => '2', :c => '4' }
|
204
|
+
expect(test.valid?).to eq false
|
205
|
+
end
|
206
|
+
end
|
207
|
+
context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3' } (contains nil)" do
|
208
|
+
it "is valid" do
|
209
|
+
test.seq = { :a => '1', :b => '2', :c => nil, :d => '3' }
|
210
|
+
expect(test.valid?).to eq true
|
211
|
+
end
|
212
|
+
end
|
213
|
+
context "when apply to { :a => '1', :b => '2', :c => '', :d => '3' } (contains empty)" do
|
214
|
+
it "is invalid" do
|
215
|
+
test.seq = { :a => '1', :b => '2', :c => '', :d => '3' }
|
216
|
+
expect(test.valid?).to eq false
|
217
|
+
end
|
218
|
+
end
|
219
|
+
context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3' } (contains blank)" do
|
220
|
+
it "is invalid" do
|
221
|
+
test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3' }
|
222
|
+
expect(test.valid?).to eq false
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end# }}}
|
226
|
+
end# }}}
|
227
|
+
|
228
|
+
context "when given ignore_blank_value option" do# {{{
|
229
|
+
let(:test) { OrderingTestWithIgnoreBlankValueOption.new }
|
230
|
+
|
231
|
+
context "when apply to nil" do
|
232
|
+
it "is valid" do
|
233
|
+
test.seq = nil
|
234
|
+
expect(test.valid?).to eq true
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
context "when apply to Array" do# {{{
|
239
|
+
context "when apply to [] (empty)" do
|
240
|
+
it "is valid" do
|
241
|
+
test.seq = []
|
242
|
+
expect(test.valid?).to eq true
|
243
|
+
end
|
244
|
+
end
|
245
|
+
context "when apply to ['1', '2', '3'] (valid as order, sequencial)" do
|
246
|
+
it "is valid" do
|
247
|
+
test.seq = ["1", "2", "3"]
|
248
|
+
expect(test.valid?).to eq true
|
249
|
+
end
|
250
|
+
end
|
251
|
+
context "when apply to ['2', '3', '1'] (valid as order, not sequencial)" do
|
252
|
+
it "is valid" do
|
253
|
+
test.seq = ["2", "3", "1"]
|
254
|
+
expect(test.valid?).to eq true
|
255
|
+
end
|
256
|
+
end
|
257
|
+
context "when apply to ['1', '2', '4'] (invalid as order)" do
|
258
|
+
it "is invalid" do
|
259
|
+
test.seq = ['1', '2', '4']
|
260
|
+
expect(test.valid?).to eq false
|
261
|
+
end
|
262
|
+
end
|
263
|
+
context "when apply to ['1', '2', nil, '3'] (contains nil)" do
|
264
|
+
it "is valid" do
|
265
|
+
test.seq = ['1', '2', '3']
|
266
|
+
expect(test.valid?).to eq true
|
267
|
+
end
|
268
|
+
end
|
269
|
+
context "when apply to ['1', '2', '', '3'] (contains empty)" do
|
270
|
+
it "is valid" do
|
271
|
+
test.seq = ['1', '2', '', '3']
|
272
|
+
expect(test.valid?).to eq true
|
273
|
+
end
|
274
|
+
end
|
275
|
+
context "when apply to ['1', '2', ' ', '3'] (contains blank)" do
|
276
|
+
it "is valid" do
|
277
|
+
test.seq = ['1', '2', ' ', '3']
|
278
|
+
expect(test.valid?).to eq true
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end# }}}
|
282
|
+
|
283
|
+
context "when apply to Hash" do# {{{
|
284
|
+
context "when apply to {} (empty)" do
|
285
|
+
it "is valid" do
|
286
|
+
test.seq = []
|
287
|
+
expect(test.valid?).to eq true
|
288
|
+
end
|
289
|
+
end
|
290
|
+
context "when apply to { :a => '2', :b => '3', :c => '1' } (valid as order)" do
|
291
|
+
it "is valid" do
|
292
|
+
test.seq = { :a => '2', :b => '3', :c => '1' }
|
293
|
+
expect(test.valid?).to eq true
|
294
|
+
end
|
295
|
+
end
|
296
|
+
context "when apply to { :a => '1', :b => '2', :c => '4' } (invalid as order)" do
|
297
|
+
it "is invalid" do
|
298
|
+
test.seq = { :a => '1', :b => '2', :c => '4' }
|
299
|
+
expect(test.valid?).to eq false
|
300
|
+
end
|
301
|
+
end
|
302
|
+
context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3' } (contains nil)" do
|
303
|
+
it "is valid" do
|
304
|
+
test.seq = { :a => '1', :b => '2', :c => nil, :d => '3' }
|
305
|
+
expect(test.valid?).to eq true
|
306
|
+
end
|
307
|
+
end
|
308
|
+
context "when apply to { :a => '1', :b => '2', :c => '', :d => '3' } (contains empty)" do
|
309
|
+
it "is valid" do
|
310
|
+
test.seq = { :a => '1', :b => '2', :c => '', :d => '3' }
|
311
|
+
expect(test.valid?).to eq true
|
312
|
+
end
|
313
|
+
end
|
314
|
+
context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3' } (contains blank)" do
|
315
|
+
it "is valid" do
|
316
|
+
test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3' }
|
317
|
+
expect(test.valid?).to eq true
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end# }}}
|
321
|
+
end# }}}
|
322
|
+
|
323
|
+
context "when given start_with option" do# {{{
|
324
|
+
let(:test) { OrderingTestWithStartWithOption.new }
|
325
|
+
|
326
|
+
context "when apply to nil" do
|
327
|
+
it "is valid" do
|
328
|
+
test.seq = nil
|
329
|
+
expect(test.valid?).to eq true
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
context "when apply to Array" do# {{{
|
334
|
+
context "when apply to [] (empty)" do
|
335
|
+
it "is valid" do
|
336
|
+
test.seq = []
|
337
|
+
expect(test.valid?).to eq true
|
338
|
+
end
|
339
|
+
end
|
340
|
+
context "when apply to ['2', '3', '1'] (origin is 1)" do
|
341
|
+
it "is invalid" do
|
342
|
+
test.seq = ["2", "3", "1"]
|
343
|
+
expect(test.valid?).to eq false
|
344
|
+
end
|
345
|
+
end
|
346
|
+
context "when apply to ['4', '3', '5'] (origin is 3)" do
|
347
|
+
it "is valid" do
|
348
|
+
test.seq = ["4", "3", "5"]
|
349
|
+
expect(test.valid?).to eq true
|
350
|
+
end
|
351
|
+
end
|
352
|
+
end# }}}
|
353
|
+
|
354
|
+
context "when apply to Hash" do# {{{
|
355
|
+
context "when apply to {} (empty)" do
|
356
|
+
it "is valid" do
|
357
|
+
test.seq = []
|
358
|
+
expect(test.valid?).to eq true
|
359
|
+
end
|
360
|
+
end
|
361
|
+
context "when apply to { :a => '2', :b => '3', :c => '1' } (origin is 1)" do
|
362
|
+
it "is invalid" do
|
363
|
+
test.seq = { :a => '2', :b => '3', :c => '1' }
|
364
|
+
expect(test.valid?).to eq false
|
365
|
+
end
|
366
|
+
end
|
367
|
+
context "when apply to { :a => '4', :b => '3', :c => '5' } (origin is 3)" do
|
368
|
+
it "is valid" do
|
369
|
+
test.seq = { :a => '4', :b => '3', :c => '5' }
|
370
|
+
expect(test.valid?).to eq true
|
371
|
+
end
|
372
|
+
end
|
373
|
+
end# }}}
|
374
|
+
end# }}}
|
375
|
+
end
|
376
|
+
|
377
|
+
describe "error message" do
|
378
|
+
context "when given no option" do# {{{
|
379
|
+
let(:test) { OrderingTestWithoutOption.new }
|
380
|
+
|
381
|
+
context "when valid" do
|
382
|
+
before do
|
383
|
+
test.seq = ['1', '2', '3']
|
384
|
+
test.valid?
|
385
|
+
end
|
386
|
+
|
387
|
+
it "has no message" do
|
388
|
+
expect(test.errors.present?).to eq false
|
389
|
+
end
|
390
|
+
end
|
391
|
+
context "when invalid" do
|
392
|
+
before do
|
393
|
+
test.seq = ['1', '2', '4']
|
394
|
+
test.valid?
|
395
|
+
end
|
396
|
+
|
397
|
+
it "has 1 error message" do
|
398
|
+
expect(test.errors.empty?).to eq false
|
399
|
+
expect(test.errors.size).to eq 1
|
400
|
+
end
|
401
|
+
it "error message is associated with seq attribute" do
|
402
|
+
expect(test.errors.include?(:seq)).to eq true
|
403
|
+
end
|
404
|
+
it "error messsage is 'Seq is not satisfied as order'" do
|
405
|
+
expect(test.errors.full_messages.first).to eq 'Seq is not satisfied as order'
|
406
|
+
end
|
407
|
+
end
|
408
|
+
context "when using i18n" do
|
409
|
+
before do
|
410
|
+
@base_locale = I18n.locale
|
411
|
+
I18n.locale = :ja
|
412
|
+
test.seq = ['1', '2', '4']
|
413
|
+
test.valid?
|
414
|
+
end
|
415
|
+
after do
|
416
|
+
I18n.locale = @base_locale
|
417
|
+
end
|
418
|
+
it "error messsage is translated" do
|
419
|
+
expect(test.errors.full_messages.first).to eq 'Seq は順序として成立していません'
|
420
|
+
end
|
421
|
+
end
|
422
|
+
end# }}}
|
423
|
+
|
424
|
+
context "when given message option" do# {{{
|
425
|
+
let(:test) { OrderingTestWithMessageOption.new }
|
426
|
+
|
427
|
+
context "when invalid" do
|
428
|
+
before do
|
429
|
+
test.seq = ['1', '2', '4']
|
430
|
+
test.valid?
|
431
|
+
end
|
432
|
+
it "error messsage uses given message" do
|
433
|
+
expect(test.errors.full_messages.first).to eq 'Seq contains invalid sequence'
|
434
|
+
end
|
435
|
+
end
|
436
|
+
context "when using i18n" do
|
437
|
+
before do
|
438
|
+
@base_locale = I18n.locale
|
439
|
+
I18n.locale = :ja
|
440
|
+
test.seq = ['1', '2', '4']
|
441
|
+
test.valid?
|
442
|
+
end
|
443
|
+
after do
|
444
|
+
I18n.locale = @base_locale
|
445
|
+
end
|
446
|
+
it "error messsage is not translated" do
|
447
|
+
expect(test.errors.full_messages.first).to eq 'Seq contains invalid sequence'
|
448
|
+
end
|
449
|
+
end
|
450
|
+
end# }}}
|
451
|
+
end
|
452
|
+
end
|