179 lines
4.5 KiB
JSON
179 lines
4.5 KiB
JSON
[
|
|
{
|
|
"description": "Hybrid Array Pathing",
|
|
"database": {
|
|
"schemas": [
|
|
{
|
|
"$id": "hybrid_pathing",
|
|
"type": "object",
|
|
"properties": {
|
|
"primitives": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"ad_hoc_objects": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
]
|
|
}
|
|
},
|
|
"entities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "number",
|
|
"minimum": 10
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"deep_entities": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"nested": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"flag": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "happy path passes structural validation",
|
|
"data": {
|
|
"primitives": ["a", "b"],
|
|
"ad_hoc_objects": [{"name": "obj1"}],
|
|
"entities": [{"id": "entity-1", "value": 15}],
|
|
"deep_entities": [
|
|
{
|
|
"id": "parent-1",
|
|
"nested": [{"id": "child-1", "flag": true}]
|
|
}
|
|
]
|
|
},
|
|
"schema_id": "hybrid_pathing",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": true
|
|
}
|
|
},
|
|
{
|
|
"description": "primitive arrays use numeric indexing",
|
|
"data": {
|
|
"primitives": ["a", 123]
|
|
},
|
|
"schema_id": "hybrid_pathing",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": false,
|
|
"errors": [
|
|
{
|
|
"code": "INVALID_TYPE",
|
|
"path": "/primitives/1"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "ad-hoc objects without ids use numeric indexing",
|
|
"data": {
|
|
"ad_hoc_objects": [
|
|
{"name": "valid"},
|
|
{"age": 30}
|
|
]
|
|
},
|
|
"schema_id": "hybrid_pathing",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": false,
|
|
"errors": [
|
|
{
|
|
"code": "REQUIRED_FIELD_MISSING",
|
|
"path": "/ad_hoc_objects/1/name"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "arrays of objects with ids use topological uuid indexing",
|
|
"data": {
|
|
"entities": [
|
|
{"id": "entity-alpha", "value": 20},
|
|
{"id": "entity-beta", "value": 5}
|
|
]
|
|
},
|
|
"schema_id": "hybrid_pathing",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": false,
|
|
"errors": [
|
|
{
|
|
"code": "MINIMUM_VIOLATED",
|
|
"path": "/entities/entity-beta/value"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "deeply nested entity arrays retain full topological paths",
|
|
"data": {
|
|
"deep_entities": [
|
|
{
|
|
"id": "parent-omega",
|
|
"nested": [
|
|
{"id": "child-alpha", "flag": true},
|
|
{"id": "child-beta", "flag": "invalid-string"}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"schema_id": "hybrid_pathing",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": false,
|
|
"errors": [
|
|
{
|
|
"code": "INVALID_TYPE",
|
|
"path": "/deep_entities/parent-omega/nested/child-beta/flag"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|