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("test_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": [], "types": [{ "schemas": [{ "$id": "test_schema", "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"] }] }] }); let cache_drop = jspg_setup(JsonB(db_json)); assert_eq!( cache_drop.0, json!({ "type": "drop", "response": "success" }) ); // 4. Validate Happy Path let happy_drop = jspg_validate("test_schema", JsonB(json!({"name": "Neo"}))); assert_eq!( happy_drop.0, json!({ "type": "drop", "response": "success" }) ); // 5. Validate Unhappy Path let unhappy_drop = jspg_validate("test_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");