use allframe_core::router::{GraphQLAdapter, ProtocolAdapter, Router};
#[tokio::test]
async fn test_graphql_query() {
let mut router = Router::new();
router.register("user", || async move {
r#"{"id": 42, "name": "John Doe"}"#.to_string()
});
let mut adapter = GraphQLAdapter::new();
adapter.query("user", "user");
assert_eq!(adapter.name(), "graphql");
let query = r#"
query {
user(id: 42) {
id
name
}
}
"#;
let response = adapter.handle(query).await.unwrap();
assert!(response.contains("data") || response.contains("user"));
}
#[tokio::test]
async fn test_graphql_mutation() {
let mut router = Router::new();
router.register("createUser", || async move {
r#"{"name": "John", "email": "john@example.com"}"#.to_string()
});
let mut adapter = GraphQLAdapter::new();
adapter.mutation("createUser", "createUser");
let mutation = r#"
mutation {
createUser(name: "John", email: "john@example.com") {
name
email
}
}
"#;
let response = adapter.handle(mutation).await.unwrap();
assert!(!response.is_empty());
}
#[tokio::test]
async fn test_graphql_schema_generation() {
let mut router = Router::new();
router.register("user", || async move {
r#"{"id": 42, "name": "John Doe"}"#.to_string()
});
let mut adapter = GraphQLAdapter::new();
adapter.query("user", "user");
let schema = adapter.generate_schema();
assert!(schema.contains("type Query"));
assert!(schema.contains("user"));
}
#[tokio::test]
async fn test_graphql_nested_types() {
let mut router = Router::new();
router.register("user", || async move {
r#"{"id": 42, "name": "John Doe", "address": {"street": "123 Main St", "city": "Springfield"}}"#
.to_string()
});
let mut adapter = GraphQLAdapter::new();
adapter.query("user", "user");
let query = r#"
query {
user(id: 42) {
name
address {
city
}
}
}
"#;
let response = adapter.handle(query).await.unwrap();
assert!(!response.is_empty());
}
#[tokio::test]
async fn test_graphql_error_handling() {
let mut router = Router::new();
router.register("user", || async move {
r#"{"id": 42, "name": "John"}"#.to_string()
});
let mut adapter = GraphQLAdapter::new();
adapter.query("user", "user");
let valid_query = r#"query { user(id: 42) }"#;
let response = adapter.handle(valid_query).await;
assert!(response.is_ok());
let empty_query = "";
let response = adapter.handle(empty_query).await.unwrap();
assert!(response.contains("errors") || response.contains("Empty"));
}