Better error message for additionalProperties: false when there are patternProperties.
This commit is contained in:
parent
ee2de6d0e0
commit
822c75f653
|
@ -29,8 +29,18 @@ def additionalProperties(validator, aP, instance, schema):
|
|||
for error in validator.descend(instance[extra], aP, path=extra):
|
||||
yield error
|
||||
elif not aP and extras:
|
||||
error = "Additional properties are not allowed (%s %s unexpected)"
|
||||
yield ValidationError(error % _utils.extras_msg(extras))
|
||||
if "patternProperties" in schema:
|
||||
patterns = sorted(schema["patternProperties"].keys())
|
||||
if len(extras) == 1:
|
||||
verb = "does"
|
||||
else:
|
||||
verb = "do"
|
||||
error = "%s %s not match any of the regexs: %s" % (
|
||||
", ".join(map(repr, sorted(extras))), verb, ", ".join(patterns))
|
||||
yield ValidationError(error)
|
||||
else:
|
||||
error = "Additional properties are not allowed (%s %s unexpected)"
|
||||
yield ValidationError(error % _utils.extras_msg(extras))
|
||||
|
||||
|
||||
def items(validator, items, instance, schema):
|
||||
|
|
|
@ -191,6 +191,26 @@ class TestValidationErrorMessages(unittest.TestCase):
|
|||
self.assertIn(repr("thing"), message)
|
||||
self.assertIn("is not a", message)
|
||||
|
||||
def test_additionalProperties_false_patternProperties(self):
|
||||
schema = {u"type": u"object",
|
||||
u"additionalProperties": False,
|
||||
u"patternProperties": {
|
||||
u"$abc^": {u"type": u"string"},
|
||||
u"$def^": {u"type": u"string"}
|
||||
}}
|
||||
message = self.message_for({u"zebra": 123}, schema,
|
||||
cls=Draft4Validator)
|
||||
self.assertEqual(
|
||||
message,
|
||||
"{} does not match any of the regexs: $abc^, $def^".format(
|
||||
repr(u"zebra")))
|
||||
message = self.message_for({u"zebra": 123, u"fish": 456}, schema,
|
||||
cls=Draft4Validator)
|
||||
self.assertEqual(
|
||||
message,
|
||||
"{}, {} do not match any of the regexs: $abc^, $def^".format(
|
||||
repr(u"fish"), repr(u"zebra")))
|
||||
|
||||
|
||||
class TestValidationErrorDetails(unittest.TestCase):
|
||||
# TODO: These really need unit tests for each individual validator, rather
|
||||
|
|
Loading…
Reference in New Issue