343 lines
12 KiB
JSON
343 lines
12 KiB
JSON
[
|
|
{
|
|
"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
|
|
}
|
|
]
|
|
}
|
|
] |