schemacop 3.0.6 → 3.0.11

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.
@@ -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
 
@@ -3,7 +3,9 @@ require 'test_helper'
3
3
  module Schemacop
4
4
  module V3
5
5
  class StringNodeTest < V3Test
6
- EXP_INVALID_TYPE = 'Invalid type, expected "string".'.freeze
6
+ def self.invalid_type_error(type)
7
+ "Invalid type, got type \"#{type}\", expected \"string\"."
8
+ end
7
9
 
8
10
  def test_basic
9
11
  schema :string
@@ -33,7 +35,7 @@ module Schemacop
33
35
  assert_json(type: :string)
34
36
 
35
37
  assert_validation 42 do
36
- error '/', EXP_INVALID_TYPE
38
+ error '/', StringNodeTest.invalid_type_error(Integer)
37
39
  end
38
40
 
39
41
  schema { str! :name }
@@ -41,11 +43,11 @@ module Schemacop
41
43
  assert_json(type: :object, properties: { name: { type: :string } }, required: %i[name], additionalProperties: false)
42
44
 
43
45
  assert_validation name: :foo do
44
- error '/name', EXP_INVALID_TYPE
46
+ error '/name', StringNodeTest.invalid_type_error(Symbol)
45
47
  end
46
48
 
47
49
  assert_validation name: 234 do
48
- error '/name', EXP_INVALID_TYPE
50
+ error '/name', StringNodeTest.invalid_type_error(Integer)
49
51
  end
50
52
  end
51
53
 
@@ -190,7 +192,7 @@ module Schemacop
190
192
  assert_validation ''
191
193
 
192
194
  assert_validation 234 do
193
- error '/', 'Invalid type, expected "string".'
195
+ error '/', StringNodeTest.invalid_type_error(Integer)
194
196
  end
195
197
 
196
198
  assert_cast(nil, nil)
@@ -218,7 +220,7 @@ module Schemacop
218
220
  # Integer value 42 is in the enum of allowed values, but it's not a string,
219
221
  # so the validation still fails
220
222
  assert_validation 42 do
221
- error '/', 'Invalid type, expected "string".'
223
+ error '/', StringNodeTest.invalid_type_error(Integer)
222
224
  end
223
225
  end
224
226
 
@@ -278,7 +280,7 @@ module Schemacop
278
280
  assert_validation(nil)
279
281
  assert_validation('Foo')
280
282
  assert_validation(5) do
281
- error '/', 'Invalid type, expected "string".'
283
+ error '/', StringNodeTest.invalid_type_error(Integer)
282
284
  end
283
285
 
284
286
  assert_cast('Foo', 'Foo')
@@ -297,7 +299,7 @@ module Schemacop
297
299
  assert_validation(nil)
298
300
  assert_validation('123')
299
301
  assert_validation(5) do
300
- error '/', 'Invalid type, expected "string".'
302
+ error '/', StringNodeTest.invalid_type_error(Integer)
301
303
  end
302
304
 
303
305
  assert_cast('123', 123)
@@ -364,13 +366,13 @@ module Schemacop
364
366
  # Even we put those types in the enum, they need to fail the validations,
365
367
  # as they are not strings
366
368
  assert_validation(1) do
367
- error '/', 'Invalid type, expected "string".'
369
+ error '/', StringNodeTest.invalid_type_error(Integer)
368
370
  end
369
371
  assert_validation(:bar) do
370
- error '/', 'Invalid type, expected "string".'
372
+ error '/', StringNodeTest.invalid_type_error(Symbol)
371
373
  end
372
374
  assert_validation({ qux: 42 }) do
373
- error '/', 'Invalid type, expected "string".'
375
+ error '/', StringNodeTest.invalid_type_error(Hash)
374
376
  end
375
377
 
376
378
  # These need to fail validation, as they are not in the enum list
@@ -400,6 +402,53 @@ module Schemacop
400
402
  ]
401
403
  })
402
404
  end
