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");