jschema 0.0.2
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.
- checksums.yaml +7 -0
- data/lib/jschema.rb +41 -0
- data/lib/jschema/json_reference.rb +65 -0
- data/lib/jschema/schema.rb +84 -0
- data/lib/jschema/schema_ref.rb +13 -0
- data/lib/jschema/simple_validator.rb +86 -0
- data/lib/jschema/string_length_validator.rb +17 -0
- data/lib/jschema/validator.rb +14 -0
- data/lib/jschema/validator/all_of.rb +29 -0
- data/lib/jschema/validator/any_of.rb +29 -0
- data/lib/jschema/validator/dependencies.rb +63 -0
- data/lib/jschema/validator/enum.rb +23 -0
- data/lib/jschema/validator/format.rb +75 -0
- data/lib/jschema/validator/items.rb +79 -0
- data/lib/jschema/validator/max_items.rb +28 -0
- data/lib/jschema/validator/max_length.rb +23 -0
- data/lib/jschema/validator/max_properties.rb +31 -0
- data/lib/jschema/validator/maximum.rb +31 -0
- data/lib/jschema/validator/min_items.rb +28 -0
- data/lib/jschema/validator/min_length.rb +23 -0
- data/lib/jschema/validator/min_properties.rb +31 -0
- data/lib/jschema/validator/minimum.rb +31 -0
- data/lib/jschema/validator/multiple_of.rb +32 -0
- data/lib/jschema/validator/not.rb +23 -0
- data/lib/jschema/validator/one_of.rb +29 -0
- data/lib/jschema/validator/pattern.rb +36 -0
- data/lib/jschema/validator/properties.rb +106 -0
- data/lib/jschema/validator/required.rb +34 -0
- data/lib/jschema/validator/type.rb +57 -0
- data/lib/jschema/validator/unique_items.rb +27 -0
- data/test/assert_received.rb +15 -0
- data/test/string_length_validator_tests.rb +18 -0
- data/test/test_assert_received.rb +39 -0
- data/test/test_integration.rb +30 -0
- data/test/test_json_reference.rb +84 -0
- data/test/test_schema.rb +125 -0
- data/test/test_schema_ref.rb +11 -0
- data/test/test_validator.rb +29 -0
- data/test/validator/argument_is_array_of_schemas_tests.rb +22 -0
- data/test/validator/assertions.rb +56 -0
- data/test/validator/properties_limit_tests.rb +13 -0
- data/test/validator/schema_validation_helpers.rb +29 -0
- data/test/validator/test_all_of.rb +30 -0
- data/test/validator/test_any_of.rb +31 -0
- data/test/validator/test_dependencies.rb +106 -0
- data/test/validator/test_enum.rb +30 -0
- data/test/validator/test_format.rb +70 -0
- data/test/validator/test_items.rb +113 -0
- data/test/validator/test_max_items.rb +26 -0
- data/test/validator/test_max_length.rb +30 -0
- data/test/validator/test_max_properties.rb +29 -0
- data/test/validator/test_maximum.rb +58 -0
- data/test/validator/test_min_items.rb +27 -0
- data/test/validator/test_min_length.rb +30 -0
- data/test/validator/test_min_properties.rb +29 -0
- data/test/validator/test_minimum.rb +58 -0
- data/test/validator/test_multiple_of.rb +38 -0
- data/test/validator/test_not.rb +32 -0
- data/test/validator/test_one_of.rb +31 -0
- data/test/validator/test_pattern.rb +32 -0
- data/test/validator/test_properties.rb +136 -0
- data/test/validator/test_required.rb +30 -0
- data/test/validator/test_simple_validator.rb +100 -0
- data/test/validator/test_type.rb +97 -0
- data/test/validator/test_unique_items.rb +30 -0
- data/test/validator/validation_against_schemas_tests.rb +24 -0
- metadata +144 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestMinimum < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_minimum_is_a_number
|
10
|
+
assert_raises_unless 'minimum', :integer, :number
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_that_exclusive_minimum_is_boolean
|
14
|
+
assert_raises(JSchema::InvalidSchema) do
|
15
|
+
build_from_schema('minimum' => 1, 'exclusiveMinimum' => 0)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_that_exclusive_minimum_can_not_be_specified_without_minimum
|
20
|
+
assert_raises(JSchema::InvalidSchema) do
|
21
|
+
build_from_schema('exclusiveMinimum' => false)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_passing_validation_when_exclusive_minimum_is_not_specified
|
26
|
+
assert build_from_schema('minimum' => 1).valid?(2)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_passing_validation_when_exclusive_minimum_is_false
|
30
|
+
schema = build_from_schema('minimum' => 2, 'exclusiveMinimum' => false)
|
31
|
+
assert schema.valid?(2)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_passing_validation_when_exclusive_minimum_is_true
|
35
|
+
schema = build_from_schema('minimum' => 1, 'exclusiveMinimum' => true)
|
36
|
+
assert schema.valid?(2)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_failing_validation_when_exclusive_minumum_is_not_specified
|
40
|
+
refute build_from_schema('minimum' => 2).valid?(1)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_failing_validation_when_exclusive_minimum_is_false
|
44
|
+
schema = build_from_schema('minimum' => 2, 'exclusiveMinimum' => false)
|
45
|
+
refute schema.valid?(1)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_failing_validation_when_exclusive_minimum_is_true
|
49
|
+
schema = build_from_schema('minimum' => 1, 'exclusiveMinimum' => true)
|
50
|
+
refute schema.valid?(1)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def validator_class
|
56
|
+
JSchema::Validator::Minimum
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestMultipleOf < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_argument_is_a_number
|
10
|
+
assert_raises_unless 'multipleOf', :number, :integer
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_that_argument_is_a_positive_number
|
14
|
+
assert_raises_for_values 'multipleOf', [0, -0.5]
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_passing_validation_when_argument_is_integer
|
18
|
+
assert validator(2).valid?(4)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_passing_validation_when_argument_is_float
|
22
|
+
assert validator(1.2).valid?(3.6)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_passing_validation_when_instance_is_negative
|
26
|
+
assert validator(1.2).valid?(-3.6)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_failing_validation
|
30
|
+
refute validator(3).valid?(7)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def validator_class
|
36
|
+
JSchema::Validator::MultipleOf
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative 'schema_validation_helpers'
|
6
|
+
|
7
|
+
class TestNot < Minitest::Test
|
8
|
+
include Assertions
|
9
|
+
include SchemaValidationHelpers
|
10
|
+
|
11
|
+
def test_that_argument_is_schema
|
12
|
+
assert_raises_unless_schema 'not'
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_passing_validation
|
16
|
+
stub_schema_validations(false) do
|
17
|
+
assert validator({}).valid?('test')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_failing_validation
|
22
|
+
stub_schema_validations(true) do
|
23
|
+
refute validator({}).valid?('test')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def validator_class
|
30
|
+
JSchema::Validator::Not
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative 'schema_validation_helpers'
|
6
|
+
require_relative 'validation_against_schemas_tests'
|
7
|
+
|
8
|
+
class TestOneOf < Minitest::Test
|
9
|
+
include Assertions
|
10
|
+
include SchemaValidationHelpers
|
11
|
+
include ValidationAgainstSchemasTests
|
12
|
+
|
13
|
+
def test_passing_validation_against_schemas
|
14
|
+
stub_schema_validations(true, false, false) do
|
15
|
+
schemas = [generate_schema, generate_schema, generate_schema]
|
16
|
+
assert validator(schemas).valid?('test')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_failing_validation_when_more_than_one_validation_passes
|
21
|
+
stub_schema_validations(true) do
|
22
|
+
refute validator([generate_schema, generate_schema]).valid?('test')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def validator_class
|
29
|
+
JSchema::Validator::OneOf
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestPattern < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_only_valid_regexp_is_allowed
|
10
|
+
assert_raises_unless 'pattern', :string
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_that_validation_always_passes_for_non_strings
|
14
|
+
assert validator('123').valid?(nil)
|
15
|
+
assert validator('123').valid?([])
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_passing_validation
|
19
|
+
assert validator('123').valid?('test123')
|
20
|
+
assert validator('\d+$').valid?('test123')
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_failing_validation
|
24
|
+
refute validator('123').valid?('test')
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def validator_class
|
30
|
+
JSchema::Validator::Pattern
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,136 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative 'schema_validation_helpers'
|
6
|
+
|
7
|
+
# rubocop:disable ClassLength
|
8
|
+
class TestProperties < Minitest::Test
|
9
|
+
include Assertions
|
10
|
+
include SchemaValidationHelpers
|
11
|
+
|
12
|
+
def test_invalid_properties_argument
|
13
|
+
keywords.each do |keyword|
|
14
|
+
assert_raises(JSchema::InvalidSchema) do
|
15
|
+
build_from_schema(keyword => 1)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_invalid_properties_schema_argument
|
21
|
+
keywords.each do |keyword|
|
22
|
+
assert_raises(JSchema::InvalidSchema) do
|
23
|
+
build_from_schema(keyword => { 'test' => 1 })
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_passing_properties_validation_by_sub_schema
|
29
|
+
keywords.each do |keyword|
|
30
|
+
assert_passing_validation keyword
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_failing_properties_validation_by_sub_schema
|
35
|
+
keywords.each do |keyword|
|
36
|
+
assert_failing_validation keyword
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_passing_validation_when_additional_properties_are_not_allowed
|
41
|
+
assert validator_with_additional_properties.valid?('test' => 123)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_failing_validation_when_additional_properties_are_not_allowed
|
45
|
+
refute validator_with_additional_properties.valid?(
|
46
|
+
'test' => 123, 'additional' => 321)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_passing_validation_when_additional_properties_are_allowed
|
50
|
+
validator = build_from_schema(
|
51
|
+
'additionalProperties' => true,
|
52
|
+
'properties' => { 'test' => {} }
|
53
|
+
)
|
54
|
+
|
55
|
+
assert validator.valid?('test' => 123, 'additional' => true)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_passing_validation_with_additional_and_pattern_properties
|
59
|
+
validator = validator_with_additional_and_pattern_properties
|
60
|
+
assert validator.valid?('test123' => true)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_failing_validation_with_additional_and_pattern_properties
|
64
|
+
validator = validator_with_additional_and_pattern_properties
|
65
|
+
refute validator.valid?('test' => true)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_passing_validation_when_any_properties_are_disallowed
|
69
|
+
assert validator_with_disallowed_properties.valid?({})
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_failing_validation_when_any_properties_are_disallowed
|
73
|
+
refute validator_with_disallowed_properties.valid?('test' => 123)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_that_validation_always_passes_for_non_object_instances
|
77
|
+
validator = build_from_schema('additionalProperties' => false)
|
78
|
+
assert validator.valid?('test')
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_building_validator_from_properties
|
82
|
+
validator = build_from_schema('properties' => { 'test' => {} })
|
83
|
+
assert_instance_of JSchema::Validator::Properties, validator
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_building_validator_from_additional_properties
|
87
|
+
validator = build_from_schema('additionalProperties' => false)
|
88
|
+
assert_instance_of JSchema::Validator::Properties, validator
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_building_validator_from_empty_schema
|
92
|
+
assert_nil build_from_schema({})
|
93
|
+
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def validator_class
|
98
|
+
JSchema::Validator::Properties
|
99
|
+
end
|
100
|
+
|
101
|
+
def keywords
|
102
|
+
['properties', 'patternProperties', 'additionalProperties']
|
103
|
+
end
|
104
|
+
|
105
|
+
def validator_with_additional_properties
|
106
|
+
build_from_schema(
|
107
|
+
'additionalProperties' => false,
|
108
|
+
'properties' => { 'test' => {} }
|
109
|
+
)
|
110
|
+
end
|
111
|
+
|
112
|
+
def validator_with_additional_and_pattern_properties
|
113
|
+
build_from_schema(
|
114
|
+
'additionalProperties' => false,
|
115
|
+
'patternProperties' => { '\d+' => {} }
|
116
|
+
)
|
117
|
+
end
|
118
|
+
|
119
|
+
def validator_with_disallowed_properties
|
120
|
+
build_from_schema('additionalProperties' => false)
|
121
|
+
end
|
122
|
+
|
123
|
+
def assert_passing_validation(keyword)
|
124
|
+
stub_schema_validations(true) do
|
125
|
+
validator = build_from_schema(keyword => { 'test' => {} })
|
126
|
+
assert validator.valid?('test' => 123)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def assert_failing_validation(keyword)
|
131
|
+
stub_schema_validations(false) do
|
132
|
+
validator = build_from_schema(keyword => { 'test' => {} })
|
133
|
+
refute validator.valid?('test' => 123)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestRequired < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_argument_is_string_array
|
10
|
+
assert_raises_unless_string_array 'required'
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_passing_validation
|
14
|
+
assert validator(['test']).valid?('test' => 123)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_passing_validation_when_property_has_false_value
|
18
|
+
assert validator(['test']).valid?('test' => false)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_failing_validation
|
22
|
+
refute validator(['test']).valid?({})
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def validator_class
|
28
|
+
JSchema::Validator::Required
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestSimpleValidator < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
@validator_class = Class.new(JSchema::SimpleValidator) do
|
12
|
+
private
|
13
|
+
|
14
|
+
self.keywords = ['param']
|
15
|
+
|
16
|
+
def validate_args(param)
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def post_initialize(param)
|
21
|
+
end
|
22
|
+
|
23
|
+
def validate_instance(param)
|
24
|
+
end
|
25
|
+
|
26
|
+
def applicable_types
|
27
|
+
[String]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_parent_attribute
|
33
|
+
parent = Object.new
|
34
|
+
example = @validator_class.new('param', parent)
|
35
|
+
assert_equal parent, example.parent
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_building_from_schema
|
39
|
+
validator_example = build_from_schema('param' => 'test')
|
40
|
+
assert_instance_of validator_class, validator_example
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_building_from_empty_schema
|
44
|
+
assert_nil build_from_schema
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_passing_validation
|
48
|
+
stub_validator nil, true do |vdr|
|
49
|
+
assert vdr.valid?('instance')
|
50
|
+
assert_nil vdr.validate('instance')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_failing_validation
|
55
|
+
stub_validator nil, false do |vdr|
|
56
|
+
refute vdr.valid?('instance')
|
57
|
+
assert_equal 'error', vdr.validate('instance')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_invalid_params
|
62
|
+
assert_raises(JSchema::InvalidSchema) do
|
63
|
+
Class.new(JSchema::SimpleValidator) do
|
64
|
+
private
|
65
|
+
|
66
|
+
def validate_args
|
67
|
+
false
|
68
|
+
end
|
69
|
+
end.new('test')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_that_validation_always_passes_if_validator_is_not_applicable
|
74
|
+
stub_validator [Fixnum], false do |vdr|
|
75
|
+
assert vdr.valid?('instance')
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_applicable_types
|
80
|
+
stub_validator [Fixnum], false do |vdr|
|
81
|
+
refute vdr.valid?(0)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
def stub_validator(applicable_types, valid)
|
88
|
+
validator_example = validator 'test'
|
89
|
+
validation_result = valid ? nil : 'error'
|
90
|
+
validator_example.stub :applicable_types, applicable_types do
|
91
|
+
validator_example.stub :validate_instance, validation_result do
|
92
|
+
yield validator_example
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def validator_class
|
98
|
+
@validator_class
|
99
|
+
end
|
100
|
+
end
|