184 lines
5.8 KiB
JSON
184 lines
5.8 KiB
JSON
[
|
|
{
|
|
"description": "Multi-Paradigm Declarative Cases",
|
|
"database": {
|
|
"schemas": [
|
|
{
|
|
"$id": "parallel_rules",
|
|
"type": "object",
|
|
"properties": {
|
|
"status": { "type": "string" },
|
|
"kind": { "type": "string" }
|
|
},
|
|
"cases": [
|
|
{
|
|
"when": { "properties": { "status": {"const": "unverified"} }, "required": ["status"] },
|
|
"then": {
|
|
"properties": {
|
|
"amount_1": {"type": "number"},
|
|
"amount_2": {"type": "number"}
|
|
},
|
|
"required": ["amount_1", "amount_2"]
|
|
}
|
|
},
|
|
{
|
|
"when": { "properties": { "kind": {"const": "credit"} }, "required": ["kind"] },
|
|
"then": {
|
|
"properties": {
|
|
"cvv": {"type": "number"}
|
|
},
|
|
"required": ["cvv"]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"$id": "mutually_exclusive",
|
|
"type": "object",
|
|
"properties": {
|
|
"type": { "type": "string" }
|
|
},
|
|
"cases": [
|
|
{
|
|
"when": { "properties": { "type": {"const": "A"} }, "required": ["type"] },
|
|
"then": {
|
|
"properties": { "field_a": {"type": "number"} },
|
|
"required": ["field_a"]
|
|
}
|
|
},
|
|
{
|
|
"when": { "properties": { "type": {"const": "B"} }, "required": ["type"] },
|
|
"then": {
|
|
"properties": { "field_b": {"type": "number"} },
|
|
"required": ["field_b"]
|
|
},
|
|
"else": {
|
|
"properties": { "fallback_b": {"type": "number"} },
|
|
"required": ["fallback_b"]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"$id": "nested_fallbacks",
|
|
"type": "object",
|
|
"properties": {
|
|
"tier": { "type": "string" }
|
|
},
|
|
"cases": [
|
|
{
|
|
"when": { "properties": { "tier": {"const": "1"} }, "required": ["tier"] },
|
|
"then": {
|
|
"properties": { "basic": {"type": "number"} },
|
|
"required": ["basic"]
|
|
},
|
|
"else": {
|
|
"cases": [
|
|
{
|
|
"when": { "properties": { "tier": {"const": "2"} }, "required": ["tier"] },
|
|
"then": {
|
|
"properties": { "standard": {"type": "number"} },
|
|
"required": ["standard"]
|
|
},
|
|
"else": {
|
|
"properties": { "premium": {"type": "number"} },
|
|
"required": ["premium"]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"$id": "missing_when",
|
|
"type": "object",
|
|
"cases": [
|
|
{
|
|
"else": {
|
|
"properties": { "unconditional": {"type": "number"} },
|
|
"required": ["unconditional"]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"tests": [
|
|
{
|
|
"description": "Fires only the first rule successfully",
|
|
"data": { "status": "unverified", "amount_1": 1, "amount_2": 2 },
|
|
"schema_id": "parallel_rules",
|
|
"action": "validate",
|
|
"expect": { "success": true }
|
|
},
|
|
{
|
|
"description": "Fires both independent parallel rules flawlessly",
|
|
"data": { "status": "unverified", "kind": "credit", "amount_1": 1, "amount_2": 2, "cvv": 123 },
|
|
"schema_id": "parallel_rules",
|
|
"action": "validate",
|
|
"expect": { "success": true }
|
|
},
|
|
{
|
|
"description": "Catches errors triggered concurrently by multiple independent blocked rules",
|
|
"data": { "status": "unverified", "kind": "credit" },
|
|
"schema_id": "parallel_rules",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": false,
|
|
"errors": [
|
|
{ "code": "REQUIRED_FIELD_MISSING", "details": { "path": "amount_1" } },
|
|
{ "code": "REQUIRED_FIELD_MISSING", "details": { "path": "amount_2" } },
|
|
{ "code": "REQUIRED_FIELD_MISSING", "details": { "path": "cvv" } }
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "STRICT_PROPERTY_VIOLATION throws if an un-triggered then property is submitted",
|
|
"data": { "status": "verified", "cvv": 123 },
|
|
"schema_id": "parallel_rules",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": false,
|
|
"errors": [
|
|
{ "code": "STRICT_PROPERTY_VIOLATION", "details": { "path": "cvv" } }
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"description": "Successfully routes mutually exclusive properties seamlessly",
|
|
"data": { "type": "A", "field_a": 1, "fallback_b": 2 },
|
|
"schema_id": "mutually_exclusive",
|
|
"action": "validate",
|
|
"expect": { "success": true }
|
|
},
|
|
{
|
|
"description": "Nested fallbacks execute seamlessly",
|
|
"data": { "tier": "3", "premium": 1 },
|
|
"schema_id": "nested_fallbacks",
|
|
"action": "validate",
|
|
"expect": { "success": true }
|
|
},
|
|
{
|
|
"description": "A case without a when executes its else indiscriminately",
|
|
"data": { "unconditional": 1 },
|
|
"schema_id": "missing_when",
|
|
"action": "validate",
|
|
"expect": { "success": true }
|
|
},
|
|
{
|
|
"description": "A case without a when throws if else unconditionally requires field",
|
|
"data": { },
|
|
"schema_id": "missing_when",
|
|
"action": "validate",
|
|
"expect": {
|
|
"success": false,
|
|
"errors": [
|
|
{ "code": "REQUIRED_FIELD_MISSING", "details": { "path": "unconditional" } }
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|