schemacop 2.1.0 → 2.4.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 (77) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +58 -0
  3. data/LICENSE +1 -1
  4. data/README.md +250 -16
  5. data/RUBY_VERSION +1 -1
  6. data/Rakefile +6 -1
  7. data/VERSION +1 -1
  8. data/doc/Schemacop.html +32 -5
  9. data/doc/Schemacop/ArrayValidator.html +4 -4
  10. data/doc/Schemacop/BooleanValidator.html +4 -4
  11. data/doc/Schemacop/Caster.html +379 -0
  12. data/doc/Schemacop/Collector.html +298 -46
  13. data/doc/Schemacop/Exceptions.html +3 -3
  14. data/doc/Schemacop/Exceptions/InvalidSchemaError.html +3 -3
  15. data/doc/Schemacop/Exceptions/ValidationError.html +3 -3
  16. data/doc/Schemacop/FieldNode.html +19 -7
  17. data/doc/Schemacop/FloatValidator.html +4 -4
  18. data/doc/Schemacop/HashValidator.html +33 -7
  19. data/doc/Schemacop/IntegerValidator.html +4 -4
  20. data/doc/Schemacop/NilValidator.html +4 -4
  21. data/doc/Schemacop/Node.html +97 -85
  22. data/doc/Schemacop/NodeResolver.html +28 -12
  23. data/doc/Schemacop/NodeSupportingField.html +4 -4
  24. data/doc/Schemacop/NodeSupportingType.html +5 -7
  25. data/doc/Schemacop/NodeWithBlock.html +4 -4
  26. data/doc/Schemacop/NumberValidator.html +4 -4
  27. data/doc/Schemacop/ObjectValidator.html +20 -10
  28. data/doc/Schemacop/RootNode.html +4 -4
  29. data/doc/Schemacop/Schema.html +6 -6
  30. data/doc/Schemacop/StringValidator.html +3 -3
  31. data/doc/Schemacop/SymbolValidator.html +4 -4
  32. data/doc/ScopedEnv.html +3 -3
  33. data/doc/_index.html +11 -4
  34. data/doc/class_list.html +1 -1
  35. data/doc/css/style.css +10 -6
  36. data/doc/file.README.html +255 -29
  37. data/doc/frames.html +1 -1
  38. data/doc/index.html +255 -29
  39. data/doc/js/app.js +55 -0
  40. data/doc/method_list.html +99 -51
  41. data/doc/top-level-namespace.html +3 -3
  42. data/lib/schemacop.rb +15 -0
  43. data/lib/schemacop/caster.rb +38 -0
  44. data/lib/schemacop/collector.rb +53 -6
  45. data/lib/schemacop/field_node.rb +25 -3
  46. data/lib/schemacop/node.rb +16 -4
  47. data/lib/schemacop/node_resolver.rb +10 -2
  48. data/lib/schemacop/node_supporting_field.rb +0 -2
  49. data/lib/schemacop/node_supporting_type.rb +21 -1
  50. data/lib/schemacop/schema.rb +3 -3
  51. data/lib/schemacop/validator/array_validator.rb +1 -1
  52. data/lib/schemacop/validator/float_validator.rb +1 -1
  53. data/lib/schemacop/validator/hash_validator.rb +15 -2
  54. data/lib/schemacop/validator/integer_validator.rb +1 -1
  55. data/lib/schemacop/validator/object_validator.rb +7 -1
  56. data/schemacop.gemspec +15 -9
  57. data/test/casting_test.rb +90 -0
  58. data/test/collector_test.rb +45 -0
  59. data/test/custom_check_test.rb +20 -13
  60. data/test/custom_if_test.rb +12 -12
  61. data/test/defaults_test.rb +71 -0
  62. data/test/nil_dis_allow_test.rb +6 -6
  63. data/test/node_resolver_test.rb +26 -0
  64. data/test/short_forms_test.rb +86 -64
  65. data/test/test_helper.rb +7 -0
  66. data/test/types_test.rb +5 -5
  67. data/test/validator_array_test.rb +16 -16
  68. data/test/validator_boolean_test.rb +2 -2
  69. data/test/validator_float_test.rb +15 -15
  70. data/test/validator_hash_test.rb +5 -5
  71. data/test/validator_integer_test.rb +9 -9
  72. data/test/validator_nil_test.rb +1 -1
  73. data/test/validator_number_test.rb +19 -19
  74. data/test/validator_object_test.rb +33 -15
  75. data/test/validator_string_test.rb +12 -12
  76. data/test/validator_symbol_test.rb +2 -2
  77. metadata +43 -6
