use crate::execute;
#[tokio::test]
async fn find_many() {
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { available: true } }) {
data {
id
}
}
}
"#,
);
let response = execute(request, None).await;
assert!(response.is_ok());
}
#[tokio::test]
async fn find_many_with_or_filter() {
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { OR: [{ id: 1 }, { id: 2 }] } }) {
data {
id
}
}
}
"#,
);
let response = execute(request, None).await;
assert!(response.is_ok());
}
#[tokio::test]
async fn find_many_with_eager_loading() {
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { available: true, orders: { status: "success" } } }) {
data {
id
}
}
}
"#,
);
let response = execute(request, None).await;
assert!(response.is_ok());
}
#[tokio::test]
async fn find_many_with_meta_data() {
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { available: true } }) {
data {
id
}
meta {
request_id
count
total_count
page
total_pages
service_name
executed_at
service_version
user_uuid
}
}
}
"#,
);
let response = execute(request, None).await;
let json = response.data.into_json().unwrap();
let meta = json.get("get_coffees").unwrap().get("meta").unwrap();
assert!(meta.get("request_id").is_some());
assert!(meta.get("count").is_some());
assert!(meta.get("total_count").is_some());
assert!(meta.get("page").is_some());
assert!(meta.get("total_pages").is_some());
assert!(meta.get("service_name").is_some());
assert!(meta.get("executed_at").is_some());
assert!(meta.get("service_version").is_some());
assert!(meta.get("user_uuid").is_some());
}
#[tokio::test]
async fn find_many_with_pagination() {
for _i in 1..=10 {
let request = async_graphql::Request::new(
r#"
mutation {
create_coffee(create_coffee_input: { values: { name: "Pagination Test", price: 12, available: true, created_by: "6510865e93142f6d61b10dd8" } }) {
data {
id
}
}
}
"#,
);
let response = execute(request, None).await;
assert!(response.is_ok());
}
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { name: "Pagination Test" }, opts: { page: 1, per_page: 3 } }) {
data {
id
}
meta {
count
total_count
page
total_pages
}
}
}
"#,
);
let response = execute(request, None).await;
let json = response.data.into_json().unwrap();
let meta = json.get("get_coffees").unwrap().get("meta").unwrap();
assert_eq!(meta.get("count").unwrap().as_i64().unwrap(), 3);
assert!(meta.get("total_count").unwrap().as_i64().unwrap() > 9);
assert_eq!(meta.get("page").unwrap().as_i64().unwrap(), 1);
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { name: "Pagination Test" }, opts: { page: 2, per_page: 3 } }) {
data {
id
}
meta {
count
total_count
page
total_pages
}
}
}
"#,
);
let response = execute(request, None).await;
let json = response.data.into_json().unwrap();
let meta = json.get("get_coffees").unwrap().get("meta").unwrap();
assert_eq!(meta.get("count").unwrap().as_i64().unwrap(), 3);
assert!(meta.get("total_count").unwrap().as_i64().unwrap() > 9);
assert_eq!(meta.get("page").unwrap().as_i64().unwrap(), 2);
}
#[tokio::test]
async fn find_many_with_sorting() {
let alphabet = vec!["A", "B", "C", "D", "E", "F", "G", "H", "I"];
for i in 1..=9 {
let request = async_graphql::Request::new(format!(
r#"
mutation {{
update_coffees(update_coffees_input: {{ query: {{ name: "{}" }}, values: {{ name: "deprecated" }} }}) {{
data {{
id
}}
}}
}}
"#,
alphabet[i - 1]
));
let response = execute(request, None).await;
assert!(response.is_ok());
}
for i in 1..=9 {
let request = async_graphql::Request::new(format!(
r#"
mutation {{
create_coffee(create_coffee_input: {{ values: {{ name: "{}", price: {}, available: true, created_by: "6510865e93142f6d61b10dd8" }} }}) {{
data {{
id
}}
}}
}}
"#,
alphabet[i - 1],
i
));
let response = execute(request, None).await;
assert!(response.is_ok());
}
for i in 1..=9 {
let request = async_graphql::Request::new(format!(
r#"
mutation {{
create_coffee(create_coffee_input: {{ values: {{ name: "{}", price: {}, available: true, created_by: "6510865e93142f6d61b10dd8" }} }}) {{
data {{
id
}}
}}
}}
"#,
alphabet[i - 1],
i + 2
));
let response = execute(request, None).await;
assert!(response.is_ok());
}
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { available: true }, opts: { sort: [{ field: "price", direction: "ASC" }, { field: "name", direction: "DESC" }] } }) {
data {
id
name
price
}
}
}
"#,
);
let response = execute(request, None).await;
let json = response.data.into_json().unwrap();
let coffees = json
.get("get_coffees")
.unwrap()
.get("data")
.unwrap()
.as_array()
.unwrap();
for i in 0..=8 {
let coffee = coffees.get(i).unwrap();
let next_coffee = coffees.get(i + 1).unwrap();
let coffee_price = coffee.get("price").unwrap().as_i64().unwrap();
let next_coffee_price = next_coffee.get("price").unwrap().as_i64().unwrap();
let coffee_name = coffee.get("name").unwrap().as_str().unwrap();
let next_coffee_name = next_coffee.get("name").unwrap().as_str().unwrap();
assert!(coffee_price <= next_coffee_price);
if coffee_price == next_coffee_price {
assert!(coffee_name >= next_coffee_name);
}
}
}
#[tokio::test]
async fn find_many_with_like_filter() {
let uuid_name = format!("with_like_filter_{}", uuid::Uuid::new_v4());
for i in 1..=9 {
let request = async_graphql::Request::new(format!(
r#"
mutation {{
create_coffee(create_coffee_input: {{ values: {{ name: "{}", price: {}, available: true, created_by: "6510865e93142f6d61b10dd8" }} }}) {{
data {{
id
}}
}}
}}
"#,
format!("{}_{}", uuid_name, i),
i
));
let response = execute(request, None).await;
assert!(response.is_ok());
}
let request = async_graphql::Request::new(format!(
r#"
query {{
get_coffees(get_coffees_input: {{ query: {{ LIKE: {{ name: "{}%" }} }} }}) {{
data {{
id
name
}}
}}
}}
"#,
uuid_name
));
let response = execute(request, None).await;
let json = response.data.into_json().unwrap();
let coffees = json
.get("get_coffees")
.unwrap()
.get("data")
.unwrap()
.as_array()
.unwrap();
assert_eq!(coffees.len(), 9);
}
#[tokio::test]
async fn find_many_with_lt_gt_filters() {
let prices = vec![41, 42, 43, 44, 45, 46, 47, 48, 49];
for price in prices {
let request = async_graphql::Request::new(format!(
r#"
mutation {{
create_coffee(create_coffee_input: {{ values: {{ name: "lt_gt_filter", price: {}, available: true, created_by: "6510865e93142f6d61b10dd8" }} }}) {{
data {{
id
}}
}}
}}
"#,
price
));
let response = execute(request, None).await;
assert!(response.is_ok());
}
let request = async_graphql::Request::new(
r#"
query {
get_coffees(get_coffees_input: { query: { AND: [{ GT: { price: 40 } }, { LT: { price: 50 } }] } }) {
data {
id
name
price
}
}
}
"#,
);
let response = execute(request, None).await;
let json = response.data.into_json().unwrap();
let coffees = json
.get("get_coffees")
.unwrap()
.get("data")
.unwrap()
.as_array()
.unwrap();
assert!(coffees.len() >= 9);
for coffee in coffees {
let price = coffee.get("price").unwrap().as_i64().unwrap();
assert!(price > 40 && price < 50);
}
}