json-schema 2.5.1 → 2.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.textile +2 -2
  3. data/lib/json-schema/attributes/properties.rb +1 -1
  4. data/lib/json-schema/validator.rb +14 -6
  5. metadata +6 -121
  6. data/test/data/all_of_ref_data.json +0 -3
  7. data/test/data/any_of_ref_data.json +0 -7
  8. data/test/data/bad_data_1.json +0 -3
  9. data/test/data/good_data_1.json +0 -3
  10. data/test/data/one_of_ref_links_data.json +0 -5
  11. data/test/schemas/address_microformat.json +0 -18
  12. data/test/schemas/all_of_ref_base_schema.json +0 -6
  13. data/test/schemas/all_of_ref_schema.json +0 -7
  14. data/test/schemas/any_of_ref_jane_schema.json +0 -4
  15. data/test/schemas/any_of_ref_jimmy_schema.json +0 -4
  16. data/test/schemas/any_of_ref_john_schema.json +0 -4
  17. data/test/schemas/any_of_ref_schema.json +0 -15
  18. data/test/schemas/definition_schema.json +0 -15
  19. data/test/schemas/extends_and_additionalProperties-1-filename.schema.json +0 -34
  20. data/test/schemas/extends_and_additionalProperties-1-ref.schema.json +0 -34
  21. data/test/schemas/extends_and_additionalProperties-2-filename.schema.json +0 -33
  22. data/test/schemas/extends_and_additionalProperties-2-ref.schema.json +0 -33
  23. data/test/schemas/good_schema_1.json +0 -10
  24. data/test/schemas/good_schema_2.json +0 -10
  25. data/test/schemas/good_schema_extends1.json +0 -10
  26. data/test/schemas/good_schema_extends2.json +0 -13
  27. data/test/schemas/inner.schema.json +0 -21
  28. data/test/schemas/one_of_ref_links_schema.json +0 -16
  29. data/test/schemas/ref john with spaces schema.json +0 -11
  30. data/test/schemas/relative_definition_schema.json +0 -8
  31. data/test/schemas/self_link_schema.json +0 -17
  32. data/test/schemas/up_link_schema.json +0 -17
  33. data/test/test_all_of_ref_schema.rb +0 -35
  34. data/test/test_any_of_ref_schema.rb +0 -35
  35. data/test/test_bad_schema_ref.rb +0 -39
  36. data/test/test_common_test_suite.rb +0 -66
  37. data/test/test_custom_format.rb +0 -116
  38. data/test/test_definition.rb +0 -15
  39. data/test/test_extended_schema.rb +0 -62
  40. data/test/test_extends_and_additionalProperties.rb +0 -52
  41. data/test/test_files_v3.rb +0 -43
  42. data/test/test_fragment_resolution.rb +0 -30
  43. data/test/test_fragment_validation_with_ref.rb +0 -34
  44. data/test/test_full_validation.rb +0 -208
  45. data/test/test_helper.rb +0 -47
  46. data/test/test_initialize_data.rb +0 -118
  47. data/test/test_jsonschema_draft1.rb +0 -141
  48. data/test/test_jsonschema_draft2.rb +0 -113
  49. data/test/test_jsonschema_draft3.rb +0 -450
  50. data/test/test_jsonschema_draft4.rb +0 -657
  51. data/test/test_list_option.rb +0 -21
  52. data/test/test_load_ref_schema.rb +0 -40
  53. data/test/test_merge_missing_values.rb +0 -45
  54. data/test/test_minitems.rb +0 -16
  55. data/test/test_one_of.rb +0 -85
  56. data/test/test_ruby_schema.rb +0 -59
  57. data/test/test_schema_loader.rb +0 -74
  58. data/test/test_schema_type_attribute.rb +0 -20
  59. data/test/test_schema_validation.rb +0 -185
  60. data/test/test_stringify.rb +0 -48
  61. data/test/test_uri_related.rb +0 -67
  62. data/test/test_validator.rb +0 -53