@@ -0,0 +1,90 @@
1
+ require 'test_helper'
2
+
3
+ module Schemacop
4
+ class CastingTest < Minitest::Test
5
+ def test_basic
6
+ s = Schema.new :integer, cast: [String]
7
+
8
+ input = '42'
9
+ output = s.validate!(input)
10
+
11
+ assert_equal(42, output)
12
+ end
13
+
14
+ def test_field
15
+ s = Schema.new do
16
+ req :foo, :integer, cast: [String]
17
+ end
18
+
19
+ input = { foo: '42' }
20
+ output = s.validate!(input)
21
+
22
+ assert_equal({ foo: '42' }, input)
23
+ assert_equal({ foo: 42 }, output)
24
+ end
25
+
26
+ def test_first_type_matches
27
+ s = Schema.new do
28
+ type TrueClass
29
+ type :integer, cast: [String]
30
+ end
31
+
32
+ assert_equal(42, s.validate!('42'))
33
+ assert_equal(42, s.validate!(42))
34
+ assert_equal(true, s.validate!(true))
35
+ end
36
+
37
+ def test_with_if
38
+ s = Schema.new do
39
+ type Float, if: proc { |data| !data.is_a?(String) || data.match(/\d+\.\d+/) }, cast: [String]
40
+ type Integer, cast: [String]
41
+ end
42
+
43
+ assert_equal 42.2, s.validate!('42.2')
44
+ assert_equal 42, s.validate!('42')
45
+ end
46
+
47
+ def test_arrays
48
+ s = Schema.new do
49
+ req :foo, :array, :integer, cast: [String]
50
+ end
51
+
52
+ assert_equal(
53
+ { foo: [1, 2, 3] },
54
+ s.validate!(foo: ['1', '2', '3'])
55
+ )
56
+ end
57
+
58
+ def test_check_after_cast
59
+ s = Schema.new do
60
+ type Integer, cast: [String], check: proc { |v| v > 41 }
61
+ end
62
+
63
+ assert_equal 42, s.validate!('42')
64
+ assert_equal 43, s.validate!('43')
65
+ assert_equal 42, s.validate!(42)
66
+ assert_verr { s.validate!('41') }
67
+ assert_verr { s.validate!(42.2) }
68
+ end
69
+
70
+ def test_multilple_types
71
+ e = assert_raises Exceptions::InvalidSchemaError do
72
+ Schema.new do
73
+ type :number, cast: [String]
74
+ end
75
+ end
76
+
77
+ assert_equal 'Casting is only allowed for single-value datatypes, '\
78
+ 'but type Schemacop::NumberValidator has classes ["Integer", "Float"].',
79
+ e.message
80
+ end
81
+
82
+ def test_custom_castings
83
+ s = Schema.new do
84
+ type :integer, cast: { String => proc { |v| Integer(v) } }
85
+ end
86
+
87
+ assert_equal 42, s.validate!('42')
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,45 @@
1
+ require 'test_helper'
2
+
3
+ module Schemacop
4
+ class CollectorTest < Minitest::Test
5
+ def test_no_root_node
6
+ s = Schema.new do
7
+ req :a, :string
8
+ end
9
+
10
+ col = s.validate(a: 0)
11
+ assert col.exceptions.first[:path].first !~ %r{^/root}, 'Root node is present in the path.'
12
+ end
13
+
14
+ def test_correct_path
15
+ s = Schema.new do
16
+ req :long_symbol, :string
17
+ req 'long_string', :string
18
+ req 123, :string
19
+ end
20
+
21
+ col = s.validate('long_string' => 0, long_symbol: 0, 123 => 0)
22
+
23
+ symbol = col.exceptions[0]
24
+ string = col.exceptions[1]
25
+ number = col.exceptions[2]
26
+
27
+ assert symbol[:path].first =~ %r{^/long_symbol}
28
+ assert string[:path].first =~ %r{^/long_string}
29
+ assert number[:path].first =~ %r{^/123}
30
+ end
31
+
32
+ def test_nested_paths
33
+ s = Schema.new do
34
+ req :one do
35
+ req :two, :string
36
+ end
37
+ req :three, :string
38
+ end
39
+
40
+ col = s.validate(one: { two: 0 }, three: 0)
41
+ assert_equal 2, col.exceptions[0][:path].length
42
+ assert_equal 1, col.exceptions[1][:path].length
43
+ end
44
+ end
45
+ end
@@ -4,22 +4,29 @@ module Schemacop
4
4
  class CustomCheckTest < Minitest::Test
