async-graphql/tests/fields_merge.rs

121 lines
2.2 KiB
Rust

use async_graphql::*;
#[tokio::test]
pub async fn test_field_merge() {
struct Query;
#[Object]
impl Query {
async fn value1(&self) -> i32 {
1
}
async fn value2(&self) -> i32 {
2
}
async fn value3(&self) -> i32 {
3
}
}
let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
let query = r#"
{
value1
... { value2 }
... A
}
fragment A on Query {
value3
}
"#;
assert_eq!(
schema.execute(query).await.data,
value!({
"value1": 1,
"value2": 2,
"value3": 3,
})
);
}
#[tokio::test]
pub async fn test_field_object_merge() {
#[derive(SimpleObject)]
struct MyObject {
a: i32,
b: i32,
c: i32,
}
struct Query;
#[Object]
impl Query {
async fn obj(&self) -> MyObject {
MyObject { a: 1, b: 2, c: 3 }
}
}
let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
let query = r#"
{
obj { a }
... { obj { b } }
... A
}
fragment A on Query {
obj { c }
}
"#;
assert_eq!(
schema.execute(query).await.data,
value!({
"obj": {
"a": 1,
"b": 2,
"c": 3,
}
})
);
}
#[tokio::test]
pub async fn test_field_object_merge2() {
#[derive(SimpleObject)]
struct MyObject {
a: i32,
b: i32,
c: i32,
}
struct Query;
#[Object]
impl Query {
async fn obj(&self) -> Vec<MyObject> {
vec![MyObject { a: 1, b: 2, c: 3 }, MyObject { a: 4, b: 5, c: 6 }]
}
}
let schema = Schema::new(Query, EmptyMutation, EmptySubscription);
let query = r#"
{
obj { a }
obj { b }
}
"#;
assert_eq!(
schema.execute(query).await.data,
value!({
"obj": [
{ "a": 1, "b": 2 },
{ "a": 4, "b": 5 },
]
})
);
}