"strict" option does not enforce additionalProperties within array items
emersonthis opened this issue · 0 comments
emersonthis commented
Sounds related to #369 or #404
According to the docs:
#
# with the `:strict` option, all properties are condsidered to have `"required": true` and all objects `"additionalProperties": false`
#
The implied additionalProperties: false
does not seem to apply to extra properties in array items/objects.
To reproduce
Fake schema = bugtest.json
{
"$schema": "http://json-schema.org/draft-04/schema#",
"properties": {
"an_array" : {
"properties": {
"alpha": {
"type": "string"
},
"beta": {
"type": "string"
}
},
"items": {
"type": "hash"
}
,"type": "array"
}
},
"type": "object"
}
bugtest_spec.rb
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'JSON::Validator "strict" mode', type: :request do
include SchemaMatchers
it 'should pass when the properties match exactly' do
tester = {
an_array: [
{
alpha: 'foo',
beta: 'foo'
}
]
}
schema_path = Rails.root.join('spec', 'support', 'schemas', "bugtest.json")
valid = JSON::Validator.validate!(schema_path.to_s, tester, { strict: true })
expect(valid).to eq(true)
end
it 'should fail when a property in the schema is missing' do
tester = {
an_array: [
{
alpha: 'foo',
}
]
}
schema_path = Rails.root.join('spec', 'support', 'schemas', "bugtest.json")
expect{
JSON::Validator.validate!(schema_path.to_s, tester, { strict: true })
}.to raise_error(StandardError)
end
it 'should fail when an extra property (not in the schema) is present' do
tester = {
an_array: [
{
alpha: 'foo',
beta: 'foo',
gamma: 'foo'
}
]
}
schema_path = Rails.root.join('spec', 'support', 'schemas', "bugtest.json")
expect{
JSON::Validator.validate!(schema_path.to_s, tester, { strict: true })
}.to raise_error(StandardError)
end
end
Expected behavior
All three tests should pass, with validate()
returning the expected results.
Actual behavior
The second two examples fail, even with extra or missing properties that don't match the schema. validate
does not return false and validate!
does not raise an error.
Details
rspec v3.7
ruby 2.3.0p0
json-schema 2.7.0