405
+
406
+ def test_cast_empty_or_whitespace_string
407
+ schema :string
408
+
409
+ assert_cast(nil, nil)
410
+ assert_cast('', '')
411
+ assert_cast(' ', ' ')
412
+ assert_cast("\n", "\n")
413
+ assert_cast("\t", "\t")
414
+ end
415
+
416
+ def test_cast_empty_or_whitespace_string_required
417
+ schema :string, required: true
418
+
419
+ assert_validation(nil) do
420
+ error '/', 'Value must be given.'
421
+ end
422
+
423
+ assert_cast('', '')
424
+ assert_cast(' ', ' ')
425
+ assert_cast("\n", "\n")
426
+ assert_cast("\t", "\t")
427
+ end
428
+
429
+ def test_empty_or_whitespace_string_blank_not_allowed
430
+ schema :string, allow_blank: false
431
+
432
+ assert_validation(nil) do
433
+ error '/', 'String is blank but must not be blank!'
434
+ end
435
+
436
+ assert_validation('') do
437
+ error '/', 'String is blank but must not be blank!'
438
+ end
439
+
440
+ assert_validation(' ') do
441
+ error '/', 'String is blank but must not be blank!'
442
+ end
443
+
444
+ assert_validation("\n") do
445
+ error '/', 'String is blank but must not be blank!'
446
+ end
447
+
448
+ assert_validation("\t") do
449
+ error '/', 'String is blank but must not be blank!'
450
+ end
451
+ end
403
452
  end
404
453
  end
405
454
  end
@@ -3,7 +3,10 @@ require 'test_helper'
3
3
  module Schemacop
4
4
  module V3
5
5
  class SymbolNodeTest < V3Test
6
- EXP_INVALID_TYPE = 'Invalid type, expected "Symbol".'.freeze
6
+ def self.invalid_type_error(type)
7
+ type = type.class unless type.class == Class
8
+ "Invalid type, got type \"#{type}\", expected \"Symbol\"."
9
+ end
7
10
 
8
11
  def test_basic
9
12
  schema :symbol
@@ -11,10 +14,10 @@ module Schemacop
11
14
  assert_validation :foo
12
15
  assert_validation :'n0238n)Q(hqr3hrw3'
13
16
  assert_validation 42 do
14
- error '/', EXP_INVALID_TYPE
17
+ error '/', SymbolNodeTest.invalid_type_error(Integer)
15
18
  end
16
19
  assert_validation '42' do
17
- error '/', EXP_INVALID_TYPE
20
+ error '/', SymbolNodeTest.invalid_type_error(String)
18
21
  end
19
22
  assert_json({})
20
23
  end
@@ -56,13 +59,13 @@ module Schemacop
56
59
  # Even we put those types in the enum, they need to fail the validations,
57
60
  # as they are not symbols
58
61
  assert_validation('foo') do
59
- error '/', 'Invalid type, expected "Symbol".'
62
+ error '/', SymbolNodeTest.invalid_type_error(String)
60
63
  end
61
64
  assert_validation(1) do
62
- error '/', 'Invalid type, expected "Symbol".'
65
+ error '/', SymbolNodeTest.invalid_type_error(Integer)
63
66
  end
64
67
  assert_validation({ qux: 42 }) do
65
- error '/', 'Invalid type, expected "Symbol".'
68
+ error '/', SymbolNodeTest.invalid_type_error(Hash)
66
69
  end
67
70
 
68
71
  # These need to fail validation, as they are not in the enum list
@@ -70,6 +73,20 @@ module Schemacop
70
73
  error '/', 'Value not included in enum [1, 2, "foo", :bar, {:qux=>42}].'
71
74
  end
72
75
  end
76
+
77
+ # rubocop:disable Lint/BooleanSymbol
78
+ def test_cast_str
79
+ schema :symbol, cast_str: true
80
+
81
+ assert_cast('true', :true)
82
+ assert_cast('foo', :foo)
83
+ assert_cast('1', :'1')
84
+
85
+ assert_cast(:true, :true)
86
+ assert_cast(:foo, :foo)
87
+ assert_cast(:'1', :'1')
88
+ end
89
+ # rubocop:enable Lint/BooleanSymbol
73
90
  end
74
91
  end
75
92
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemacop
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.6
4
+ version: 3.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-16 00:00:00.000000000 Z
11
+ date: 2021-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -164,8 +164,8 @@ dependencies:
164
164
  - - '='
165
165
  - !ruby/object:Gem::Version
166
166
  version: 0.21.2
167
- description:
168
- email:
167
+ description:
168
+ email:
169
169
  executables: []
170
170
  extensions: []
171
171
  extra_rdoc_files: []
@@ -277,7 +277,7 @@ homepage: https://github.com/sitrox/schemacop
277
277
  licenses:
278
278
  - MIT
279
279
  metadata: {}
280
- post_install_message:
280
+ post_install_message:
281
281
  rdoc_options: []
282
282
  require_paths:
283
283
  - lib
@@ -292,8 +292,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
292
  - !ruby/object:Gem::Version
293
293
  version: '0'
294
294
  requirements: []
295
- rubygems_version: 3.1.4
296
- signing_key:
295
+ rubygems_version: 3.1.2
296
+ signing_key:
297
297
  specification_version: 4
298
298
  summary: Schemacop validates ruby structures consisting of nested hashes and arrays
299
299
  against simple schema definitions.