schemacop 3.0.9 → 3.0.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,9 @@ require 'test_helper'
3
3
  module Schemacop
4
4
  module V3
5
5
  class ArrayNodeTest < V3Test
6
- EXP_INVALID_TYPE = 'Invalid type, expected "array".'.freeze
6
+ def self.invalid_type_error(type)
7
+ "Invalid type, got type \"#{type}\", expected \"array\"."
8
+ end
7
9
 
8
10
  def test_basic
9
11
  schema :array
@@ -54,7 +56,7 @@ module Schemacop
54
56
  error '/', 'Array has 2 items but must have exactly 1.'
55
57
  end
56
58
  assert_validation [123] do
57
- error '/[0]', 'Invalid type, expected "object".'
59
+ error '/[0]', 'Invalid type, got type "Integer", expected "object".'
58
60
  end
59
61
  end
60
62
 
@@ -64,7 +66,7 @@ module Schemacop
64
66
  assert_json(type: :array)
65
67
 
66
68
  assert_validation 42 do
67
- error '/', EXP_INVALID_TYPE
69
+ error '/', ArrayNodeTest.invalid_type_error(Integer)
68
70
  end
69
71
 
70
72
  schema { ary! :foo }
@@ -79,11 +81,11 @@ module Schemacop
79
81
  )
80
82
 
81
83
  assert_validation foo: 42 do
82
- error '/foo', EXP_INVALID_TYPE
84
+ error '/foo', ArrayNodeTest.invalid_type_error(Integer)
83
85
  end
84
86
 
85
87
  assert_validation foo: {} do
86
- error '/foo', EXP_INVALID_TYPE
88
+ error '/foo', ArrayNodeTest.invalid_type_error(ActiveSupport::HashWithIndifferentAccess)
87
89
  end
88
90
  end
89
91
 
@@ -196,7 +198,7 @@ module Schemacop
196
198
  end
197
199
 
198
200
  assert_validation %i[foo] do
199
- error '/[0]', 'Invalid type, expected "string".'
201
+ error '/[0]', 'Invalid type, got type "Symbol", expected "string".'
200
202
  end
201
203
  end
202
204
 
@@ -230,7 +232,7 @@ module Schemacop
230
232
  end
231
233
 
232
234
  assert_validation([42, 42, { name: 'Hello' }]) do
233
- error '/[0]', 'Invalid type, expected "string".'
235
+ error '/[0]', 'Invalid type, got type "Integer", expected "string".'
234
236
  end
235
237
 
236
238
  assert_validation(['foo', 42, { namex: 'Hello' }]) do
@@ -305,7 +307,7 @@ module Schemacop
305
307
  assert_validation(['foo', 42])
306
308
  assert_validation(['foo', 42, 42])
307
309
  assert_validation(['foo', :foo]) do
308
- error '/[1]', 'Invalid type, expected "integer".'
310
+ error '/[1]', 'Invalid type, got type "Symbol", expected "integer".'
309
311
  end
310
312
  end
311
313
 
@@ -328,7 +330,7 @@ module Schemacop
328
330
  assert_validation(['foo', 42])
329
331
  assert_validation(['foo', 42, 'additional', 'another'])
330
332
  assert_validation(['foo', 42, 'additional', 42, 'another']) do
331
- error '/[3]', 'Invalid type, expected "string".'
333
+ error '/[3]', 'Invalid type, got type "Integer", expected "string".'
332
334
  end
333
335
 
334
336
  assert_cast(['foo', 42], ['foo', 42])
@@ -354,7 +356,7 @@ module Schemacop
354
356
  assert_validation(['foo', 42])
355
357
  assert_validation(['foo', 42, '1990-01-01'])
356
358
  assert_validation(['foo', 42, '1990-01-01', 42]) do
357
- error '/[3]', 'Invalid type, expected "string".'
359
+ error '/[3]', 'Invalid type, got type "Integer", expected "string".'
358
360
  end
359
361
  assert_validation(['foo', 42, '1990-01-01', 'foo']) do
360
362
  error '/[3]', 'String does not match format "date".'
@@ -439,7 +441,7 @@ module Schemacop
439
441
  assert_validation(['foo', 42, { foo: '1990-01-01', bar: :baz }])