@@ -1,21 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class ListOptionTest < Minitest::Test
4
- def test_list_option_reusing_schemas
5
- schema_hash = {
6
- "$schema" => "http://json-schema.org/draft-04/schema#",
7
- "type" => "object",
8
- "properties" => { "a" => { "type" => "integer" } }
9
- }
10
-
11
- uri = Addressable::URI.parse('http://example.com/item')
12
- schema = JSON::Schema.new(schema_hash, uri)
13
- JSON::Validator.add_schema(schema)
14
-
15
- data = {"a" => 1}
16
- assert_valid uri.to_s, data
17
-
18
- data = [{"a" => 1}]
19
- assert_valid uri.to_s, data, :list => true
20
- end
21
- end
@@ -1,40 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class LoadRefSchemaTests < Minitest::Test
4
- def load_other_schema
5
- JSON::Validator.add_schema(JSON::Schema.new(
6
- {
7
- '$schema' => 'http://json-schema.org/draft-04/schema#',
8
- 'type' => 'object',
9
- 'properties' => {
10
- "title" => {
11
- "type" => "string"
12
- }
13
- }
14
- },
15
- Addressable::URI.parse("http://example.com/schema#")
16
- ))
17
- end
18
-
19
- def test_cached_schema
20
- schema_url = "http://example.com/schema#"
21
- schema = {
22
- "$ref" => schema_url
23
- }
24
- data = {}
25
- load_other_schema
26
- validator = JSON::Validator.new(schema, data)
27
- assert JSON::Validator.schema_loaded?(schema_url)
28
- end
29
-
30
- def test_cached_schema_with_fragment
31
- schema_url = "http://example.com/schema#"
32
- schema = {
33
- "$ref" => "#{schema_url}/properties/title"
34
- }
35
- data = {}
36
- load_other_schema
37
- validator = JSON::Validator.new(schema, data)
38
- assert JSON::Validator.schema_loaded?(schema_url)
39
- end
40
- end
@@ -1,45 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class MergeMissingValuesTest < Minitest::Test
4
- def test_merge_missing_values_for_string
5
- original = 'foo'
6
- updated = 'foo'
7
- JSON::Validator.merge_missing_values(updated, original)
8
- assert_equal('foo', original)
9
- end
10
-
11
- def test_merge_missing_values_for_empty_array
12
- original = []
13
- updated = []
14
- JSON::Validator.merge_missing_values(updated, original)
15
- assert_equal([], original)
16
- end
17
-
18
- def test_merge_missing_values_for_empty_hash
19
- original = {}
20
- updated = {}
21
- JSON::Validator.merge_missing_values(updated, original)
22
- assert_equal({}, original)
23
- end
24
-
25
- def test_merge_missing_values_for_new_values
26
- original = {:hello => 'world'}
27
- updated = {'hello' => 'world', 'foo' => 'bar'}
28
- JSON::Validator.merge_missing_values(updated, original)
29
- assert_equal({:hello => 'world', 'foo' => 'bar'}, original)
30
- end
31
-
32
- def test_merge_missing_values_for_nested_array
33
- original = [:hello, 'world', 1, 2, 3, {:foo => :bar, 'baz' => 'qux'}]
34
- updated = ['hello', 'world', 1, 2, 3, {'foo' => 'bar', 'baz' => 'qux', 'this_is' => 'new'}]
35
- JSON::Validator.merge_missing_values(updated, original)
36
- assert_equal([:hello, 'world', 1, 2, 3, {:foo => :bar, 'baz' => 'qux', 'this_is' => 'new'}], original)
37
- end
38
-
39
- def test_merge_missing_values_for_nested_hash
40
- original = {:hello => 'world', :foo => ['bar', :baz, {:uno => {:due => 3}}]}
41
- updated = {'hello' => 'world', 'foo' => ['bar', 'baz', {'uno' => {'due' => 3, 'this_is' => 'new'}}], 'ack' => 'sed'}
42
- JSON::Validator.merge_missing_values(updated, original)
43
- assert_equal({:hello => 'world', :foo => ['bar', :baz, {:uno => {:due => 3, 'this_is' => 'new'}}], 'ack' => 'sed'}, original)
44
- end
45
- end
@@ -1,16 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class MinItemsTest < Minitest::Test
4
- def test_minitems_nils
5
- schema = {
6
- "type" => "array",
7
- "minItems" => 1,
8
- "items" => { "type" => "object" }
9
- }
10
-
11
- errors = JSON::Validator.fully_validate(schema, [nil])
12
- assert_equal(errors.length, 1)
13
- assert(errors[0] !~ /minimum/)
14
- assert(errors[0] =~ /NilClass/)
15
- end
16
- end
data/test/test_one_of.rb DELETED
@@ -1,85 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class OneOfTest < Minitest::Test
4
- def test_one_of_links_schema
5
- schema = schema_fixture_path('one_of_ref_links_schema.json')
6
- data = data_fixture_path('one_of_ref_links_data.json')
7
- assert_valid schema, data
8
- end
9
-
10
- def test_one_of_with_string_patterns
11
- schema = {
12
- "$schema" => "http://json-schema.org/draft-04/schema#",
13
- "oneOf" => [
14
- {
15
- "properties" => {"a" => {"type" => "string", "pattern" => "foo"}},
16
- },
17
- {
18
- "properties" => {"a" => {"type" => "string", "pattern" => "bar"}},
19
- },
20
- {
21
- "properties" => {"a" => {"type" => "string", "pattern" => "baz"}},
22
- }
23
- ]
24
- }
25
-
26
- assert_valid schema, { "a" => "foo" }
27
- refute_valid schema, { "a" => "foobar" }
28
- assert_valid schema, { "a" => "baz" }
29
- refute_valid schema, { "a" => 5 }
30
- end
31
-
32
- def test_one_of_sub_errors
33
- schema = {
34
- "$schema" => "http://json-schema.org/draft-04/schema#",
35
- "oneOf" => [
36
- {
37
- "properties" => {"a" => {"type" => "string", "pattern" => "foo"}},
38
- },
39
- {
40
- "properties" => {"a" => {"type" => "string", "pattern" => "bar"}},
41
- },
42
- {
43
- "properties" => {"a" => {"type" => "number", "minimum" => 10}},
44
- }
45
- ]
46
- }
47
-
48
- errors = JSON::Validator.fully_validate(schema, { "a" => 5 }, :errors_as_objects => true)
49
- nested_errors = errors[0][:errors]
50
- assert_equal([:oneof_0,:oneof_1,:oneof_2], nested_errors.keys, 'should have nested errors for each allOf subschema')
51
- assert_match(/the property '#\/a' of type Fixnum did not match the following type: string/i, nested_errors[:oneof_0][0][:message])
52
- assert_match(/the property '#\/a' did not have a minimum value of 10, inclusively/i, nested_errors[:oneof_2][0][:message])
53
- end
54
-
55
- def test_one_of_sub_errors_message
56
- schema = {
57
- "$schema" => "http://json-schema.org/draft-04/schema#",
58
- "oneOf" => [
59
- {
60
- "properties" => {"a" => {"type" => "string", "pattern" => "foo"}},
61
- },
62
- {
63
- "properties" => {"a" => {"type" => "string", "pattern" => "bar"}},
64
- },
65
- {
66
- "properties" => {"a" => {"type" => "number", "minimum" => 10}},
67
- }
68
- ]
69
- }
70
-
71
- errors = JSON::Validator.fully_validate(schema, { "a" => 5 })
72
- expected_message = """The property '#/' of type Hash did not match any of the required schemas. The schema specific errors were:
73
-
74
- - oneOf #0:
75
- - The property '#/a' of type Fixnum did not match the following type: string
76
- - oneOf #1:
77
- - The property '#/a' of type Fixnum did not match the following type: string
78
- - oneOf #2:
79
- - The property '#/a' did not have a minimum value of 10, inclusively"""
80
-
81
- assert_equal(expected_message, errors[0])
82
-
83
- end
84
-
85
- end
@@ -1,59 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class RubySchemaTest < Minitest::Test
4
- def test_string_keys
5
- schema = {
6
- "type" => 'object',
7
- "required" => ["a"],
8
- "properties" => {
9
- "a" => {"type" => "integer", "default" => 42},
10
- "b" => {"type" => "integer"}
11
- }
12
- }
13
-
14
- assert_valid schema, { "a" => 5 }
15
- end
16
-
17
- def test_symbol_keys
18
- schema = {
19
- :type => 'object',
20
- :required => ["a"],
21
- :properties => {
22
- :a => {:type => "integer", :default => 42},
23
- :b => {:type => "integer"}
24
- }
25
- }
26
-
27
- assert_valid schema, { :a => 5 }
28
- end
29
-
30
- def test_symbol_keys_in_hash_within_array
31
- schema = {
32
- :type => 'object',
33
- :properties => {
34
- :a => {
35
- :type => "array",
36
- :items => [
37
- {
38
- :properties => {
39
- :b => {
40
- :type => "integer"
41
- }
42
- }
43
- }
44
- ]
45
- }
46
- }
47
- }
48
-
49
- data = {
50
- :a => [
51
- {
52
- :b => 1
53
- }
54
- ]
55
- }
56
-
57
- assert_valid schema, data, :validate_schema => true
58
- end
59
- end
@@ -1,74 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class TestSchemaReader < Minitest::Test
4
- ADDRESS_SCHEMA_URI = 'http://json-schema.org/address'
5
- ADDRESS_SCHEMA_PATH = File.expand_path('../schemas/address_microformat.json', __FILE__)
6
-
7
- def stub_address_request(body = File.read(ADDRESS_SCHEMA_PATH))
8
- stub_request(:get, ADDRESS_SCHEMA_URI).
9
- to_return(:body => body, :status => 200)
10
- end
11
-
12
- def test_accept_all_uris
13
- stub_address_request
14
-
15
- reader = JSON::Schema::Reader.new
16
- schema = reader.read(ADDRESS_SCHEMA_URI)
17
-
18
- assert_equal schema.uri, Addressable::URI.parse("#{ADDRESS_SCHEMA_URI}#")
19
- end
20
-
21
- def test_accept_all_files
22
- reader = JSON::Schema::Reader.new
23
- schema = reader.read(ADDRESS_SCHEMA_PATH)
24
-
25
- assert_equal schema.uri, Addressable::URI.convert_path(ADDRESS_SCHEMA_PATH + '#')
26
- end
27
-
28
- def test_refuse_all_uris
29
- reader = JSON::Schema::Reader.new(:accept_uri => false)
30
- refute reader.accept_uri?(Addressable::URI.parse('http://foo.com'))
31
- end
32
-
33
- def test_refuse_all_files
34
- reader = JSON::Schema::Reader.new(:accept_file => false)
35
- refute reader.accept_file?(Pathname.new('/foo/bar/baz'))
36
- end
37
-
38
- def test_accept_uri_proc
39
- reader = JSON::Schema::Reader.new(
40
- :accept_uri => proc { |uri| uri.host == 'json-schema.org' }
41
- )
42
-
43
- assert reader.accept_uri?(Addressable::URI.parse('http://json-schema.org/address'))
44
- refute reader.accept_uri?(Addressable::URI.parse('http://sub.json-schema.org/address'))
45
- end
46
-
47
- def test_accept_file_proc
48
- test_root = Pathname.new(__FILE__).expand_path.dirname
49
-
50
- reader = JSON::Schema::Reader.new(
51
- :accept_file => proc { |path| path.to_s.start_with?(test_root.to_s) }
52
- )
53
-
54
- assert reader.accept_file?(test_root.join('anything.json'))
55
- refute reader.accept_file?(test_root.join('..', 'anything.json'))
56
- end
57
-
58
- def test_file_scheme
59
- reader = JSON::Schema::Reader.new(:accept_uri => true, :accept_file => false)
60
- assert_raises(JSON::Schema::ReadRefused) do
61
- reader.read('file://' + ADDRESS_SCHEMA_PATH)
62
- end
63
- end
64
-
65
- def test_parse_error
66
- stub_address_request('this is totally not valid JSON!')
67
-
68
- reader = JSON::Schema::Reader.new
69
-
70
- assert_raises(parser_error) do
71
- reader.read(ADDRESS_SCHEMA_URI)
72
- end
73
- end
74
- end
@@ -1,20 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
-
3
- class TestSchemaTypeAttribute < Minitest::Test
4
- def test_type_of_data
5
- assert_equal(type_of_data(String.new), 'string')
6
- assert_equal(type_of_data(Numeric.new), 'number')
7
- assert_equal(type_of_data(1), 'integer')
8
- assert_equal(type_of_data(true), 'boolean')
9
- assert_equal(type_of_data(false), 'boolean')
10
- assert_equal(type_of_data(Hash.new), 'object')
11
- assert_equal(type_of_data(nil), 'null')
12
- assert_equal(type_of_data(Object.new), 'any')
13
- end
14
-
15
- private
16
-
17
- def type_of_data(data)
18
- JSON::Schema::TypeAttribute.type_of_data(data)
19
- end
20
- end
@@ -1,185 +0,0 @@
1
- require File.expand_path('../test_helper', __FILE__)
2
- require 'tmpdir'
3
-
4
- class JSONSchemaValidation < Minitest::Test
5
- def valid_schema_v3
6
- {
7
- "$schema" => "http://json-schema.org/draft-03/schema#",
8
- "type" => "object",
9
- "properties" => {
10
- "b" => {
11
- "required" => true
12
- }
13
- }
14
- }
15
- end
16
-
17
- def invalid_schema_v3
18
- {
19
- "$schema" => "http://json-schema.org/draft-03/schema#",
20
- "type" => "object",
21
- "properties" => {
22
- "b" => {
23
- "required" => "true"
24
- }
25
- }
26
- }
27
- end
28
-
29
- def valid_schema_v4
30
- {
31
- "$schema" => "http://json-schema.org/draft-04/schema#",
32
- "type" => "object",
33
- "required" => ["b"],
34
- "properties" => {
35
- }
36
- }
37
- end
38
-
39
- def invalid_schema_v4
40
- {
41
- "$schema" => "http://json-schema.org/draft-04/schema#",
42
- "type" => "object",
43
- "required" => "b",
44
- "properties" => {
45
- }
46
- }
47
- end
48
-
49
- def symbolized_schema
50
- {
51
- :type => :object,
52
- :required => [
53
- :id,
54
- :name,
55
- :real_name,
56
- :role,
57
- :website,
58
- :biography,
59
- :created_at,
60
- :demographic
61
- ],
62
- :properties => {
63
- :id => {
64
- :type => [
65
- :integer
66
- ]
67
- },
68
- :name => {
69
- :type => [
70
- :string
71
- ]
72
- },
73
- :real_name => {
74
- :type => [
75
- :string
76
- ]
77
- },
78
- :role => {
79
- :type => [
80
- :string
81
- ]
82
- },
83
- :website => {
84
- :type => [
85
- :string,
86
- :null
87
- ]
88
- },
89
- :created_at => {
90
- :type => [
91
- :string
92
- ]
93
- },
94
- :biography => {
95
- :type => [
96
- :string,
97
- :null
98
- ]
99
- }
100
- },
101
- :relationships => {
102
- :demographic => {
103
- :type => :object,
104
- :required => [
105
- :id,
106
- :gender
107
- ],
108
- :properties => {
109
- :id => {
110
- :type => [
111
- :integer
112
- ]
113
- },
114
- :gender => {
115
- :type => [
116
- :string
117
- ]
118
- }
119
- }
120
- }
121
- }
122
- }
123
- end
124
-
125
- def test_draft03_validation
126
- data = {"b" => {"a" => 5}}
127
- assert(JSON::Validator.validate(valid_schema_v3,data,:validate_schema => true, :version => :draft3))
128
- assert(!JSON::Validator.validate(invalid_schema_v3,data,:validate_schema => true, :version => :draft3))
129
- end
130
-
131
- def test_validate_just_schema_draft03
132
- errors = JSON::Validator.fully_validate_schema(valid_schema_v3, :version => :draft3)
133
- assert_equal [], errors
134
-
135
- errors = JSON::Validator.fully_validate_schema(invalid_schema_v3, :version => :draft3)
136
- assert_equal 1, errors.size
137
- assert_match(/the property .*required.*did not match/i, errors.first)
138
- end
139
-
140
-
141
- def test_draft04_validation
142
- data = {"b" => {"a" => 5}}
143
- assert(JSON::Validator.validate(valid_schema_v4,data,:validate_schema => true, :version => :draft4))
144
- assert(!JSON::Validator.validate(invalid_schema_v4,data,:validate_schema => true, :version => :draft4))
145
- end
146
-
147
- def test_validate_just_schema_draft04
148
- errors = JSON::Validator.fully_validate_schema(valid_schema_v4, :version => :draft4)
149
- assert_equal [], errors
150
-
151
- errors = JSON::Validator.fully_validate_schema(invalid_schema_v4, :version => :draft4)
152
- assert_equal 1, errors.size
153
- assert_match(/the property .*required.*did not match/i, errors.first)
154
- end
155
-
156
- def test_validate_schema_3_without_version_option
157
- data = {"b" => {"a" => 5}}
158
- assert(JSON::Validator.validate(valid_schema_v3,data,:validate_schema => true))
159
- assert(!JSON::Validator.validate(invalid_schema_v3,data,:validate_schema => true))
160
- end
161
-
162
- def test_schema_validation_from_different_directory
163
- Dir.mktmpdir do |tmpdir|
164
- Dir.chdir(tmpdir) do
165
- data = {"b" => {"a" => 5}}
166
- assert(JSON::Validator.validate(valid_schema_v4,data,:validate_schema => true, :version => :draft4))
167
- assert(!JSON::Validator.validate(invalid_schema_v4,data,:validate_schema => true, :version => :draft4))
168
- end
169
- end
170
- end
171
-
172
- def test_validate_schema_with_symbol_keys
173
- data = {
174
- "created_at" => "2014-01-25T00:58:33-08:00",
175
- "id" => 8517194300913402149003,
176
- "name" => "chelsey",
177
- "real_name" => "Mekhi Hegmann",
178
- "website" => nil,
179
- "role" => "user",
180
- "biography" => nil,
181
- "demographic" => nil
182
- }
183
- assert(JSON::Validator.validate!(symbolized_schema, data, :validate_schema => true))
184
- end
185
- end