[ { "description": "Entities extending entities", "database": { "types": [ { "name": "entity", "hierarchy": [ "entity" ], "schemas": [ { "$id": "entity", "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string", "const": "entity" } } } ] }, { "name": "organization", "hierarchy": [ "entity", "organization" ], "schemas": [ { "$id": "organization", "$ref": "entity", "properties": { "name": { "type": "string" } } } ] }, { "name": "person", "hierarchy": [ "entity", "organization", "person" ], "schemas": [ { "$id": "person", "$ref": "organization", "properties": { "first_name": { "type": "string" } } } ] } ], "puncs": [ { "name": "save_org", "schemas": [ { "$id": "save_org.request", "$ref": "organization" } ] } ] }, "tests": [ { "description": "Valid person against organization schema (implicit type allowance)", "schema_id": "save_org.request", "data": { "id": "1", "type": "person", "name": "ACME" }, "valid": true }, { "description": "Valid organization against organization schema", "schema_id": "save_org.request", "data": { "id": "2", "type": "organization", "name": "ACME" }, "valid": true }, { "description": "Invalid entity against organization schema (ancestor not allowed)", "schema_id": "save_org.request", "data": { "id": "3", "type": "entity" }, "valid": false }, { "description": "Invalid generic type against organization schema", "schema_id": "save_org.request", "data": { "id": "4", "type": "generic_thing" }, "valid": false } ] }, { "description": "Ad-hocs extending entities (still entities with type magic)", "database": { "types": [ { "name": "entity", "hierarchy": [ "entity" ], "schemas": [ { "$id": "entity", "type": "object", "properties": { "id": { "type": "string" }, "type": { "type": "string", "const": "entity" } } } ] }, { "name": "person", "hierarchy": [ "entity", "person" ], "schemas": [ { "$id": "person", "$ref": "entity", "properties": { "first_name": { "type": "string" } } } ] } ], "puncs": [ { "name": "save_person_light", "schemas": [ { "$id": "person.light", "$ref": "person", "extensible": false, "properties": { "first_name": { "type": "string" } } }, { "$id": "save_person_light.request", "$ref": "person.light" } ] } ] }, "tests": [ { "description": "Valid person against person.light ad-hoc schema", "schema_id": "save_person_light.request", "data": { "id": "1", "type": "person", "first_name": "John" }, "valid": true }, { "description": "Invalid person against person.light (strictness violation)", "schema_id": "save_person_light.request", "data": { "id": "1", "type": "person", "first_name": "John", "extra": "bad" }, "valid": false }, { "description": "Invalid entity against person.light ad-hoc schema (ancestor not allowed)", "schema_id": "save_person_light.request", "data": { "id": "1", "type": "entity", "first_name": "John" }, "valid": false } ] }, { "description": "Ad-hocs extending ad-hocs (No type property)", "database": { "puncs": [ { "name": "save_address", "schemas": [ { "$id": "address", "type": "object", "properties": { "street": { "type": "string" }, "city": { "type": "string" } } }, { "$id": "us_address", "$ref": "address", "properties": { "state": { "type": "string" }, "zip": { "type": "string" } } }, { "$id": "save_address.request", "$ref": "us_address" } ] } ] }, "tests": [ { "description": "Valid us_address", "schema_id": "save_address.request", "data": { "street": "123 Main", "city": "Anytown", "state": "CA", "zip": "12345" }, "valid": true }, { "description": "Invalid base address against us_address", "schema_id": "save_address.request", "data": { "street": "123 Main", "city": "Anytown" }, "valid": true } ] }, { "description": "Ad-hocs extending ad-hocs (with string type property, no magic)", "database": { "puncs": [ { "name": "save_config", "schemas": [ { "$id": "config_base", "type": "object", "properties": { "type": { "type": "string", "const": "config_base" }, "setting": { "type": "string" } } }, { "$id": "config_advanced", "$ref": "config_base", "properties": { "type": { "type": "string", "const": "config_advanced" }, "advanced_setting": { "type": "string" } } }, { "$id": "save_config.request", "$ref": "config_base" } ] } ] }, "tests": [ { "description": "Valid config_base against config_base", "schema_id": "save_config.request", "data": { "type": "config_base", "setting": "on" }, "valid": true }, { "description": "Invalid config_advanced against config_base (no type magic, const is strictly 'config_base')", "schema_id": "save_config.request", "data": { "type": "config_advanced", "setting": "on", "advanced_setting": "off" }, "valid": false } ] } ]