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