Files
jspg/src/tests/mod.rs

160 lines
4.2 KiB
Rust

use crate::*;
pub mod runner;
pub mod types;
use serde_json::json;
// Database module tests moved to src/database/executors/mock.rs
#[test]
fn test_library_api() {
// 1. Initially, schemas are not cached.
// Expected uninitialized drop format: errors + null response
let uninitialized_drop = jspg_validate("source_schema", JsonB(json!({})));
assert_eq!(
uninitialized_drop.0,
json!({
"type": "drop",
"errors": [{
"code": "ENGINE_NOT_INITIALIZED",
"message": "JSPG extension has not been initialized via jspg_setup",
"details": { "path": "" }
}]
})
);
// 2. Cache schemas
let db_json = json!({
"puncs": [],
"enums": [],
"relations": [
{
"id": "11111111-1111-1111-1111-111111111111",
"type": "relation",
"constraint": "fk_test_target",
"source_type": "source_schema",
"source_columns": ["target_id"],
"destination_type": "target_schema",
"destination_columns": ["id"],
"prefix": "target"
}
],
"types": [
{
"name": "source_schema",
"hierarchy": ["source_schema", "entity"],
"schemas": [{
"$id": "source_schema",
"type": "object",
"properties": {
"name": { "type": "string" },
"target": { "$ref": "target_schema" }
},
"required": ["name"]
}]
},
{
"name": "target_schema",
"hierarchy": ["target_schema", "entity"],
"schemas": [{
"$id": "target_schema",
"type": "object",
"properties": {
"value": { "type": "number" }
}
}]
}
]
});
let cache_drop = jspg_setup(JsonB(db_json));
assert_eq!(
cache_drop.0,
json!({
"type": "drop",
"response": "success"
})
);
// 3. Validate jspg_schemas
let schemas_drop = jspg_schemas();
assert_eq!(
schemas_drop.0,
json!({
"type": "drop",
"response": {
"source_schema": {
"$id": "source_schema",
"type": "object",
"properties": {
"name": { "type": "string" },
"target": {
"$ref": "target_schema",
"compiledProperties": ["value"]
}
},
"required": ["name"],
"compiledProperties": ["name", "target"],
"compiledEdges": {
"target": {
"constraint": "fk_test_target",
"forward": true
}
}
},
"target_schema": {
"$id": "target_schema",
"type": "object",
"properties": {
"value": { "type": "number" }
},
"compiledProperties": ["value"]
}
}
})
);
// 4. Validate Happy Path
let happy_drop = jspg_validate("source_schema", JsonB(json!({"name": "Neo"})));
assert_eq!(
happy_drop.0,
json!({
"type": "drop",
"response": "success"
})
);
// 5. Validate Unhappy Path
let unhappy_drop = jspg_validate("source_schema", JsonB(json!({"wrong": "data"})));
assert_eq!(
unhappy_drop.0,
json!({
"type": "drop",
"errors": [
{
"code": "REQUIRED_FIELD_MISSING",
"message": "Missing name",
"details": { "path": "/name" }
},
{
"code": "STRICT_PROPERTY_VIOLATION",
"message": "Unexpected property 'wrong'",
"details": { "path": "/wrong" }
}
]
})
);
// 6. Clear Schemas
let clear_drop = jspg_teardown();
assert_eq!(
clear_drop.0,
json!({
"type": "drop",
"response": "success"
})
);
}
include!("fixtures.rs");