use ::jspg::*; use pgrx::JsonB; use serde_json::json; pub mod database; #[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": "VALIDATOR_NOT_INITIALIZED", "message": "The JSPG database has not been cached yet. Run 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" }) ); }