schemacop 2.1.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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