440
442
 
441
443
  assert_validation(['foo', 42, { foo: 1234 }]) do
442
- error '/[2]/foo', 'Invalid type, expected "string".'
444
+ error '/[2]/foo', 'Invalid type, got type "Integer", expected "string".'
443
445
  end
444
446
  assert_validation(['foo', 42, { foo: 'String' }]) do
445
447
  error '/[2]/foo', 'String does not match format "date".'
@@ -555,16 +557,16 @@ module Schemacop
555
557
  # Even we put those types in the enum, they need to fail the validations,
556
558
  # as they are not arrays
557
559
  assert_validation('foo') do
558
- error '/', 'Invalid type, expected "array".'
560
+ error '/', ArrayNodeTest.invalid_type_error(String)
559
561
  end
560
562
  assert_validation(1) do
561
- error '/', 'Invalid type, expected "array".'
563
+ error '/', ArrayNodeTest.invalid_type_error(Integer)
562
564
  end
563
565
  assert_validation(:bar) do
564
- error '/', 'Invalid type, expected "array".'
566
+ error '/', ArrayNodeTest.invalid_type_error(Symbol)
565
567
  end
566
568
  assert_validation({ qux: 42 }) do
567
- error '/', 'Invalid type, expected "array".'
569
+ error '/', ArrayNodeTest.invalid_type_error(Hash)
568
570
  end
569
571
 
570
572
  # These need to fail validation, as they are not in the enum list
@@ -669,8 +671,8 @@ module Schemacop
669
671
  assert_validation([1, 2, 3, 4, 5, 6])
670
672
 
671
673
  assert_validation([1, :foo, 'bar']) do
672
- error '/[1]', 'Invalid type, expected "integer".'
673
- error '/[2]', 'Invalid type, expected "integer".'
674
+ error '/[1]', 'Invalid type, got type "Symbol", expected "integer".'
675
+ error '/[2]', 'Invalid type, got type "String", expected "integer".'
674
676
  end
675
677
  end
676
678
 
@@ -4,7 +4,10 @@ require 'test_helper'
4
4
  module Schemacop
5
5
  module V3
6
6
  class BooleanNodeTest < V3Test
7
- EXP_INVALID_TYPE = 'Invalid type, expected "boolean".'.freeze
7
+ def self.invalid_type_error(type)
8
+ type = type.class unless type.class == Class
9
+ "Invalid type, got type \"#{type}\", expected \"boolean\"."
10
+ end
8
11
 
9
12
  def test_basic
10
13
  schema :boolean
@@ -47,12 +50,12 @@ module Schemacop
47
50
  assert_json(type: :boolean)
48
51
 
49
52
  assert_validation 42 do
50
- error '/', EXP_INVALID_TYPE
53
+ error '/', BooleanNodeTest.invalid_type_error(Integer)
51
54
  end
52
55
 
53
56
  [:true, 'true', :false, 'false', 0, 1].each do |value|
54
57
  assert_validation value do
55
- error '/', EXP_INVALID_TYPE
58
+ error '/', BooleanNodeTest.invalid_type_error(value)
56
59
  end
57
60
  end
58
61
 
@@ -68,7 +71,7 @@ module Schemacop
68
71
 
69
72
  [:true, 'true', :false, 'false', 0, 1].each do |value|
70
73
  assert_validation name: value do
71
- error '/name', EXP_INVALID_TYPE
74
+ error '/name', BooleanNodeTest.invalid_type_error(value)
72
75
  end
73
76
  end
74
77
  end
@@ -87,13 +90,13 @@ module Schemacop
87
90
  # Even we put those types in the enum, they need to fail the validations,
88
91
  # as they are not booleans
89
92
  assert_validation('foo') do
90
- error '/', 'Invalid type, expected "boolean".'
93
+ error '/', BooleanNodeTest.invalid_type_error(String)
91
94
  end
92
95
  assert_validation(:bar) do
93
- error '/', 'Invalid type, expected "boolean".'
96
+ error '/', BooleanNodeTest.invalid_type_error(Symbol)
94
97
  end
95
98
  assert_validation({ qux: 42 }) do