5
5
  def test_integer_check_short_form
6
6
  s = Schema.new :integer, check: proc { |i| i.even? }
7
- assert_nil s.validate!(2)
8
- assert_nil s.validate!(-8)
9
- assert_nil s.validate!(0)
7
+ assert_nothing_raised { s.validate!(2) }
8
+ assert_nothing_raised { s.validate!(-8) }
9
+ assert_nothing_raised { s.validate!(0) }
10
10
  assert_verr { s.validate!(1) }
11
11
  assert_verr { s.validate!(-7) }
12
12
  assert_verr { s.validate!(2.1) }
13
13
  end
14
14
 
15
+ def test_custom_error_message
16
+ s = Schema.new :integer, check: proc { |i| i.even? ? true : 'Custom error' }
17
+ assert_nothing_raised { s.validate!(2) }
18
+ exception = assert_verr { s.validate!(3) }
19
+ assert_match(/Custom :check failed: Custom error\./, exception.message)
20
+ end
21
+
15
22
  def test_integer_check_with_lambda
16
23
  s = Schema.new do
17
24
  type :integer, check: ->(i) { i.even? }
18
25
  end
19
26
 
20
- assert_nil s.validate!(2)
21
- assert_nil s.validate!(-8)
22
- assert_nil s.validate!(0)
27
+ assert_nothing_raised { s.validate!(2) }
28
+ assert_nothing_raised { s.validate!(-8) }
29
+ assert_nothing_raised { s.validate!(0) }
23
30
  assert_verr { s.validate!(1) }
24
31
  assert_verr { s.validate!(-7) }
25
32
  assert_verr { s.validate!(2.1) }
@@ -29,7 +36,7 @@ module Schemacop
29
36
  s = Schema.new do
30
37
  type :number, check: proc { |x| x == 42 }
31
38
  end
32
- assert_nil s.validate!(42)
39
+ assert_nothing_raised { s.validate!(42) }
33
40
  assert_verr { s.validate!(42.1) }
34
41
  assert_verr { s.validate!(0) }
35
42
  end
@@ -40,7 +47,7 @@ module Schemacop
40
47
  type :integer
41
48
  end
42
49
  end
43
- assert_nil s.validate!([1, 2, 3])
50
+ assert_nothing_raised { s.validate!([1, 2, 3]) }
44
51
  assert_verr { s.validate!([2, 3, 4]) }
45
52
  end
46
53
 
@@ -51,7 +58,7 @@ module Schemacop
51
58
  end
52
59
  end
53
60
 
54
- assert_nil s.validate!([4, 3, 2])
61
+ assert_nothing_raised { s.validate!([4, 3, 2]) }
55
62
  assert_verr { s.validate!([3, 2]) }
56
63
  assert_verr { s.validate!([4, 1]) }
57
64
  end
@@ -61,7 +68,7 @@ module Schemacop
61
68
  opt 1, :integer
62
69
  opt 'two', :string
63
70
  end
64
- assert_nil s.validate!(1 => 1, 'two' => 'two')
71
+ assert_nothing_raised { s.validate!(1 => 1, 'two' => 'two') }
65
72
  assert_verr { s.validate!(1 => 2, 'two' => 'two') }
66
73
  assert_verr { s.validate!(1 => 1, 'two' => 'one') }
