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,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