96
- error '/', 'Invalid type, expected "boolean".'
99
+ error '/', BooleanNodeTest.invalid_type_error(Hash)
97
100
  end
98
101
 
99
102
  # These need to fail validation, as they are not in the enum list
@@ -143,12 +146,49 @@ module Schemacop
143
146
  assert_cast('true', true)
144
147
  assert_cast('false', false)
145
148
 
149
+ assert_cast('1', true)
150
+ assert_cast('0', false)
151
+
152
+ assert_cast(true, true)
153
+ assert_cast(false, false)
154
+
155
+ assert_validation('5') do
156
+ error '/', 'Matches 0 definitions but should match exactly 1.'
157
+ end
158
+
159
+ # Nil can be validated, as it's not required
160
+ assert_validation(nil)
161
+
162
+ assert_validation('')
163
+
164
+ assert_cast('', nil)
165
+ assert_cast(nil, nil)
166
+ end
167
+
168
+ def test_cast_str_required
169
+ schema :boolean, cast_str: true, required: true
170
+
171
+ assert_cast('true', true)
172
+ assert_cast('false', false)
173
+
146
174
  assert_cast(true, true)
147
175
  assert_cast(false, false)
148
176
 
149
- assert_validation('1') do
177
+ assert_validation('4') do
178
+ error '/', 'Matches 0 definitions but should match exactly 1.'
179
+ end
180
+
181
+ assert_validation('foo') do
150
182
  error '/', 'Matches 0 definitions but should match exactly 1.'
151
183
  end
184
+
185
+ assert_validation(nil) do
186
+ error '/', 'Value must be given.'
187
+ end
188
+
189
+ assert_validation('') do
190
+ error '/', 'Value must be given.'
191
+ end
152
192
  end
153
193
  end
154
194
  end
@@ -3,8 +3,6 @@ require 'test_helper'
3
3
  module Schemacop
4
4
  module V3
5
5
  class HashNodeTest < V3Test
6
- EXP_INVALID_TYPE = 'Invalid type, expected "hash".'.freeze
7
-
8
6
  def test_basic
9
7
  schema
10
8
  assert_validation({})
@@ -54,7 +52,7 @@ module Schemacop
54
52
 
55
53
  assert_validation(foo: 'bar', baz: 'foo', answer: '42')
56
54
  assert_validation(foo: 'bar', baz: 'foo', answer: 42) do
57
- error '/answer', 'Invalid type, expected "string".'
55
+ error '/answer', 'Invalid type, got type "Integer", expected "string".'
58
56
  end
59
57
 
