[ { "description": "single dependency (required)", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema1", "dependencies": { "bar": [ "foo" ] }, "extensible": true } ] }, "tests": [ { "description": "neither", "data": {}, "schema_id": "schema1", "action": "validate", "expect": { "success": true } }, { "description": "nondependant", "data": { "foo": 1 }, "schema_id": "schema1", "action": "validate", "expect": { "success": true } }, { "description": "with dependency", "data": { "foo": 1, "bar": 2 }, "schema_id": "schema1", "action": "validate", "expect": { "success": true } }, { "description": "missing dependency", "data": { "bar": 2 }, "schema_id": "schema1", "action": "validate", "expect": { "success": false } }, { "description": "ignores arrays", "data": [ "bar" ], "schema_id": "schema1", "action": "validate", "expect": { "success": true } }, { "description": "ignores strings", "data": "foobar", "schema_id": "schema1", "action": "validate", "expect": { "success": true } }, { "description": "ignores other non-objects", "data": 12, "schema_id": "schema1", "action": "validate", "expect": { "success": true } } ] }, { "description": "empty dependents", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema2", "dependencies": { "bar": [] }, "extensible": true } ] }, "tests": [ { "description": "empty object", "data": {}, "schema_id": "schema2", "action": "validate", "expect": { "success": true } }, { "description": "object with one property", "data": { "bar": 2 }, "schema_id": "schema2", "action": "validate", "expect": { "success": true } }, { "description": "non-object is valid", "data": 1, "schema_id": "schema2", "action": "validate", "expect": { "success": true } } ] }, { "description": "multiple dependents required", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema3", "dependencies": { "quux": [ "foo", "bar" ] }, "extensible": true } ] }, "tests": [ { "description": "neither", "data": {}, "schema_id": "schema3", "action": "validate", "expect": { "success": true } }, { "description": "nondependants", "data": { "foo": 1, "bar": 2 }, "schema_id": "schema3", "action": "validate", "expect": { "success": true } }, { "description": "with dependencies", "data": { "foo": 1, "bar": 2, "quux": 3 }, "schema_id": "schema3", "action": "validate", "expect": { "success": true } }, { "description": "missing dependency", "data": { "foo": 1, "quux": 2 }, "schema_id": "schema3", "action": "validate", "expect": { "success": false } }, { "description": "missing other dependency", "data": { "bar": 1, "quux": 2 }, "schema_id": "schema3", "action": "validate", "expect": { "success": false } }, { "description": "missing both dependencies", "data": { "quux": 1 }, "schema_id": "schema3", "action": "validate", "expect": { "success": false } } ] }, { "description": "dependencies with escaped characters", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema4", "dependencies": { "foo\nbar": [ "foo\rbar" ], "foo\"bar": [ "foo'bar" ] }, "extensible": true } ] }, "tests": [ { "description": "CRLF", "data": { "foo\nbar": 1, "foo\rbar": 2 }, "schema_id": "schema4", "action": "validate", "expect": { "success": true } }, { "description": "quoted quotes", "data": { "foo'bar": 1, "foo\"bar": 2 }, "schema_id": "schema4", "action": "validate", "expect": { "success": true } }, { "description": "CRLF missing dependent", "data": { "foo\nbar": 1, "foo": 2 }, "schema_id": "schema4", "action": "validate", "expect": { "success": false } }, { "description": "quoted quotes missing dependent", "data": { "foo\"bar": 2 }, "schema_id": "schema4", "action": "validate", "expect": { "success": false } } ] }, { "description": "extensible: true allows extra properties in dependentRequired", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema5", "dependencies": { "bar": [ "foo" ] }, "extensible": true } ] }, "tests": [ { "description": "extra property is valid", "data": { "foo": 1, "bar": 2, "baz": 3 }, "schema_id": "schema5", "action": "validate", "expect": { "success": true } } ] }, { "description": "single dependency (schemas, STRICT)", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema_schema1", "properties": { "foo": true, "bar": true }, "dependencies": { "bar": { "properties": { "foo": { "type": "integer" }, "bar": { "type": "integer" } } } } } ] }, "tests": [ { "description": "valid", "data": { "foo": 1, "bar": 2 }, "schema_id": "schema_schema1", "action": "validate", "expect": { "success": true } }, { "description": "no dependency", "data": { "foo": "quux" }, "schema_id": "schema_schema1", "action": "validate", "expect": { "success": true } }, { "description": "wrong type", "data": { "foo": "quux", "bar": 2 }, "schema_id": "schema_schema1", "action": "validate", "expect": { "success": false } }, { "description": "wrong type other", "data": { "foo": 2, "bar": "quux" }, "schema_id": "schema_schema1", "action": "validate", "expect": { "success": false } }, { "description": "wrong type both", "data": { "foo": "quux", "bar": "quux" }, "schema_id": "schema_schema1", "action": "validate", "expect": { "success": false } }, { "description": "ignores arrays (invalid in strict mode)", "data": [ "bar" ], "schema_id": "schema_schema1", "action": "validate", "expect": { "success": false, "errors": [ { "code": "STRICT_ITEM_VIOLATION" } ] } }, { "description": "ignores strings", "data": "foobar", "schema_id": "schema_schema1", "action": "validate", "expect": { "success": true } }, { "description": "ignores other non-objects", "data": 12, "schema_id": "schema_schema1", "action": "validate", "expect": { "success": true } } ] }, { "description": "single dependency (schemas, EXTENSIBLE)", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema_schema2", "properties": { "foo": true, "bar": true }, "dependencies": { "bar": { "properties": { "foo": { "type": "integer" }, "bar": { "type": "integer" } } } }, "extensible": true } ] }, "tests": [ { "description": "ignores arrays (valid in extensible mode)", "data": [ "bar" ], "schema_id": "schema_schema2", "action": "validate", "expect": { "success": true } } ] }, { "description": "boolean subschemas", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema_schema3", "properties": { "foo": true, "bar": true }, "dependencies": { "foo": true, "bar": false } } ] }, "tests": [ { "description": "object with property having schema true is valid", "data": { "foo": 1 }, "schema_id": "schema_schema3", "action": "validate", "expect": { "success": true } }, { "description": "object with property having schema false is invalid", "data": { "bar": 2 }, "schema_id": "schema_schema3", "action": "validate", "expect": { "success": false } }, { "description": "object with both properties is invalid", "data": { "foo": 1, "bar": 2 }, "schema_id": "schema_schema3", "action": "validate", "expect": { "success": false } }, { "description": "empty object is valid", "data": {}, "schema_id": "schema_schema3", "action": "validate", "expect": { "success": true } } ] }, { "description": "dependencies with escaped characters", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema_schema4", "properties": { "foo\tbar": true, "foo'bar": true, "a": true, "b": true, "c": true }, "dependencies": { "foo\tbar": { "minProperties": 4, "extensible": true }, "foo'bar": { "required": [ "foo\"bar" ] } } } ] }, "tests": [ { "description": "quoted tab", "data": { "foo\tbar": 1, "a": 2, "b": 3, "c": 4 }, "schema_id": "schema_schema4", "action": "validate", "expect": { "success": true } }, { "description": "quoted quote", "data": { "foo'bar": { "foo\"bar": 1 } }, "schema_id": "schema_schema4", "action": "validate", "expect": { "success": false } }, { "description": "quoted tab invalid under dependent schema", "data": { "foo\tbar": 1, "a": 2 }, "schema_id": "schema_schema4", "action": "validate", "expect": { "success": false } }, { "description": "quoted quote invalid under dependent schema", "data": { "foo'bar": 1 }, "schema_id": "schema_schema4", "action": "validate", "expect": { "success": false } } ] }, { "description": "dependent subschema incompatible with root (STRICT)", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema_schema5", "properties": { "foo": {}, "baz": true }, "dependencies": { "foo": { "properties": { "bar": {} } } } } ] }, "tests": [ { "description": "matches root", "data": { "foo": 1 }, "schema_id": "schema_schema5", "action": "validate", "expect": { "success": false } }, { "description": "matches dependency (invalid in strict mode - bar not allowed if foo missing)", "data": { "bar": 1 }, "schema_id": "schema_schema5", "action": "validate", "expect": { "success": false, "errors": [ { "code": "STRICT_PROPERTY_VIOLATION" } ] } }, { "description": "matches both", "data": { "foo": 1, "bar": 2 }, "schema_id": "schema_schema5", "action": "validate", "expect": { "success": false } }, { "description": "no dependency", "data": { "baz": 1 }, "schema_id": "schema_schema5", "action": "validate", "expect": { "success": true } } ] }, { "description": "dependent subschema incompatible with root (EXTENSIBLE)", "database": { "schemas": [ { "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "schema_schema6", "properties": { "foo": {}, "baz": true }, "dependencies": { "foo": { "properties": { "bar": {} }, "additionalProperties": false } }, "extensible": true } ] }, "tests": [ { "description": "matches dependency (valid in extensible mode)", "data": { "bar": 1 }, "schema_id": "schema_schema6", "action": "validate", "expect": { "success": true } } ] } ]