67
74
  end
@@ -75,9 +82,9 @@ module Schemacop
75
82
  req :first_name, :string, min: 3
76
83
  end
77
84
 
78
- assert_nil s.validate!(first_name: 'Bob')
79
- assert_nil s.validate!(first_name: 'Sandy')
80
- assert_nil s.validate!(first_name: 'Sansibar')
85
+ assert_nothing_raised { s.validate!(first_name: 'Bob') }
86
+ assert_nothing_raised { s.validate!(first_name: 'Sandy') }
87
+ assert_nothing_raised { s.validate!(first_name: 'Sansibar') }
81
88
 
82
89
  assert_verr { s.validate!(first_name: 'Sandkasten') }
83
90
  assert_verr { s.validate!(first_name: 'a') }
@@ -7,7 +7,7 @@ module Schemacop
7
7
  type :integer, if: proc { |data| data.odd? }
8
8
  end
9
9
 
10
- assert_nil s.validate! 5
10
+ assert_nothing_raised { s.validate! 5 }
11
11
  assert_verr { s.validate! nil }
12
12
  assert_verr { s.validate! 4 }
13
13
  end
@@ -18,8 +18,8 @@ module Schemacop
18
18
  type :string
19
19
  end
20
20
 
21
- assert_nil s.validate!(5)
22
- assert_nil s.validate!('abc')
21
+ assert_nothing_raised { s.validate!(5) }
22
+ assert_nothing_raised { s.validate!('abc') }
23
23
  assert_verr { s.validate!(4) }
24
24
  end
25
25
 
@@ -29,8 +29,8 @@ module Schemacop
29
29
  req :foo, :string, min: 5
30
30
  end
31
31
 
32
- assert_nil s.validate!(foo: 'abc')
33
- assert_nil s.validate!(foo: 'bcdef')
32
+ assert_nothing_raised { s.validate!(foo: 'abc') }
33
+ assert_nothing_raised { s.validate!(foo: 'bcdef') }
34
34
  assert_verr { s.validate!(foo: 'a') }
35
35
  assert_verr { s.validate!(foo: 'bcde') }
36
36
  end
@@ -41,8 +41,8 @@ module Schemacop
41
41
  req :foo, :integer
42
42
  end
43
43
 
44
- assert_nil s.validate!(foo: 3)
45
- assert_nil s.validate!(foo: 'abc')
44
+ assert_nothing_raised { s.validate!(foo: 3) }
45
+ assert_nothing_raised { s.validate!(foo: 'abc') }
46
46
  assert_verr { s.validate!(foo: 'bcd') }
47
47
  assert_verr { s.validate!(foo: true) }
48
48
  end
@@ -61,8 +61,8 @@ module Schemacop
61
61
  end
62
62
  end
63
63
 
64
- assert_nil s.validate!(user: [{ admin: true, admin_only: 'foo' }, { admin: false, non_admin_only: 'foo' }])
65
- assert_nil s.validate!(user: [{ admin: true, admin_only: 'foo' }, { non_admin_only: 'foo' }])
64
+ assert_nothing_raised { s.validate!(user: [{ admin: true, admin_only: 'foo' }, { admin: false, non_admin_only: 'foo' }]) }
65
+ assert_nothing_raised { s.validate!(user: [{ admin: true, admin_only: 'foo' }, { non_admin_only: 'foo' }]) }
66
66
  assert_verr { s.validate!(user: [{ admin: false, admin_only: 'foo' }]) }
67
67
  assert_verr { s.validate!(user: [{ admin: true, non_admin_only: 'foo' }]) }
68
68
  end
@@ -75,8 +75,8 @@ module Schemacop
75
75
  req :bar, :integer
76
76
  end
77
77
 
78
- assert_nil s.validate!(foo: 5, bar: 5)
79
- assert_nil s.validate!(foo: 5, bar: 4)
78
+ assert_nothing_raised { s.validate!(foo: 5, bar: 5) }
79
+ assert_nothing_raised { s.validate!(foo: 5, bar: 4) }
80
80
  assert_verr { s.validate!(foo: 4, bar: 5) }
81
81
  assert_verr { s.validate!(foo: 4, bar: 4) }
