async-graphql/tests/json_type.rs

57 lines
1.4 KiB
Rust
Raw Normal View History

2020-07-08 06:44:57 +00:00
use std::collections::HashMap;
2022-04-19 04:25:11 +00:00
use async_graphql::*;
#[tokio::test]
2020-07-08 06:44:57 +00:00
pub async fn test_json_scalar() {
#[derive(serde::Serialize, serde::Deserialize)]
struct MyData(HashMap<String, i32>);
#[derive(serde::Serialize, Clone)]
struct MyDataOutput(HashMap<String, i32>);
struct Query {
data: MyDataOutput,
}
#[Object]
2020-07-08 06:44:57 +00:00
impl Query {
async fn data(&self) -> Json<MyData> {
let mut items = HashMap::new();
items.insert("a".to_string(), 10);
items.insert("b".to_string(), 20);
Json(MyData(items))
}
async fn data_output(&self) -> Json<&MyDataOutput> {
Json(&self.data)
2020-07-08 06:44:57 +00:00
}
async fn data_output_clone(&self) -> Json<MyDataOutput> {
Json(self.data.clone())
2020-07-08 06:44:57 +00:00
}
}
let schema = Schema::new(
Query {
data: {
let mut items = HashMap::new();
items.insert("a".to_string(), 10);
items.insert("b".to_string(), 20);
MyDataOutput(items)
},
},
EmptyMutation,
EmptySubscription,
);
let query = r#"{ data dataOutput dataOutputClone }"#;
assert_eq!(
2020-09-10 11:35:48 +00:00
schema.execute(query).await.data,
value!({
2020-07-08 06:44:57 +00:00
"data": { "a": 10, "b": 20},
"dataOutput": { "a": 10, "b": 20},
"dataOutputClone": { "a": 10, "b": 20},
})
);
}