[ { "description": "required validation", "database": { "types": [ { "name": "required_0_0", "schemas": { "required_0_0": { "properties": { "foo": {}, "bar": {} }, "required": [ "foo" ] } } } ] }, "tests": [ { "description": "present required property is valid", "data": { "foo": 1 }, "schema_id": "required_0_0", "action": "validate", "expect": { "success": true } }, { "description": "non-present required property is invalid", "data": { "bar": 1 }, "schema_id": "required_0_0", "action": "validate", "expect": { "success": false, "errors": [ { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "foo" }, "details": { "path": "foo", "schema": "required_0_0" } } ] } }, { "description": "ignores arrays", "data": [], "schema_id": "required_0_0", "action": "validate", "expect": { "success": true } }, { "description": "ignores strings", "data": "", "schema_id": "required_0_0", "action": "validate", "expect": { "success": true } }, { "description": "ignores other non-objects", "data": 12, "schema_id": "required_0_0", "action": "validate", "expect": { "success": true } }, { "description": "ignores null", "data": null, "schema_id": "required_0_0", "action": "validate", "expect": { "success": true } }, { "description": "ignores boolean", "data": true, "schema_id": "required_0_0", "action": "validate", "expect": { "success": true } } ] }, { "description": "required default validation", "database": { "types": [ { "name": "required_1_0", "schemas": { "required_1_0": { "properties": { "foo": {} } } } } ] }, "tests": [ { "description": "not required by default", "data": {}, "schema_id": "required_1_0", "action": "validate", "expect": { "success": true } } ] }, { "description": "required with empty array", "database": { "types": [ { "name": "required_2_0", "schemas": { "required_2_0": { "properties": { "foo": {} }, "required": [] } } } ] }, "tests": [ { "description": "property not required", "data": {}, "schema_id": "required_2_0", "action": "validate", "expect": { "success": true } } ] }, { "description": "required with escaped characters", "database": { "types": [ { "name": "required_3_0", "schemas": { "required_3_0": { "required": [ "foo\nbar", "foo\"bar", "foo\\bar", "foo\rbar", "foo\tbar", "foo\fbar" ], "extensible": true } } } ] }, "tests": [ { "description": "object with all properties present is valid", "data": { "foo\nbar": 1, "foo\"bar": 1, "foo\\bar": 1, "foo\rbar": 1, "foo\tbar": 1, "foo\fbar": 1 }, "schema_id": "required_3_0", "action": "validate", "expect": { "success": true } }, { "description": "object with some properties missing is invalid", "data": { "foo\nbar": "1", "foo\"bar": "1" }, "schema_id": "required_3_0", "action": "validate", "expect": { "success": false, "errors": [ { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "foo\\bar" }, "details": { "path": "foo\\bar", "schema": "required_3_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "foo\rbar" }, "details": { "path": "foo\rbar", "schema": "required_3_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "foo\tbar" }, "details": { "path": "foo\tbar", "schema": "required_3_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "foo\fbar" }, "details": { "path": "foo\fbar", "schema": "required_3_0" } } ] } } ] }, { "description": "required properties whose names are Javascript object property names", "comment": "Ensure JS implementations don't universally consider e.g. __proto__ to always be present in an object.", "database": { "types": [ { "name": "required_4_0", "schemas": { "required_4_0": { "required": [ "__proto__", "toString", "constructor" ], "extensible": true } } } ] }, "tests": [ { "description": "ignores arrays", "data": [], "schema_id": "required_4_0", "action": "validate", "expect": { "success": true } }, { "description": "ignores other non-objects", "data": 12, "schema_id": "required_4_0", "action": "validate", "expect": { "success": true } }, { "description": "none of the properties mentioned", "data": {}, "schema_id": "required_4_0", "action": "validate", "expect": { "success": false, "errors": [ { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "__proto__" }, "details": { "path": "__proto__", "schema": "required_4_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "toString" }, "details": { "path": "toString", "schema": "required_4_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "constructor" }, "details": { "path": "constructor", "schema": "required_4_0" } } ] } }, { "description": "__proto__ present", "data": { "__proto__": "foo" }, "schema_id": "required_4_0", "action": "validate", "expect": { "success": false, "errors": [ { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "toString" }, "details": { "path": "toString", "schema": "required_4_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "constructor" }, "details": { "path": "constructor", "schema": "required_4_0" } } ] } }, { "description": "toString present", "data": { "toString": { "length": 37 } }, "schema_id": "required_4_0", "action": "validate", "expect": { "success": false, "errors": [ { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "__proto__" }, "details": { "path": "__proto__", "schema": "required_4_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "constructor" }, "details": { "path": "constructor", "schema": "required_4_0" } } ] } }, { "description": "constructor present", "data": { "constructor": { "length": 37 } }, "schema_id": "required_4_0", "action": "validate", "expect": { "success": false, "errors": [ { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "__proto__" }, "details": { "path": "__proto__", "schema": "required_4_0" } }, { "code": "REQUIRED_FIELD_MISSING", "values": { "field_name": "toString" }, "details": { "path": "toString", "schema": "required_4_0" } } ] } }, { "description": "all present", "data": { "__proto__": 12, "toString": { "length": "foo" }, "constructor": 37 }, "schema_id": "required_4_0", "action": "validate", "expect": { "success": true } } ] }, { "description": "extensible: true allows extra properties in required", "database": { "types": [ { "name": "required_5_0", "schemas": { "required_5_0": { "required": [ "foo" ], "extensible": true } } } ] }, "tests": [ { "description": "extra property is valid", "data": { "foo": 1, "bar": 2 }, "schema_id": "required_5_0", "action": "validate", "expect": { "success": true } } ] } ]