82
82
  end
@@ -87,7 +87,7 @@ module Schemacop
87
87
  opt :foo, :integer
88
88
  end
89
89
 
90
- assert_nil s.validate!(foo: 4)
90
+ assert_nothing_raised { s.validate!(foo: 4) }
91
91
  assert_verr { s.validate!({}) }
92
92
  assert_verr { s.validate!('something') }
93
93
  end
@@ -0,0 +1,71 @@
1
+ require 'test_helper'
2
+
3
+ module Schemacop
4
+ class DefaultsTest < Minitest::Test
5
+ def test_basic
6
+ s = Schema.new :integer, default: 42
7
+
8
+ input = nil
9
+ output = s.validate!(input)
10
+
11
+ assert_equal(42, output)
12
+ end
13
+
14
+ def test_hash
15
+ s = Schema.new do
16
+ opt :foo, :string, default: 'bar'
17
+ end
18
+
19
+ input = { foo: nil }
20
+ output = s.validate!(input)
21
+ assert_equal({ foo: 'bar'}, output)
22
+ end
23
+
24
+ def test_missing_hash_key
25
+ s = Schema.new do
26
+ opt :foo, :string, default: 'bar'
27
+ end
28
+
29
+ input = {}
30
+ output = s.validate!(input)
31
+ assert_equal({ foo: 'bar'}, output)
32
+ end
33
+
34
+ def test_entire_hash
35
+ s = Schema.new do
36
+ opt :foo, :hash, default: { name: { first: 'Foo', last: 'Bar' } } do
37
+ req :name do
38
+ req :first
39
+ req :last
40
+ end
41
+ end
42
+ end
43
+
44
+ input = {}
45
+ output = s.validate!(input)
46
+ assert_equal({ foo: { name: { first: 'Foo', last: 'Bar' } } }, output)
47
+ end
48
+
49
+ def test_entire_array
50
+ s = Schema.new do
51
+ opt :foo, :array, default: [{ bar: 42}] do
52
+ req :bar
53
+ end
54
+ end
55
+
56
+ input = {}
57
+ output = s.validate!(input)
58
+ assert_equal({ foo: [{ bar: 42 }] }, output)
59
+ end
60
+
61
+ def test_invalid_default
62
+ s = Schema.new :integer, default: '42'
63
+
64
+ input = nil
65
+
66
+ assert_verr do
67
+ s.validate!(input)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -14,8 +14,8 @@ module Schemacop
14
14
  type :boolean
15
15
  end
16
16
  end
17
- assert_nil s.validate!(o: nil, r: false)
18
- assert_nil s.validate!(o: false, r: false)
17
+ assert_nothing_raised { s.validate!(o: nil, r: false) }
18
+ assert_nothing_raised { s.validate!(o: false, r: false) }
19
19
  assert_verr { s.validate!(o: true, r: nil) }
20
20
  assert_verr { s.validate!(o: nil, r: nil) }
21
21
  assert_verr { s.validate!(r: true) }
@@ -30,10 +30,10 @@ module Schemacop
30
30
  type :boolean
31
31
  end
32
32
  end
33
- assert_nil s.validate!(o: nil, r: false)
34
- assert_nil s.validate!(o: false, r: false)
35
- assert_nil s.validate!(r: true)
36
- assert_nil s.validate!({})
33
+ assert_nothing_raised { s.validate!(o: nil, r: false) }
34
+ assert_nothing_raised { s.validate!(o: false, r: false) }
35
+ assert_nothing_raised { s.validate!(r: true) }
36
+ assert_nothing_raised { s.validate!({}) }
37
37
  assert_verr { s.validate!(o: true, r: nil) }
38
38
  assert_verr { s.validate!(o: nil, r: nil) }
39
39
  end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+
