detox 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +19 -0
  4. data/.travis.yml +7 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +20 -0
  7. data/README.md +40 -0
  8. data/Rakefile +11 -0
  9. data/detox.gemspec +27 -0
  10. data/gemfiles/activemodel_3_2_x.gemfile +5 -0
  11. data/gemfiles/activemodel_4_0_x.gemfile +5 -0
  12. data/lib/active_model/validations/absence.rb +19 -0
  13. data/lib/detox.rb +11 -0
  14. data/lib/detox/array_validity.rb +23 -0
  15. data/lib/detox/locales/en.yml +21 -0
  16. data/lib/detox/locales/ja.yml +21 -0
  17. data/lib/detox/validations/all.rb +41 -0
  18. data/lib/detox/validations/any.rb +57 -0
  19. data/lib/detox/validations/ordering.rb +34 -0
  20. data/lib/detox/validations/possession.rb +30 -0
  21. data/lib/detox/validity_broker.rb +55 -0
  22. data/lib/detox/version.rb +4 -0
  23. data/spec/detox/array_validity_spec.rb +214 -0
  24. data/spec/detox/validations/all_absence_spec.rb +147 -0
  25. data/spec/detox/validations/all_acceptance_spec.rb +352 -0
  26. data/spec/detox/validations/all_exclusion_spec.rb +137 -0
  27. data/spec/detox/validations/all_format_spec.rb +351 -0
  28. data/spec/detox/validations/all_inclusion_spec.rb +352 -0
  29. data/spec/detox/validations/all_length_spec.rb +388 -0
  30. data/spec/detox/validations/all_numericality_spec.rb +369 -0
  31. data/spec/detox/validations/all_presence_spec.rb +159 -0
  32. data/spec/detox/validations/any_absence_spec.rb +597 -0
  33. data/spec/detox/validations/any_acceptance_spec.rb +597 -0
  34. data/spec/detox/validations/any_exclusion_spec.rb +597 -0
  35. data/spec/detox/validations/any_format_spec.rb +597 -0
  36. data/spec/detox/validations/any_inclusion_spec.rb +597 -0
  37. data/spec/detox/validations/any_length_spec.rb +597 -0
  38. data/spec/detox/validations/any_numericality_spec.rb +609 -0
  39. data/spec/detox/validations/any_presence_spec.rb +596 -0
  40. data/spec/detox/validations/any_validator_check_validity_spec.rb +126 -0
  41. data/spec/detox/validations/ordering_spec.rb +452 -0
  42. data/spec/detox/validations/possession_spec.rb +263 -0
  43. data/spec/detox/validity_broker_spec.rb +126 -0
  44. data/spec/spec_helper.rb +24 -0
  45. data/spec/test_class/all_absence_test.rb +14 -0
  46. data/spec/test_class/all_acceptance_test.rb +27 -0
  47. data/spec/test_class/all_exclusion_test.rb +15 -0
  48. data/spec/test_class/all_format_test.rb +26 -0
  49. data/spec/test_class/all_inclusion_test.rb +27 -0
  50. data/spec/test_class/all_length_test.rb +28 -0
  51. data/spec/test_class/all_numericality_test.rb +33 -0
  52. data/spec/test_class/all_presence_test.rb +14 -0
  53. data/spec/test_class/any_absence_test.rb +33 -0
  54. data/spec/test_class/any_acceptance_test.rb +34 -0
  55. data/spec/test_class/any_exclusion_test.rb +34 -0
  56. data/spec/test_class/any_format_test.rb +34 -0
  57. data/spec/test_class/any_inclusion_test.rb +33 -0
  58. data/spec/test_class/any_length_test.rb +33 -0
  59. data/spec/test_class/any_numericality_test.rb +35 -0
  60. data/spec/test_class/any_presence_test.rb +33 -0
  61. data/spec/test_class/array_validity_test.rb +6 -0
  62. data/spec/test_class/model_base.rb +11 -0
  63. data/spec/test_class/ordering_test.rb +33 -0
  64. data/spec/test_class/possession_test.rb +22 -0
  65. metadata +219 -0