60
58
  assert_json(
@@ -70,7 +68,7 @@ module Schemacop
70
68
  @schema.validate!({ foo: 'foo' })
71
69
  end
72
70
 
73
- assert_raises_with_message Exceptions::ValidationError, '/bar: Invalid type, expected "string".' do
71
+ assert_raises_with_message Exceptions::ValidationError, '/bar: Invalid type, got type "Symbol", expected "string".' do
74
72
  @schema.validate!({ foo: 'foo', bar: :baz })
75
73
  end
76
74
  end
@@ -247,7 +245,7 @@ module Schemacop
247
245
 
248
246
  assert_validation(name: 'John', xy: 'John', bar_baz: 'Doe') do
249
247
  error '/', 'Obsolete property "xy".'
250
- error '/bar_baz', 'Invalid type, expected "integer".'
248
+ error '/bar_baz', 'Invalid type, got type "String", expected "integer".'
251
249
  end
252
250
 
253
251
  assert_json(
@@ -276,7 +274,7 @@ module Schemacop
276
274
  assert_validation(keyword: 'value')
277
275
 
278
276
  assert_validation(keyword: 42) do
279
- error '/keyword', 'Invalid type, expected "string".'
277
+ error '/keyword', 'Invalid type, got type "Integer", expected "string".'
280
278
  end
281
279
 
282
280
  assert_json(
@@ -759,10 +757,10 @@ module Schemacop
759
757
  # Even we put those types in the enum, they need to fail the validations,
760
758
  # as they are not strings
761
759
  assert_validation({ foo: 123 }) do
762
- error '/foo', 'Invalid type, expected "string".'
760
+ error '/foo', 'Invalid type, got type "Integer", expected "string".'
763
761
  end
764
762
  assert_validation({ foo: :faz }) do
765
- error '/foo', 'Invalid type, expected "string".'
763
+ error '/foo', 'Invalid type, got type "Symbol", expected "string".'
766
764
  end
767
765
 
768
766
  # These need to fail validation, as they are not in the enum list
@@ -918,7 +916,7 @@ module Schemacop
918
916
  end
919
917
 
920
918
  assert_validation({ foo: '13' }) do
921
- error '/foo', 'Invalid type, expected "integer".'
919
+ error '/foo', 'Invalid type, got type "String", expected "integer".'
922
920
  end
923
921
 
924
922
  assert_cast(nil, nil)
@@ -937,7 +935,7 @@ module Schemacop
937
935
  assert_validation({ foo: 42, bar: 13 })
938
936
 
939
937
  assert_validation({ foo: '13' }) do
940
- error '/foo', 'Invalid type, expected "integer".'
938
+ error '/foo', 'Invalid type, got type "String", expected "integer".'
941
939
  end
942
940
 
943
941
  # assert_cast(nil, nil)
@@ -959,7 +957,7 @@ module Schemacop
959
957
  end
960
958
 
961
959
  assert_validation({ foo: '13' }) do
962
- error '/foo', 'Invalid type, expected "integer".'
960
+ error '/foo', 'Invalid type, got type "String", expected "integer".'
963
961
  end
964
962
 
965
963
  assert_cast(nil, nil)
@@ -967,6 +965,46 @@ module Schemacop
967
965
  assert_cast({ foo: 42, bar: 13 }, { bar: 42 }.with_indifferent_access)
968
966
  assert_cast({ bar: 13, foo: 42 }, { bar: 42 }.with_indifferent_access)
969
967
  end
968
+
969
+ def test_cast_str_required
970
+ schema :hash do
971
+ boo! :active, cast_str: true
972
+ int! :id, cast_str: true
973
+ end
974
+
975
+ assert_validation({ active: true, id: 1 })
976
+ assert_validation({ active: 'true', id: '1' })
977
+
978
+ assert_validation({}) do
979
+ error '/active', 'Value must be given.'
980
+ error '/id', 'Value must be given.'
981
+ end
982
+
983
+ assert_cast({ active: 'true', id: '1' }, { active: true, id: 1 }.with_indifferent_access)
984
+
985
+ assert_validation({ active: '', id: '' }) do
986
+ error '/active', 'Value must be given.'
987
+ error '/id', 'Value must be given.'
988
+ end
989
+ end
990
+
991
+ def test_cast_str_optional
992
+ schema :hash do
993
+ boo? :active, cast_str: true
994
+ int? :id, cast_str: true
995
+ end
996
+
997
+ assert_validation({ active: true, id: 1 })
998
+ assert_validation({ active: 'true', id: '1' })
999
+
1000
+ assert_cast({ active: 'true', id: '1' }, { active: true, id: 1 }.with_indifferent_access)
1001
+
1002
+ assert_validation({})
1003
+ assert_validation({ active: nil, id: nil })
1004
+
1005
+ assert_validation({ active: '', id: '' })
1006
+ assert_cast({ active: '', id: '' }, { active: nil, id: nil }.with_indifferent_access)
1007
+ end
970
1008
  end
971
1009
  end
972
1010
  end
@@ -3,7 +3,9 @@ require 'test_helper'
3
3
  module Schemacop
4
4
  module V3
5
5
  class IntegerNodeTest < V3Test
6
- EXP_INVALID_TYPE = 'Invalid type, expected "integer".'.freeze
6
+ def self.invalid_type_error(type)
7
+ "Invalid type, got type \"#{type}\", expected \"integer\"."
8
+ end
7
9
 
8
10
  def test_basic
9
11
  schema :integer
@@ -59,11 +61,11 @@ module Schemacop
59
61
  )
60
62
 
61
63
  assert_validation 42.5 do
62
- error '/', EXP_INVALID_TYPE
64
+ error '/', IntegerNodeTest.invalid_type_error(Float)
63
65
  end
64
66
 
65
67
  assert_validation '42.5' do
66
- error '/', EXP_INVALID_TYPE
68
+ error '/', IntegerNodeTest.invalid_type_error(String)
67
69
  end
68
70
 
69
71
  schema { int! :age }
@@ -78,27 +80,27 @@ module Schemacop
78
80
  )
79
81
 
80
82
  assert_validation age: :foo do
81
- error '/age', EXP_INVALID_TYPE
83
+ error '/age', IntegerNodeTest.invalid_type_error(Symbol)
82
84
  end
83
85
 
84
86
  assert_validation age: '234' do
85
- error '/age', EXP_INVALID_TYPE
87
+ error '/age', IntegerNodeTest.invalid_type_error(String)
86
88
  end
87
89
 
88
90
  assert_validation age: 10.0 do
89
- error '/age', EXP_INVALID_TYPE
91
+ error '/age', IntegerNodeTest.invalid_type_error(Float)
90
92
  end
91
93
 
92
94
  assert_validation age: 4r do
93
- error '/age', EXP_INVALID_TYPE
95
+ error '/age', IntegerNodeTest.invalid_type_error(Rational)
94
96
  end
95
97
 
96
98
  assert_validation age: (4 + 0i) do
97
- error '/age', EXP_INVALID_TYPE
99
+ error '/age', IntegerNodeTest.invalid_type_error(Complex)
98
100
  end
99
101
 
100
102
  assert_validation age: BigDecimal(5) do
101
- error '/age', EXP_INVALID_TYPE
103
+ error '/age', IntegerNodeTest.invalid_type_error(BigDecimal)
102
104
  end
103
105
  end
104
106
 
@@ -210,7 +212,7 @@ module Schemacop
210
212
  assert_validation(nil)
211
213
  assert_validation(50)
212
214
  assert_validation(5.2) do
213
- error '/', 'Invalid type, expected "integer".'
215
+ error '/', IntegerNodeTest.invalid_type_error(Float)
214
216
  end
215
217
 
216
218
  assert_cast(5, 5)
@@ -289,18 +291,18 @@ module Schemacop
289
291
  # Even we put those types in the enum, they need to fail the validations,
290
292
  # as they are not integers
291
293
  assert_validation('foo') do
292
- error '/', 'Invalid type, expected "integer".'
294
+ error '/', IntegerNodeTest.invalid_type_error(String)
293
295
  end
294
296
  assert_validation(:bar) do
295
- error '/', 'Invalid type, expected "integer".'
297
+ error '/', IntegerNodeTest.invalid_type_error(Symbol)
296
298
  end
297
299
  assert_validation({ qux: 42 }) do
298
- error '/', 'Invalid type, expected "integer".'
300
+ error '/', IntegerNodeTest.invalid_type_error(Hash)
299
301
  end
300
302
 
301
303
  # This needs to fail as it is a number (float) and not an integer
302
304
  assert_validation(4.2) do
303
- error '/', 'Invalid type, expected "integer".'
305
+ error '/', IntegerNodeTest.invalid_type_error(Float)
304
306
  end
305
307
 
306
308
  # These need to fail validation, as they are not in the enum list
@@ -337,6 +339,28 @@ module Schemacop
337
339
  assert_cast('1', 1)
338
340
  assert_cast(1, 1)
339
341
 
342
+ assert_cast(nil, nil)
343
+ assert_cast('', nil)
344
+
345
+ assert_validation('true') do
346
+ error '/', 'Matches 0 definitions but should match exactly 1.'
347
+ end
348
+ end
349
+
350
+ def test_cast_str_required
351
+ schema :integer, cast_str: true, required: true
352
+
353
+ assert_cast('1', 1)
354
+ assert_cast(1, 1)
355
+
356
+ assert_validation(nil) do
357
+ error '/', 'Value must be given.'
358
+ end
359
+
360
+ assert_validation('') do
361
+ error '/', 'Value must be given.'
362
+ end
363
+
340
364
  assert_validation('true') do
341
365
  error '/', 'Matches 0 definitions but should match exactly 1.'
342
366
  end
@@ -93,6 +93,10 @@ module Schemacop
93
93
  error '/', 'Value must be given.'
94
94
  end
95
95
 
96
+ assert_validation('') do
97
+ error '/', 'Value must be given.'
98
+ end
99
+
96
100
  assert_validation('5')
97
101
  assert_validation('5.3') do
98
102
  error '/', 'Matches 0 definitions but should match exactly 1.'
@@ -156,6 +160,12 @@ module Schemacop
156
160
  assert_validation([nil]) do
157
161
  error '/[0]', 'Value must be given.'
158
162
  end
163
+ assert_validation(['']) do
164
+ error '/[0]', 'Value must be given.'
165
+ end
166
+ assert_validation([]) do
167
+ error '/', 'Array has 0 items but must have exactly 1.'
168
+ end
159
169
  end
160
170
 
161
171
  def test_not_support_block
@@ -3,7 +3,9 @@ require 'test_helper'
3
3
  module Schemacop
4
4
  module V3
5
5
  class NumberNodeTest < V3Test
6
- EXP_INVALID_TYPE = 'Invalid type, expected "big_decimal" or "float" or "integer" or "rational".'.freeze
6
+ def self.invalid_type_error(type)
7
+ "Invalid type, got type \"#{type}\", expected \"big_decimal\" or \"float\" or \"integer\" or \"rational\"."
8
+ end
7
9
 
8
10
  def test_basic
9
11
  schema :number
@@ -16,7 +18,7 @@ module Schemacop
16
18
  assert_validation(BigDecimal(6))
17
19
 
18
20
  assert_validation((6 + 0i)) do
19
- error '/', EXP_INVALID_TYPE
21
+ error '/', NumberNodeTest.invalid_type_error(Complex)
20
22
  end
21
23
 
22
24
  assert_json(type: :number)
@@ -52,7 +54,7 @@ module Schemacop
52
54
  assert_validation [30.3, 42.0]
53
55
  assert_validation [30, 30r, 30.0, BigDecimal(30)]
54
56
  assert_validation ['30.3', 30.3] do
55
- error '/[0]', EXP_INVALID_TYPE
57
+ error '/[0]', NumberNodeTest.invalid_type_error(String)
56
58
  end
57
59
  end
58
60
 
@@ -64,17 +66,17 @@ module Schemacop
64
66
  )