3
+ module Schemacop
4
+ class NodeResolverTest < Minitest::Test
5
+ class ClassA; end
6
+ class ClassB; end
7
+ class ClassC; end
8
+ class ClassD; end
9
+
10
+ def test_insert_before
11
+ prev_node_classes = NodeResolver.node_classes
12
+
13
+ NodeResolver.node_classes = []
14
+
15
+ NodeResolver.register(ClassA)
16
+ NodeResolver.register(ClassB)
17
+ NodeResolver.register(ClassC)
18
+ NodeResolver.register(ClassD, before: ClassB)
19
+
20
+ assert_equal [ClassA, ClassD, ClassB, ClassC],
21
+ NodeResolver.node_classes
22
+ ensure
23
+ NodeResolver.node_classes = prev_node_classes
24
+ end
25
+ end
26
+ end
@@ -2,6 +2,9 @@ require 'test_helper'
2
2
 
3
3
  module Schemacop
4
4
  class ShortFormsTest < Minitest::Test
5
+ class User; end
6
+ class Group; end
7
+
5
8
  def test_constructor_defaults_to_hash
6
9
  s = Schema.new do
7
10
  req! :r do
@@ -12,8 +15,8 @@ module Schemacop
12
15
  end
13
16
  end
14
17
 
15
- assert_nil s.validate!(r: 3)
16
- assert_nil s.validate!(r: 3, o: 1)
18
+ assert_nothing_raised { s.validate!(r: 3) }
19
+ assert_nothing_raised { s.validate!(r: 3, o: 1) }
17
20
  assert_verr { s.validate!(o: 1) }
18
21
  assert_verr { s.validate!(1) }
19
22
  assert_verr { s.validate!(r: 3, n: 5) }
@@ -27,8 +30,8 @@ module Schemacop
27
30
  end
28
31
  end
29
32
 
30
- assert_nil s.validate!(r: 3)
31
- assert_nil s.validate!(r: 'asd', o: self)
33
+ assert_nothing_raised { s.validate!(r: 3) }
34
+ assert_nothing_raised { s.validate!(r: 'asd', o: self) }
32
35
  assert_verr { s.validate!(o: -5.3) }
33
36
  assert_verr { s.validate!(Class) }
34
37
  assert_verr { s.validate!(r: s, n: true) }
@@ -42,8 +45,8 @@ module Schemacop
42
45
  end
43
46
  end
44
47
 
45
- assert_nil s.validate!(i: 5)
46
- assert_nil s.validate!(i: 5, f: 2.3)
48
+ assert_nothing_raised { s.validate!(i: 5) }
49
+ assert_nothing_raised { s.validate!(i: 5, f: 2.3) }
47
50
  assert_verr { s.validate!(i: 4, f: 2.3) }
48
51
  assert_verr { s.validate!(i: 5, f: 2.2) }
49
52
  assert_verr { s.validate!(i: 5, f: 3.4) }
@@ -54,7 +57,7 @@ module Schemacop
54
57
 
55
58
  def test_inline_type_in_constructor
56
59
  s = Schema.new :integer, min: 2, max: 4
57
- assert_nil s.validate!(3)
60
+ assert_nothing_raised { s.validate!(3) }
58
61
  assert_verr { s.validate!(5) }
59
62
  assert_verr { s.validate!(1) }
60
63
  end
@@ -66,9 +69,9 @@ module Schemacop
66
69
  opt! :optint, :integer, min: 2, max: 3
67
70
  end
68
71
 
69
- assert_nil s.validate!(nilbool: nil, nilint: nil)
70
- assert_nil s.validate!(nilbool: false, nilint: 2)
71
- assert_nil s.validate!(nilbool: false, nilint: 3, optint: 2)
72
+ assert_nothing_raised { s.validate!(nilbool: nil, nilint: nil) }
73
+ assert_nothing_raised { s.validate!(nilbool: false, nilint: 2) }
74
+ assert_nothing_raised { s.validate!(nilbool: false, nilint: 3, optint: 2) }
72
75
  assert_verr { s.validate!(nilbool: false, nilint: 2, optint: nil) }
73
76
  assert_verr { s.validate!(nilbool: false, nilint: 2, optint: 4) }
74
77
  assert_verr { s.validate!(nilbool: false, nilint: -5, optint: 2) }
@@ -78,7 +81,7 @@ module Schemacop
78
81
  s = Schema.new do
79
82
  type(:array, :string)
80
83
  end