@@ -0,0 +1,609 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/any_numericality_test"
5
+
6
+ describe Detox::Validations::AnyNumericalityValidator do
7
+ describe "validation result" do
8
+ context "when given no additional option" do# {{{
9
+ let(:test) { AnyNumericalityTest.new }
10
+
11
+ context "when apply to nil" do
12
+ it "is valid" do
13
+ test.prices = 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.prices = []
22
+ expect(test.valid?).to eq true
23
+ end
24
+ end
25
+ context "when apply to [nil, '', ' '] (all prices are nil or empty or blank)" do
26
+ it "is invalid" do
27
+ test.prices = [nil, "", " "]
28
+ expect(test.valid?).to eq false
29
+ end
30
+ end
31
+ context "when apply to ['0', 'foo', 'foo', 'foo', 'foo'] (1 valid value)" do
32
+ it "is valid" do
33
+ test.prices = ['0', 'foo', 'foo', 'foo', 'foo']
34
+ expect(test.valid?).to eq true
35
+ end
36
+ end
37
+ context "when apply to ['-1', 'foo', 'foo', 'foo', 'foo'] (negative value)" do
38
+ it "is valid" do
39
+ test.prices = ['-1', 'foo', 'foo', 'foo', 'foo']
40
+ expect(test.valid?).to eq true
41
+ end
42
+ end
43
+ context "when apply to ['0.5', 'foo', 'foo', 'foo', 'foo'] (not integer)" do
44
+ it "is valid" do
45
+ test.prices = ['0.5', 'foo', 'foo', 'foo', 'foo']
46
+ expect(test.valid?).to eq true
47
+ end
48
+ end
49
+ context "when apply to ['0', '0', 'foo', 'foo', 'foo'] (2 valid prices)" do
50
+ it "is valid" do
51
+ test.prices = ['0', '0', 'foo', 'foo', 'foo']
52
+ expect(test.valid?).to eq true
53
+ end
54
+ end
55
+ context "when apply to ['0', '0', '0', 'foo', 'foo'] (3 valid prices)" do
56
+ it "is valid" do
57
+ test.prices = ['0', '0', '0', 'foo', 'foo']
58
+ expect(test.valid?).to eq true
59
+ end
60
+ end
61
+ context "when apply to ['0', '0', '0', '0', 'foo'] (4 valid prices)" do
62
+ it "is valid" do
63
+ test.prices = ['0', '0', '0', '0', 'foo']
64
+ expect(test.valid?).to eq true
65
+ end
66
+ end
67
+ context "when apply to ['0', '0', '0', '0', '0'] (all valid prices)" do
68
+ it "is valid" do
69
+ test.prices = ['0', '0', '0', '0', '0']
70
+ expect(test.valid?).to eq true
71
+ end
72
+ end
73
+ end# }}}
74
+
75
+ context "when apply to Hash" do# {{{
76
+ context "when apply to {} (empty)" do
77
+ it "is valid" do
78
+ test.prices = {}
79
+ expect(test.valid?).to eq true
80
+ end
81
+ end
82
+ context "when apply to { :a => nil, :b => '', :c => ' ' } (all prices are nil or empty or blank)" do
83
+ it "is invalid" do
84
+ test.prices = { :a => nil, :b => "", :c => " " }
85
+ expect(test.valid?).to eq false
86
+ end
87
+ end
88
+ context "when apply to { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo' :e => 'foo' } (1 valid value)" do
89
+ it "is valid" do
90
+ test.prices = { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo', :e => 'foo' }
91
+ expect(test.valid?).to eq true
92
+ end
93
+ end
94
+ context "when apply to { :a => '0', :b => '0', :c => 'foo', :d => 'foo' :e => 'foo' } (2 valid prices)" do
95
+ it "is valid" do
96
+ test.prices = { :a => '0', :b => '0', :c => 'foo', :d => 'foo', :e => 'foo' }
97
+ expect(test.valid?).to eq true
98
+ end
99
+ end
100
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' } (3 valid prices)" do
101
+ it "is valid" do
102
+ test.prices = { :a => '0', :b => '0', :c => 'foo', :d => 'foo', :e => 'foo' }
103
+ expect(test.valid?).to eq true
104
+ end
105
+ end
106
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => 'foo' } (4 valid prices)" do
107
+ it "is valid" do
108
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' }
109
+ expect(test.valid?).to eq true
110
+ end
111
+ end
112
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' } (all valid prices)" do
113
+ it "is valid" do
114
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' }
115
+ expect(test.valid?).to eq true
116
+ end
117
+ end
118
+ end# }}}
119
+ end# }}}
120
+
121
+ context "when given only :min_valid_count option" do# {{{
122
+ let(:test) { AnyNumericalityTestWithMinValidCountOnly.new }
123
+
124
+ context "when apply to nil" do
125
+ it "is valid" do
126
+ test.prices = nil
127
+ expect(test.valid?).to eq true
128
+ end
129
+ end
130
+
131
+ context "when apply to Array" do# {{{
132
+ context "when apply to [] (empty)" do
133
+ it "is valid" do
134
+ test.prices = []
135
+ expect(test.valid?).to eq true
136
+ end
137
+ end
138
+ context "when apply to [nil, '', ' '] (all prices are nil or empty or blank)" do
139
+ it "is invalid" do
140
+ test.prices = [nil, "", " "]
141
+ expect(test.valid?).to eq false
142
+ end
143
+ end
144
+ context "when apply to ['0', 'foo', 'foo', 'foo', 'foo'] (1 valid value)" do
145
+ it "is invalid" do
146
+ test.prices = ['0', 'foo', 'foo', 'foo', 'foo']
147
+ expect(test.valid?).to eq false
148
+ end
149
+ end
150
+ context "when apply to ['0', '0', 'foo', 'foo', 'foo'] (2 valid prices)" do
151
+ it "is valid" do
152
+ test.prices = ['0', '0', 'foo', 'foo', 'foo']
153
+ expect(test.valid?).to eq true
154
+ end
155
+ end
156
+ context "when apply to ['0', '0', '0', 'foo', 'foo'] (3 valid prices)" do
157
+ it "is valid" do
158
+ test.prices = ['0', '0', '0', 'foo', 'foo']
159
+ expect(test.valid?).to eq true
160
+ end
161
+ end
162
+ context "when apply to ['0', '0', '0', '0', 'foo'] (4 valid prices)" do
163
+ it "is valid" do
164
+ test.prices = ['0', '0', '0', '0', 'foo']
165
+ expect(test.valid?).to eq true
166
+ end
167
+ end
168
+ context "when apply to ['0', '0', '0', '0', '0'] (all valid prices)" do
169
+ it "is valid" do
170
+ test.prices = ['0', '0', '0', '0', '0']
171
+ expect(test.valid?).to eq true
172
+ end
173
+ end
174
+ end# }}}
175
+
176
+ context "when apply to Hash" do# {{{
177
+ context "when apply to {} (empty)" do
178
+ it "is valid" do
179
+ test.prices = {}
180
+ expect(test.valid?).to eq true
181
+ end
182
+ end
183
+ context "when apply to { :a => nil, :b => '', :c => ' ' } (all prices are nil or empty or blank)" do
184
+ it "is invalid" do
185
+ test.prices = { :a => nil, :b => "", :c => " " }
186
+ expect(test.valid?).to eq false
187
+ end
188
+ end
189
+ context "when apply to { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo' :e => 'foo' } (1 valid value)" do
190
+ it "is invalid" do
191
+ test.prices = { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo', :e => 'foo' }
192
+ expect(test.valid?).to eq false
193
+ end
194
+ end
195
+ context "when apply to { :a => '0', :b => '0', :c => 'foo', :d => 'foo' :e => 'foo' } (2 valid prices)" do
196
+ it "is valid" do
197
+ test.prices = { :a => '0', :b => '0', :c => 'foo', :d => 'foo', :e => 'foo' }
198
+ expect(test.valid?).to eq true
199
+ end
200
+ end
201
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' } (3 valid prices)" do
202
+ it "is valid" do
203
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' }
204
+ expect(test.valid?).to eq true
205
+ end
206
+ end
207
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => 'foo' } (4 valid prices)" do
208
+ it "is valid" do
209
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => '0', :e => 'foo' }
210
+ expect(test.valid?).to eq true
211
+ end
212
+ end
213
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' } (all valid prices)" do
214
+ it "is valid" do
215
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' }
216
+ expect(test.valid?).to eq true
217
+ end
218
+ end
219
+ end# }}}
220
+ end# }}}
221
+
222
+ context "when given only :max_valid_count option" do# {{{
223
+ let(:test) { AnyNumericalityTestWithMaxValidCountOnly.new }
224
+
225
+ context "when apply to nil" do
226
+ it "is valid" do
227
+ test.prices = nil
228
+ expect(test.valid?).to eq true
229
+ end
230
+ end
231
+
232
+ context "when apply to Array" do# {{{
233
+ context "when apply to [] (empty)" do
234
+ it "is valid" do
235
+ test.prices = []
236
+ expect(test.valid?).to eq true
237
+ end
238
+ end
239
+ context "when apply to [nil, '', ' '] (all prices are nil or empty or blank)" do
240
+ it "is invalid" do
241
+ test.prices = [nil, "", " "]
242
+ expect(test.valid?).to eq false
243
+ end
244
+ end
245
+ context "when apply to ['0', 'foo', 'foo', 'foo', 'foo'] (1 valid value)" do
246
+ it "is valid" do
247
+ test.prices = ['0', 'foo', 'foo', 'foo', 'foo']
248
+ expect(test.valid?).to eq true
249
+ end
250
+ end
251
+ context "when apply to ['0', '0', 'foo', 'foo', 'foo'] (2 valid prices)" do
252
+ it "is valid" do
253
+ test.prices = ['0', '0', 'foo', 'foo', 'foo']
254
+ expect(test.valid?).to eq true
255
+ end
256
+ end
257
+ context "when apply to ['0', '0', '0', 'foo', 'foo'] (3 valid prices)" do
258
+ it "is valid" do
259
+ test.prices = ['0', '0', '0', 'foo', 'foo']
260
+ expect(test.valid?).to eq true
261
+ end
262
+ end
263
+ context "when apply to ['0', '0', '0', '0', 'foo'] (4 valid prices)" do
264
+ it "is invalid" do
265
+ test.prices = ['0', '0', '0', '0', 'foo']
266
+ expect(test.valid?).to eq false
267
+ end
268
+ end
269
+ context "when apply to ['0', '0', '0', '0', '0'] (all valid prices)" do
270
+ it "is invalid" do
271
+ test.prices = ['0', '0', '0', '0', '0']
272
+ expect(test.valid?).to eq false
273
+ end
274
+ end
275
+ end# }}}
276
+
277
+ context "when apply to Hash" do# {{{
278
+ context "when apply to {} (empty)" do
279
+ it "is valid" do
280
+ test.prices = {}
281
+ expect(test.valid?).to eq true
282
+ end
283
+ end
284
+ context "when apply to { :a => nil, :b => '', :c => ' ' } (all prices are nil or empty or blank)" do
285
+ it "is invalid" do
286
+ test.prices = { :a => nil, :b => "", :c => " " }
287
+ expect(test.valid?).to eq false
288
+ end
289
+ end
290
+ context "when apply to { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo' :e => 'foo' } (1 valid value)" do
291
+ it "is valid" do
292
+ test.prices = { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo', :e => 'foo' }
293
+ expect(test.valid?).to eq true
294
+ end
295
+ end
296
+ context "when apply to { :a => '0', :b => '0', :c => 'foo', :d => 'foo' :e => 'foo' } (2 valid prices)" do
297
+ it "is valid" do
298
+ test.prices = { :a => '0', :b => '0', :c => 'foo', :d => 'foo', :e => 'foo' }
299
+ expect(test.valid?).to eq true
300
+ end
301
+ end
302
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' } (3 valid prices)" do
303
+ it "is valid" do
304
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' }
305
+ expect(test.valid?).to eq true
306
+ end
307
+ end
308
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => 'foo' } (4 valid prices)" do
309
+ it "is invalid" do
310
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => '0', :e => 'foo' }
311
+ expect(test.valid?).to eq false
312
+ end
313
+ end
314
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' } (all valid prices)" do
315
+ it "is invalid" do
316
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' }
317
+ expect(test.valid?).to eq false
318
+ end
319
+ end
320
+ end# }}}
321
+ end# }}}
322
+
323
+ context "when given :min_valid_count and :max_valid_count option" do# {{{
324
+ let(:test) { AnyNumericalityTestWithBothValidCount.new }
325
+
326
+ context "when apply to nil" do
327
+ it "is valid" do
328
+ test.prices = 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.prices = []
337
+ expect(test.valid?).to eq true
338
+ end
339
+ end
340
+ context "when apply to [nil, '', ' '] (all prices are nil or empty or blank)" do
341
+ it "is invalid" do
342
+ test.prices = [nil, "", " "]
343
+ expect(test.valid?).to eq false
344
+ end
345
+ end
346
+ context "when apply to ['0', 'foo', 'foo', 'foo', 'foo'] (1 valid value)" do
347
+ it "is invalid" do
348
+ test.prices = ['0', 'foo', 'foo', 'foo', 'foo']
349
+ expect(test.valid?).to eq false
350
+ end
351
+ end
352
+ context "when apply to ['0', '0', 'foo', 'foo', 'foo'] (2 valid prices)" do
353
+ it "is valid" do
354
+ test.prices = ['0', '0', 'foo', 'foo', 'foo']
355
+ expect(test.valid?).to eq true
356
+ end
357
+ end
358
+ context "when apply to ['0', '0', '0', 'foo', 'foo'] (3 valid prices)" do
359
+ it "is valid" do
360
+ test.prices = ['0', '0', '0', 'foo', 'foo']
361
+ expect(test.valid?).to eq true
362
+ end
363
+ end
364
+ context "when apply to ['0', '0', '0', '0', 'foo'] (4 valid prices)" do
365
+ it "is invalid" do
366
+ test.prices = ['0', '0', '0', '0', 'foo']
367
+ expect(test.valid?).to eq false
368
+ end
369
+ end
370
+ context "when apply to ['0', '0', '0', '0', '0'] (all valid prices)" do
371
+ it "is invalid" do
372
+ test.prices = ['0', '0', '0', '0', '0']
373
+ expect(test.valid?).to eq false
374
+ end
375
+ end
376
+ end# }}}
377
+
378
+ context "when apply to Hash" do# {{{
379
+ context "when apply to {} (empty)" do
380
+ it "is valid" do
381
+ test.prices = {}
382
+ expect(test.valid?).to eq true
383
+ end
384
+ end
385
+ context "when apply to { :a => nil, :b => '', :c => ' ' } (all prices are nil or empty or blank)" do
386
+ it "is invalid" do
387
+ test.prices = { :a => nil, :b => "", :c => " " }
388
+ expect(test.valid?).to eq false
389
+ end
390
+ end
391
+ context "when apply to { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo' :e => 'foo' } (1 valid value)" do
392
+ it "is invalid" do
393
+ test.prices = { :a => '0', :b => 'foo', :c => 'foo', :d => 'foo', :e => 'foo' }
394
+ expect(test.valid?).to eq false
395
+ end
396
+ end
397
+ context "when apply to { :a => '0', :b => '0', :c => 'foo', :d => 'foo' :e => 'foo' } (2 valid prices)" do
398
+ it "is valid" do
399
+ test.prices = { :a => '0', :b => '0', :c => 'foo', :d => 'foo', :e => 'foo' }
400
+ expect(test.valid?).to eq true
401
+ end
402
+ end
403
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' } (3 valid prices)" do
404
+ it "is valid" do
405
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => 'foo', :e => 'foo' }
406
+ expect(test.valid?).to eq true
407
+ end
408
+ end
409
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => 'foo' } (4 valid prices)" do
410
+ it "is invalid" do
411
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => '0', :e => 'foo' }
412
+ expect(test.valid?).to eq false
413
+ end
414
+ end
415
+ context "when apply to { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' } (all valid prices)" do
416
+ it "is invalid" do
417
+ test.prices = { :a => '0', :b => '0', :c => '0', :d => '0', :e => '0' }
418
+ expect(test.valid?).to eq false
419
+ end
420
+ end
421
+ end# }}}
422
+ end# }}}
423
+ end
424
+
425
+ describe "error message" do
426
+ context "when given no option" do# {{{
427
+ let(:test) { AnyNumericalityTest.new }
428
+
429
+ context "when valid" do
430
+ before do
431
+ test.prices = ['0', '0', 'foo']
432
+ test.valid?
433
+ end
434
+
435
+ it "has no message" do
436
+ expect(test.errors.present?).to eq false
437
+ end
438
+ end
439
+ context "when invalid" do
440
+ before do
441
+ test.prices = ['foo', "", " "]
442
+ test.valid?
443
+ end
444
+
445
+ it "has 1 error message" do
446
+ expect(test.errors.empty?).to eq false
447
+ expect(test.errors.size).to eq 1
448
+ end
449
+ it "error message is associated with prices attribute" do
450
+ expect(test.errors.include?(:prices)).to eq true
451
+ end
452
+ it %q{error messsage is "Prices must be numeric (required number is 1-)"} do
453
+ expect(test.errors.full_messages.first).to eq "Prices must be numeric (required number is 1-)"
454
+ end
455
+ end
456
+ context "when using i18n" do
457
+ before do
458
+ @base_locale = I18n.locale
459
+ I18n.locale = :ja
460
+ test.prices = ['foo', "", " "]
461
+ test.valid?
462
+ end
463
+ after do
464
+ I18n.locale = @base_locale
465
+ end
466
+ it "error messsage is translated" do
467
+ expect(test.errors.full_messages.first).to eq "Prices は必要数(1~)が数値でなければなりません"
468
+ end
469
+ end
470
+ end# }}}
471
+
472
+ context "when given :min_valid_count option" do# {{{
473
+ let(:test) { AnyNumericalityTestWithMinValidCountOnly.new }
474
+
475
+ context "when invalid" do
476
+ before do
477
+ test.prices = ['0', "", " "]
478
+ test.valid?
479
+ end
480
+
481
+ it "has 1 error message" do
482
+ expect(test.errors.empty?).to eq false
483
+ expect(test.errors.size).to eq 1
484
+ end
485
+ it "error message is associated with prices attribute" do
486
+ expect(test.errors.include?(:prices)).to eq true
487
+ end
488
+ it %q{error messsage is "Prices must be numeric (required number is 2-)"} do
489
+ expect(test.errors.full_messages.first).to eq "Prices must be numeric (required number is 2-)"
490
+ end
491
+ end
492
+ context "when using i18n" do
493
+ before do
494
+ @base_locale = I18n.locale
495
+ I18n.locale = :ja
496
+ test.prices = ['0', "", " "]
497
+ test.valid?
498
+ end
499
+ after do
500
+ I18n.locale = @base_locale
501
+ end
502
+ it "error messsage is translated" do
503
+ expect(test.errors.full_messages.first).to eq "Prices は必要数(2~)が数値でなければなりません"
504
+ end
505
+ end
506
+ end# }}}
507
+
508
+ context "when given :max_valid_count option" do# {{{
509
+ let(:test) { AnyNumericalityTestWithMaxValidCountOnly.new }
510
+
511
+ context "when invalid" do
512
+ before do
513
+ test.prices = ['0', '0', '0', '0', 'foo']
514
+ test.valid?
515
+ end
516
+
517
+ it "has 1 error message" do
518
+ expect(test.errors.empty?).to eq false
519
+ expect(test.errors.size).to eq 1
520
+ end
521
+ it "error message is associated with prices attribute" do
522
+ expect(test.errors.include?(:prices)).to eq true
523
+ end
524
+ it %q{error messsage is "Prices must be numeric (required number is 1-3)"} do
525
+ expect(test.errors.full_messages.first).to eq "Prices must be numeric (required number is 1-3)"
526
+ end
527
+ end
528
+ context "when using i18n" do
529
+ before do
530
+ @base_locale = I18n.locale
531
+ I18n.locale = :ja
532
+ test.prices = ['0', '0', '0', '0', 'foo']
533
+ test.valid?
534
+ end
535
+ after do
536
+ I18n.locale = @base_locale
537
+ end
538
+ it "error messsage is translated" do
539
+ expect(test.errors.full_messages.first).to eq "Prices は必要数(1~3)が数値でなければなりません"
540
+ end
541
+ end
542
+ end# }}}
543
+
544
+ context "when given :min_valid_count and :max_valid_count option" do# {{{
545
+ let(:test) { AnyNumericalityTestWithBothValidCount.new }
546
+
547
+ context "when invalid" do
548
+ before do
549
+ test.prices = ['0', '0', '0', '0', 'foo']
550
+ test.valid?
551
+ end
552
+
553
+ it "has 1 error message" do
554
+ expect(test.errors.empty?).to eq false
555
+ expect(test.errors.size).to eq 1
556
+ end
557
+ it "error message is associated with prices attribute" do
558
+ expect(test.errors.include?(:prices)).to eq true
559
+ end
560
+ it %q{error messsage is "Prices must be numeric (required number is 2-3)"} do
561
+ expect(test.errors.full_messages.first).to eq "Prices must be numeric (required number is 2-3)"
562
+ end
563
+ end
564
+ context "when using i18n" do
565
+ before do
566
+ @base_locale = I18n.locale
567
+ I18n.locale = :ja
568
+ test.prices = ['0', '0', '0', '0', 'foo']
569
+ test.valid?
570
+ end
571
+ after do
572
+ I18n.locale = @base_locale
573
+ end
574
+ it "error messsage is translated" do
575
+ expect(test.errors.full_messages.first).to eq "Prices は必要数(2~3)が数値でなければなりません"
576
+ end
577
+ end
578
+ end# }}}
579
+
580
+ context "when given message option" do# {{{
581
+ let(:test) { AnyNumericalityTestWithMessageOption.new }
582
+
583
+ context "when invalid" do
584
+ before do
585
+ test.prices = ['foo', "", " "]
586
+ test.valid?
587
+ end
588
+ it "error messsage uses given message" do
589
+ expect(test.errors.full_messages.first).to eq 'Prices is invalid'
590
+ end
591
+ end
592
+ context "when using i18n" do
593
+ before do
594
+ @base_locale = I18n.locale
595
+ I18n.locale = :ja
596
+ test.prices = ['foo', "", " "]
597
+ test.valid?
598
+ end
599
+ after do
600
+ I18n.locale = @base_locale
601
+ end
602
+ it "error messsage is not translated" do
603
+ expect(test.errors.full_messages.first).to eq 'Prices is invalid'
604
+ end
605
+ end
606
+ end# }}}
607
+ end
608
+ end
609
+