65
67
 
66
68
  assert_validation '42.5' do
67
- error '/', EXP_INVALID_TYPE
69
+ error '/', NumberNodeTest.invalid_type_error(String)
68
70
  end
69
71
 
70
72
  schema { num! :age }
71
73
 
72
74
  assert_validation age: :foo do
73
- error '/age', EXP_INVALID_TYPE
75
+ error '/age', NumberNodeTest.invalid_type_error(Symbol)
74
76
  end
75
77
 
76
78
  assert_validation age: '234' do
77
- error '/age', EXP_INVALID_TYPE
79
+ error '/age', NumberNodeTest.invalid_type_error(String)
78
80
  end
79
81
  end
80
82
 
@@ -261,13 +263,13 @@ module Schemacop
261
263
  # Even we put those types in the enum, they need to fail the validations,
262
264
  # as they are not numbers
263
265
  assert_validation('foo') do
264
- error '/', EXP_INVALID_TYPE
266
+ error '/', NumberNodeTest.invalid_type_error(String)
265
267
  end
266
268
  assert_validation(:bar) do
267
- error '/', EXP_INVALID_TYPE
269
+ error '/', NumberNodeTest.invalid_type_error(Symbol)
268
270
  end
269
271
  assert_validation({ qux: 42 }) do
270
- error '/', EXP_INVALID_TYPE
272
+ error '/', NumberNodeTest.invalid_type_error(Hash)
271
273
  end