81
- assert_nil s.validate!(%w(a b))
84
+ assert_nothing_raised { s.validate!(%w(a b)) }
82
85
  end
83
86
 
84
87
  # TODO: Get the exception message into the assertion
@@ -94,10 +97,10 @@ module Schemacop
94
97
  s = Schema.new do
95
98
  type(:array, [:array, :integer])
96
99
  end
97
- assert_nil s.validate! [[], 3]
98
- assert_nil s.validate! [[:a, 9], 3]
99
- assert_nil s.validate! [[]]
100
- assert_nil s.validate! [3]
100
+ assert_nothing_raised { s.validate! [[], 3] }
101
+ assert_nothing_raised { s.validate! [[:a, 9], 3] }
102
+ assert_nothing_raised { s.validate! [[]] }
103
+ assert_nothing_raised { s.validate! [3] }
101
104
  assert_verr { s.validate! [[], 'string'] }
102
105
  assert_verr { s.validate! [3, 'string'] }
103
106
  assert_verr { s.validate! ['string'] }
@@ -116,7 +119,7 @@ module Schemacop
116
119
  s = Schema.new do
117
120
  type :array, :integer
118
121
  end
119
- assert_nil s.validate! [5]
122
+ assert_nothing_raised { s.validate! [5] }
120
123
  assert_verr { s.validate! [nil] }
121
124
  assert_verr { s.validate! ['a'] }
122
125
  assert_verr { s.validate! [5, 'a'] }
@@ -127,7 +130,7 @@ module Schemacop
127
130
  s = Schema.new do
128
131
  type :array, :array, :integer
129
132
  end
130
- assert_nil s.validate! [[5]]
133
+ assert_nothing_raised { s.validate! [[5]] }
131
134
  assert_verr { s.validate! [5] }
132
135
  assert_verr { s.validate! [[nil]] }
133
136
  assert_verr { s.validate! [['a']] }
@@ -142,6 +145,7 @@ module Schemacop
142
145
  end
143
146
  req :name, :integer, min: 5, max: 7
144
147
  req :id, [:integer, :string]
148
+ req :callback, :symbol
145
149
  req :attrs do
146
150
  req :color do
147
151
  type :integer
@@ -156,21 +160,24 @@ module Schemacop
156
160
  end
157
161
  end
158
162
 
159
- assert_nil s.validate!(
160
- name: 6,
161
- foo: { bar: nil },
162
- attrs: { color: 5 },
163
- id: 'hallo',
164
- colors: [5, 'sdf'],
165
- cars: [
166
- {
167
- make: 'Tesla',
168
- ps: 5,
169
- electric: nil,
170
- years: [1993, 1990]
171
- }
172
- ]
173
- )
163
+ assert_nothing_raised do
164
+ s.validate!(
165
+ name: 6,
166
+ foo: { bar: nil },
167
+ attrs: { color: 5 },
168
+ id: 'hallo',
169
+ callback: :funky_function,
170
+ colors: [5, 'sdf'],
171
+ cars: [
172
+ {
173
+ make: 'Tesla',
174
+ ps: 5,
175
+ electric: nil,
176
+ years: [1993, 1990]
177
+ }
178
+ ]
179
+ )
180
+ end
174
181
  end
175
182
 
176
183
  def test_super_deep_wild_should_pass
@@ -205,25 +212,27 @@ module Schemacop
205
212
  type :integer, min: 3
206
213
  end
207
214
 
