use crate::helper::*; use wundergraph_example::MyContext; #[test] fn query_filter_eq() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, " { Heros(filter: {id: {eq: 1}}) { heroName } } ", ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Luke Skywalker" } ] }, [] ]"### ); } #[test] fn query_filter_not_eq() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, " { Heros(filter: {id: {not_eq: 1}}) { heroName } } ", ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Darth Vader" }, { "heroName": "Han Solo" }, { "heroName": "Leia Organa" }, { "heroName": "Wilhuff Tarkin" } ] }, [] ]"### ); } #[test] fn query_filter_like() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {heroName: {like: "Leia %"}}) { heroName } } "#, ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Leia Organa" } ] }, [] ]"### ); } #[test] fn query_filter_cannot_use_like_with_non_strings() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {heroName: {id: "Leia %"}}) { heroName } } "#, ); assert!(res.is_err()); } #[test] fn query_filter_eq_any() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, " { Heros(filter: {id: {eq_any: [1, 4]}}) { heroName } } ", ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Luke Skywalker" }, { "heroName": "Leia Organa" } ] }, [] ]"### ); } #[test] fn query_filter_and() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {and: [{heroName: {like: "Leia %"}}, {id: {eq: 4}}]}) { heroName } } "#, ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Leia Organa" } ] }, [] ]"### ); } #[test] fn query_filter_or() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {or: [{heroName: {like: "Leia %"}}, {id: {eq: 1}}]}) { heroName } } "#, ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Luke Skywalker" }, { "heroName": "Leia Organa" } ] }, [] ]"### ); } #[test] fn query_filter_is_null() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {hair_color: {is_null: true}}) { heroName } } "#, ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Darth Vader" }, { "heroName": "Han Solo" }, { "heroName": "Leia Organa" }, { "heroName": "Wilhuff Tarkin" } ] }, [] ]"### ); } #[test] fn query_filter_is_not_null() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {hair_color: {is_null: false}}) { heroName } } "#, ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Luke Skywalker" } ] }, [] ]"### ); } #[test] fn query_filter_is_null_cannot_be_used_with_not_nullable_fields() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {id: {is_null: true}}) { heroName } } "#, ); assert!(res.is_err()); } #[test] fn query_filter_type_could_have_2_modifiers() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Heros(filter: {and: [{hair_color: {is_null: false}}, {hair_color: {like: "%"}}]}) { heroName } } "#, ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Luke Skywalker" } ] }, [] ]"### ); } #[test] fn query_filter_not() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, " { Heros(filter: {not: {id: {eq: 1}}}) { heroName } } ", ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Heros": [ { "heroName": "Darth Vader" }, { "heroName": "Han Solo" }, { "heroName": "Leia Organa" }, { "heroName": "Wilhuff Tarkin" } ] }, [] ]"### ); } #[test] fn filter_on_field() { let (schema, pool) = get_example_schema(); let ctx = MyContext::new(pool.get().unwrap()); let res = execute_query( &schema, &ctx, r#" { Speciess { id name heros(filter: {heroName: {like: "Luke%"}}) { heroName } } } "#, ); assert!(res.is_ok()); assert_json_snapshot!( res.as_json(), @r###"[ { "Speciess": [ { "heros": [ { "heroName": "Luke Skywalker" } ], "id": 1, "name": "Human" }, { "heros": [], "id": 2, "name": "Robot" } ] }, [] ]"### ); }