272
274
 
273
275
  # These need to fail validation, as they are not in the enum list
@@ -306,6 +308,9 @@ module Schemacop
306
308
  assert_cast('1', 1)
307
309
  assert_cast(1, 1)
308
310
 
311
+ assert_validation(nil)
312
+ assert_validation('')
313
+
309
314
  assert_cast('1.0', 1.0)
310
315
  assert_cast(1.0, 1.0)
311
316
 
@@ -28,10 +28,10 @@ module Schemacop
28
28
  assert_validation 'foo'
29
29
  assert_validation Date.today
30
30
  assert_validation({}.with_indifferent_access) do
31
- error '/', 'Invalid type, expected "Date" or "String".'
31
+ error '/', 'Invalid type, got type "ActiveSupport::HashWithIndifferentAccess", expected "Date" or "String".'
32
32
  end
33
33
  assert_validation DateTime.now do
34
- error '/', 'Invalid type, expected "Date" or "String".'
34
+ error '/', 'Invalid type, got type "DateTime", expected "Date" or "String".'
35
35
  end
36
36
  end
37
37
 
@@ -44,7 +44,7 @@ module Schemacop
44
44
  assert_validation DateTime.now
45
45
  assert_validation({}.with_indifferent_access)
46
46
  assert_validation Time.now do
