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,30 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestEnum < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_argument_is_non_empty_array_of_unique_values
|
10
|
+
assert_raises_unless_non_empty_array 'enum'
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_passing_validation
|
14
|
+
assert validator(['test']).valid?('test')
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_passing_validtion_with_null
|
18
|
+
assert validator([nil]).valid?(nil)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_failing_validation
|
22
|
+
refute validator(['test']).valid?(0)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def validator_class
|
28
|
+
JSchema::Validator::Enum
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require_relative 'assertions'
|
3
|
+
|
4
|
+
class TestFormat < Minitest::Test
|
5
|
+
include Assertions
|
6
|
+
|
7
|
+
def test_that_argument_is_string
|
8
|
+
assert_raises_unless('format', :string)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_that_argument_is_one_of_allowed_formats
|
12
|
+
assert_raises(JSchema::InvalidSchema) do
|
13
|
+
validator 'unsupported_format'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_passing_validation_by_date_time_format
|
18
|
+
assert validator('date-time').valid?('2001-02-03T04:05:06+07:00')
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_failing_validation_by_date_time_format
|
22
|
+
refute validator('date-time').valid?('2001-x2-03T04:05:06+07:00')
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_passing_validation_by_email_format
|
26
|
+
assert validator('email').valid?('steve@apple.com')
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_failing_validation_by_email_format
|
30
|
+
refute validator('email').valid?('invalid_email')
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_passing_validation_by_hostname_format
|
34
|
+
assert validator('hostname').valid?('apple.com')
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_failing_validation_by_hostname_format
|
38
|
+
refute validator('hostname').valid?('invalid+hostname')
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_passing_validation_by_ipv4_format
|
42
|
+
assert validator('ipv4').valid?('127.0.0.1')
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_failing_validation_by_ipv4_format
|
46
|
+
refute validator('ipv4').valid?('0')
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_passing_validation_by_ipv6_format
|
50
|
+
assert validator('ipv6').valid?('::1')
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_failing_validation_by_ipv6_format
|
54
|
+
refute validator('ipv6').valid?('0')
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_passing_validation_by_uri_format
|
58
|
+
assert validator('uri').valid?('http://example.com/')
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_failing_validation_by_uri_format
|
62
|
+
refute validator('uri').valid?('://')
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def validator_class
|
68
|
+
JSchema::Validator::Format
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative 'schema_validation_helpers'
|
6
|
+
|
7
|
+
class TestItems < Minitest::Test
|
8
|
+
include Assertions
|
9
|
+
include SchemaValidationHelpers
|
10
|
+
|
11
|
+
def test_that_additional_items_must_be_boolean_or_schema
|
12
|
+
assert_raises_unless 'additionalItems', :boolean, :object
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_that_additional_items_accepts_only_valid_schema
|
16
|
+
assert_raises_unless_schema 'additionalItems'
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_that_items_must_be_object_or_array
|
20
|
+
assert_raises_unless 'items', :object, :array
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_that_items_must_be_a_valid_schema
|
24
|
+
assert_raises_unless_schema 'items'
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_that_items_must_be_schema_array
|
28
|
+
assert_raises_unless_schema_array 'items'
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_passing_validation_by_items_schema
|
32
|
+
stub_schema_validations(true) do
|
33
|
+
assert build_from_schema('items' => {}).valid?(['test'])
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_passing_validation_by_items_schema_array
|
38
|
+
stub_schema_validations(true) do
|
39
|
+
schema = { 'items' => [generate_schema, generate_schema] }
|
40
|
+
assert build_from_schema(schema).valid?(['test', 'test'])
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_passing_validation_by_items_when_additional_items_is_omitted
|
45
|
+
stub_schema_validations(true) do
|
46
|
+
schema = { 'items' => [generate_schema] }
|
47
|
+
assert build_from_schema(schema).valid?(['test', 'test'])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_passing_validation_by_items_and_additional_items
|
52
|
+
stub_schema_validations(true) do
|
53
|
+
schema = {
|
54
|
+
'items' => [generate_schema],
|
55
|
+
'additionalItems' => generate_schema
|
56
|
+
}
|
57
|
+
assert build_from_schema(schema).valid?(['test', 'test'])
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_passing_validation_when_additional_items_are_not_allowed
|
62
|
+
stub_schema_validations(true) do
|
63
|
+
schema = {
|
64
|
+
'items' => [generate_schema],
|
65
|
+
'additionalItems' => false
|
66
|
+
}
|
67
|
+
assert build_from_schema(schema).valid?(['test'])
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_passing_validation_when_instance_size_is_less_than_items_size
|
72
|
+
stub_schema_validations(true) do
|
73
|
+
schema = {
|
74
|
+
'items' => [generate_schema, generate_schema],
|
75
|
+
'additionalItems' => false
|
76
|
+
}
|
77
|
+
assert build_from_schema(schema).valid?(['test'])
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_failing_validation_when_additional_items_are_not_allowed
|
82
|
+
stub_schema_validations(true) do
|
83
|
+
schema = {
|
84
|
+
'items' => [generate_schema],
|
85
|
+
'additionalItems' => false
|
86
|
+
}
|
87
|
+
refute build_from_schema(schema).valid?(['test', 'test'])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_failing_validation_by_items_schema_array
|
92
|
+
stub_schema_validations(false, true) do
|
93
|
+
schema = { 'items' => [generate_schema, generate_schema] }
|
94
|
+
refute build_from_schema(schema).valid?(['test', 'test'])
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_failing_validation_by_additional_items_schema
|
99
|
+
stub_schema_validations(true, false) do
|
100
|
+
schema = {
|
101
|
+
'items' => [generate_schema],
|
102
|
+
'additionalItems' => generate_schema
|
103
|
+
}
|
104
|
+
refute build_from_schema(schema).valid?(['test', 'test'])
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
private
|
109
|
+
|
110
|
+
def validator_class
|
111
|
+
JSchema::Validator::Items
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestMaxItems < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_argument_is_non_negative_iteger
|
10
|
+
assert_raises_unless_non_negative_integer 'maxItems'
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_passing_validation
|
14
|
+
assert validator(3).valid?([1, 2])
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_failing_validation
|
18
|
+
refute validator(2).valid?([1, 2, 3])
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def validator_class
|
24
|
+
JSchema::Validator::MaxItems
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative '../string_length_validator_tests'
|
6
|
+
|
7
|
+
class TestMaxLength < Minitest::Test
|
8
|
+
include Assertions
|
9
|
+
include StringLengthValidatorTests
|
10
|
+
|
11
|
+
def test_that_argument_is_a_positive_number
|
12
|
+
assert_raises_for_values 'maxLength', [0]
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_passing_validation
|
16
|
+
assert validator(4).valid?('test')
|
17
|
+
assert validator(10).valid?('test')
|
18
|
+
assert validator(10).valid?('')
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_failing_validation
|
22
|
+
refute validator(3).valid?('test')
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def validator_class
|
28
|
+
JSchema::Validator::MaxLength
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative 'properties_limit_tests'
|
6
|
+
|
7
|
+
class TestMaxProperties < Minitest::Test
|
8
|
+
include Assertions
|
9
|
+
include PropertiesLimitTests
|
10
|
+
|
11
|
+
def test_building_validator_from_schema
|
12
|
+
validator = build_from_schema('maxProperties' => 10)
|
13
|
+
assert_instance_of JSchema::Validator::MaxProperties, validator
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_passing_validation
|
17
|
+
assert validator(1).valid?('test' => 1)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_failing_validation
|
21
|
+
refute validator(1).valid?('test1' => 1, 'test2' => 2)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def validator_class
|
27
|
+
JSchema::Validator::MaxProperties
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestMaximum < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_maximum_is_a_number
|
10
|
+
assert_raises_unless 'maximum', :integer, :number
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_that_exclusive_maximum_is_boolean
|
14
|
+
assert_raises(JSchema::InvalidSchema) do
|
15
|
+
build_from_schema('maximum' => 1, 'exclusiveMaximum' => 0)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_that_exclusive_maximum_can_not_be_specified_without_maximum
|
20
|
+
assert_raises(JSchema::InvalidSchema) do
|
21
|
+
build_from_schema('exclusiveMaximum' => false)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_passing_validation_when_exclusive_maximum_is_not_specified
|
26
|
+
assert build_from_schema('maximum' => 3).valid?(2)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_passing_validation_when_exclusive_maximum_is_false
|
30
|
+
schema = build_from_schema('maximum' => 2, 'exclusiveMaximum' => false)
|
31
|
+
assert schema.valid?(2)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_passing_validation_when_exclusive_maximum_is_true
|
35
|
+
schema = build_from_schema('maximum' => 3, 'exclusiveMaximum' => true)
|
36
|
+
assert schema.valid?(2)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_failing_validation_when_exclusive_maximum_is_not_specified
|
40
|
+
refute build_from_schema('maximum' => 1).valid?(2)
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_failing_validation_when_exclusive_maximum_is_false
|
44
|
+
schema = build_from_schema('maximum' => 1, 'exclusiveMaximum' => false)
|
45
|
+
refute schema.valid?(2)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_failing_validation_when_exclusive_maximum_is_true
|
49
|
+
schema = build_from_schema('maximum' => 1, 'exclusiveMaximum' => true)
|
50
|
+
refute schema.valid?(1)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def validator_class
|
56
|
+
JSchema::Validator::Maximum
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
|
6
|
+
class TestMinItems < Minitest::Test
|
7
|
+
include Assertions
|
8
|
+
|
9
|
+
def test_that_argument_is_non_negative_iteger
|
10
|
+
assert_raises_unless_non_negative_integer 'minItems'
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_passing_validation
|
14
|
+
assert validator(1).valid?([1, 2])
|
15
|
+
assert validator(1).valid?([1])
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_failing_validation
|
19
|
+
refute validator(2).valid?([1])
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def validator_class
|
25
|
+
JSchema::Validator::MinItems
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative '../string_length_validator_tests'
|
6
|
+
|
7
|
+
class TestMinLength < Minitest::Test
|
8
|
+
include Assertions
|
9
|
+
include StringLengthValidatorTests
|
10
|
+
|
11
|
+
def test_that_argument_is_not_a_negative_number
|
12
|
+
assert_raises_unless_non_negative_integer 'minLength'
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_passing_validation
|
16
|
+
assert validator(4).valid?('test')
|
17
|
+
assert validator(3).valid?('test')
|
18
|
+
assert validator(0).valid?('')
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_failing_validation
|
22
|
+
refute validator(5).valid?('test')
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def validator_class
|
28
|
+
JSchema::Validator::MinLength
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'jschema'
|
3
|
+
|
4
|
+
require_relative 'assertions'
|
5
|
+
require_relative 'properties_limit_tests'
|
6
|
+
|
7
|
+
class TestMinProperties < Minitest::Test
|
8
|
+
include Assertions
|
9
|
+
include PropertiesLimitTests
|
10
|
+
|
11
|
+
def test_building_validator_from_schema
|
12
|
+
validator = build_from_schema('minProperties' => 10)
|
13
|
+
assert_instance_of JSchema::Validator::MinProperties, validator
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_passing_validation
|
17
|
+
assert validator(0).valid?('test' => 1)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_failing_validation
|
21
|
+
refute validator(3).valid?('test1' => 1, 'test2' => 2)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def validator_class
|
27
|
+
JSchema::Validator::MinProperties
|
28
|
+
end
|
29
|
+
end
|