#[cfg(feature = "graphql")]
pub use sz_orm_graphql::{
GraphQLField, GraphQLSchema, GraphQLSchemaGenerator, GraphQLServer, GraphQLType,
};
#[cfg(feature = "graphql")]
pub mod resolver {
pub use sz_orm_graphql::resolver::DbResolver;
}
#[cfg(not(feature = "graphql"))]
compile_error!(
"GraphQL facade requires the `graphql` feature. \
Enable it in sz-rust-core: sz-rust-core = { features = [\"graphql\"] }"
);
#[cfg(all(feature = "graphql", test))]
mod tests {
use super::*;
#[test]
fn test_graphql_facade_exports_schema_types() {
let schema = GraphQLSchema::new();
assert!(schema.types.is_empty());
assert!(schema.queries.is_empty());
assert!(schema.mutations.is_empty());
}
#[test]
fn test_graphql_schema_generator() {
let schema = GraphQLSchemaGenerator::generate_schema(&["users", "orders"]);
assert_eq!(schema.types.len(), 2);
assert_eq!(schema.queries.len(), 4);
}
#[test]
fn test_graphql_server_creation() {
let schema = GraphQLSchemaGenerator::generate_schema(&["users"]);
let _server = GraphQLServer::new(9999).with_schema(schema);
}
#[tokio::test]
async fn test_graphql_server_start_and_query() {
let schema = GraphQLSchemaGenerator::generate_schema(&["products"]);
let server = GraphQLServer::new(9998).with_schema(schema);
let url = server.start().expect("server should start");
assert!(url.contains("9998"));
tokio::time::sleep(std::time::Duration::from_millis(50)).await;
let result = server.execute_query("{ getProduct(id: 1) { id name } }");
assert!(result.is_ok(), "query should succeed: {:?}", result);
let v = result.unwrap();
assert_eq!(v["id"], "1");
}
#[test]
fn test_graphql_execute_query_list() {
let schema = GraphQLSchemaGenerator::generate_schema(&["items"]);
let server = GraphQLServer::new(9997).with_schema(schema);
let result = server.execute_query("{ listItems { id name } }");
assert!(result.is_ok());
let v = result.unwrap();
assert!(v.is_array());
assert_eq!(v.as_array().unwrap().len(), 2);
}
#[test]
fn test_graphql_unknown_query_returns_error() {
let schema = GraphQLSchemaGenerator::generate_schema(&["users"]);
let server = GraphQLServer::new(9996).with_schema(schema);
let result = server.execute_query("{ unknownQuery { id } }");
assert!(result.is_err());
assert!(result.unwrap_err().contains("unknownQuery"));
}
#[test]
fn test_graphql_schema_sdl() {
let schema = GraphQLSchemaGenerator::generate_schema(&["users"]);
let sdl = schema.to_sdl();
assert!(sdl.contains("type User {"));
assert!(sdl.contains("getUser: User"));
assert!(sdl.contains("listUsers: [User!]!"));
}
}