47
- error '/', 'Invalid type, expected "Date" or "Hash" or "String".'
47
+ error '/', 'Invalid type, got type "Time", expected "Date" or "Hash" or "String".'
48
48
  end
49
49
  end
50
50
 
@@ -74,7 +74,7 @@ module Schemacop
74
74
  assert_validation myobj: ''
75
75
  assert_validation myobj: '42'
76
76
  assert_validation myobj: Date.today do
77
- error '/myobj', 'Invalid type, expected "String".'
77
+ error '/myobj', 'Invalid type, got type "Date", expected "String".'
78
78
  end
79
79
  assert_validation({}) do
80
80
  error '/myobj', 'Value must be given.'
@@ -134,13 +134,13 @@ module Schemacop
134
134
 
135
135
  # These will fail, as they aren't of one of the classed we defined above
136
136
  assert_validation([]) do
137
- error '/', 'Invalid type, expected "String" or "Symbol" or "TrueClass".'
137
+ error '/', 'Invalid type, got type "Array", expected "String" or "Symbol" or "TrueClass".'
138
138
  end
139
139
  assert_validation({ qux: '123' }) do
140
- error '/', 'Invalid type, expected "String" or "Symbol" or "TrueClass".'
140
+ error '/', 'Invalid type, got type "Hash", expected "String" or "Symbol" or "TrueClass".'
141
141
  end
142
142
  assert_validation(false) do
143
- error '/', 'Invalid type, expected "String" or "Symbol" or "TrueClass".'
143
+ error '/', 'Invalid type, got type "FalseClass", expected "String" or "Symbol" or "TrueClass".'
144
144
  end
145
145
  end
146
146
 
@@ -182,6 +182,18 @@ module Schemacop
182
182
  schema :one_of
183
183
  end
184
184
  end
185
+
186
+ def test_treat_blank_as_nil
187
+ schema :one_of, treat_blank_as_nil: true do
188
+ boo
189
+ str format: :boolean
190
+ end
191
+
192
+ assert_validation(nil)
193
+ assert_validation('')
194
+ assert_validation('true')
195
+ assert_validation(true)
196
+ end
185
197
  end
186
198
  end
187
199
  end
@@ -26,13 +26,13 @@ module Schemacop
26
26
  assert_validation(bar: { foo: 'String', baz: { foo: 42 } })
27
27
 
28
28
  assert_validation(foo: 42) do
29
- error '/foo', 'Invalid type, expected "string".'
29
+ error '/foo', 'Invalid type, got type "Integer", expected "string".'
30
30
  end
31
31
  assert_validation(bar: { foo: 42 }) do
32
- error '/bar/foo', 'Invalid type, expected "string".'
32
+ error '/bar/foo', 'Invalid type, got type "Integer", expected "string".'
33
33
  end
34
34
  assert_validation(bar: { foo: 'String', baz: { foo: '42' } }) do
35
- error '/bar/baz/foo', 'Invalid type, expected "integer".'
35
+ error '/bar/baz/foo', 'Invalid type, got type "String", expected "integer".'
36
36
  end
37
37
 
38
38
  assert_json({
@@ -306,7 +306,7 @@ module Schemacop
306
306
  with_context context do
307
307
  assert_validation(first_name: 'John', last_name: 'Doe')
308
308
  assert_validation(first_name: 'John', last_name: 42) do
309
- error '/last_name', 'Invalid type, expected "string".'
309
+ error '/last_name', 'Invalid type, got type "Integer", expected "string".'
310
310
  end
311
311
  end
312
312