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.
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
+