208
- assert_nil s.validate!(
209
- id: 'meine ID',
210
- friends: [
211
- 'Rodney',
212
- true,
213
- false,
214
- {
215
- rod: {
216
- fritz:
217
- [
218
- [1],
219
- [3]
220
- ]
215
+ assert_nothing_raised do
216
+ s.validate!(
217
+ id: 'meine ID',
218
+ friends: [
219
+ 'Rodney',
220
+ true,
221
+ false,
222
+ {
223
+ rod: {
224
+ fritz:
225
+ [
226
+ [1],
227
+ [3]
228
+ ]
229
+ }
221
230
  }
222
- }
223
- ]
224
- )
225
- assert_nil s.validate!(id: 'my ID', friends: nil)
226
- assert_nil s.validate!(3)
231
+ ]
232
+ )
233
+ end
234
+ assert_nothing_raised { s.validate!(id: 'my ID', friends: nil) }
235
+ assert_nothing_raised { s.validate!(3) }
227
236
  end
228
237
 
229
238
  def test_example_from_readme
@@ -239,12 +248,14 @@ module Schemacop
239
248
  end
240
249
  end
241
250
 
242
- assert_nil schema.validate!(
243
- naming: { first_name: 'John',
244
- last_name: 'Doe' },
245
- age: 34,
246
- password: 'my*pass'
247
- )
251
+ assert_nothing_raised do
252
+ schema.validate!(
253
+ naming: { first_name: 'John',
254
+ last_name: 'Doe' },
255
+ age: 34,
256
+ password: 'my*pass'
257
+ )
258
+ end
248
259
 
249
260
  assert_verr do
250
261
  schema.validate!(
@@ -254,6 +265,7 @@ module Schemacop
254
265
  password: 'my*pass'
255
266
  )
256
267
  end
268
+
257
269
  assert_verr do
258
270
  schema.validate!(
259
271
  naming: { first_name: 'John',
@@ -272,8 +284,8 @@ module Schemacop
272
284
  req :description, :string, min: 35
273
285
  end
274
286
 
275
- assert_nil schema2.validate!(description: 'Abstract: a short description')
276
- assert_nil schema2.validate!(description: 'Since this is no abstract, we expect it to be longer.')
287
+ assert_nothing_raised { schema2.validate!(description: 'Abstract: a short description') }
288
+ assert_nothing_raised { schema2.validate!(description: 'Since this is no abstract, we expect it to be longer.') }
277
289
  assert_verr { schema2.validate!(description: 'Abstract: A short description.') }
278
290
  assert_verr { schema2.validate!(description: 'Abstract: This is gonna be way way too long for an abstract.') }
279
291
  assert_verr { schema2.validate!(description: 'This is too short.') }
@@ -283,16 +295,16 @@ module Schemacop
283
295
  s = Schema.new do
284
296
  type :array, :integer, min: 3
285
297
  end
286
- assert_nil s.validate!([3])
287
- assert_nil s.validate!([3, 4, 5])
298
+ assert_nothing_raised { s.validate!([3]) }
299
+ assert_nothing_raised { s.validate!([3, 4, 5]) }
288
300
  assert_verr { s.validate!([3, 2]) }
289
301
  assert_verr { s.validate!([5, 'string']) }
290
302
  end
291
303
 
292
304
  def test_one_line_array_schema
293
305
  s = Schema.new :array, :integer, min: 3
294
- assert_nil s.validate!([3])
295
- assert_nil s.validate!([3, 4, 5])
306
+ assert_nothing_raised { s.validate!([3]) }
307
+ assert_nothing_raised { s.validate!([3, 4, 5]) }
296
308
  assert_verr { s.validate!([3, 2]) }
297
309
  assert_verr { s.validate!([5, 'string']) }
298
310
  end
@@ -301,16 +313,26 @@ module Schemacop
301
313
  s = Schema.new do
302
314
  req :bar
303
315
  end
304
- assert_nil s.validate!(bar: 2)
316
+ assert_nothing_raised { s.validate!(bar: 2) }
305
317
  assert_verr { s.validate!(foo: 2) }
306
318
  assert_verr { s.validate!([2]) }
307
319
  end
308
320
 
309
321
  def test_one_line_string_schema
310
322
  s = Schema.new :string, min: 4
311
- assert_nil s.validate!('1234')
323
+ assert_nothing_raised { s.validate!('1234') }
312
324
  assert_verr { s.validate!('123') }
313
325
  assert_verr { s.validate!(string: '1234') }
314
326
  end
327
+
328
+ def test_inline_objects
329
+ s = Schema.new do
330
+ req :user, User
331
+ req :group, Group
332
+ end
333
+
334
+ assert_nothing_raised { s.validate!(user: User.new, group: Group.new) }
335
+ assert_verr { s.validate!(user: Group.new, group: User.new) }
336
+ end
315
337
  end
316
338
  end