From 23105259de4c5e750f677ddb9de77c44edfa019c Mon Sep 17 00:00:00 2001 From: Magnus Hallin <mhallin@fastmail.com> Date: Mon, 20 Nov 2017 08:53:32 +0100 Subject: [PATCH] Add another test for null handling in lists --- juniper/src/executor_tests/executor.rs | 51 +++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/juniper/src/executor_tests/executor.rs b/juniper/src/executor_tests/executor.rs index 13f4fe78..3357b7b8 100644 --- a/juniper/src/executor_tests/executor.rs +++ b/juniper/src/executor_tests/executor.rs @@ -452,6 +452,7 @@ mod propagates_errors_to_nullable_fields { graphql_object!(Schema: () |&self| { field inner() -> Inner { Inner } field inners() -> Vec<Inner> { (0..5).map(|_| Inner).collect() } + field nullable_inners() -> Vec<Option<Inner>> { (0..5).map(|_| Some(Inner)).collect() } }); graphql_object!(Inner: () |&self| { @@ -610,8 +611,54 @@ mod propagates_errors_to_nullable_fields { errs, vec![ ExecutionError::new( - SourcePosition::new(10, 0, 10), - &["inner", "nonNullableErrorField"], + SourcePosition::new(11, 0, 11), + &["inners", "nonNullableErrorField"], + FieldError::new("Error for nonNullableErrorField", Value::null()), + ), + ]); + } + + #[test] + fn non_null_list_of_nullable() { + let schema = RootNode::new(Schema, EmptyMutation::<()>::new()); + let doc = r"{ nullableInners { nonNullableErrorField } }"; + + let vars = vec![].into_iter().collect(); + + let (result, errs) = ::execute(doc, None, &schema, &vars, &()).expect("Execution failed"); + + println!("Result: {:?}", result); + + assert_eq!( + result, + graphql_value!({ "nullableInners": [None, None, None, None, None] })); + + assert_eq!( + errs, + vec![ + ExecutionError::new( + SourcePosition::new(19, 0, 19), + &["nullableInners", "nonNullableErrorField"], + FieldError::new("Error for nonNullableErrorField", Value::null()), + ), + ExecutionError::new( + SourcePosition::new(19, 0, 19), + &["nullableInners", "nonNullableErrorField"], + FieldError::new("Error for nonNullableErrorField", Value::null()), + ), + ExecutionError::new( + SourcePosition::new(19, 0, 19), + &["nullableInners", "nonNullableErrorField"], + FieldError::new("Error for nonNullableErrorField", Value::null()), + ), + ExecutionError::new( + SourcePosition::new(19, 0, 19), + &["nullableInners", "nonNullableErrorField"], + FieldError::new("Error for nonNullableErrorField", Value::null()), + ), + ExecutionError::new( + SourcePosition::new(19, 0, 19), + &["nullableInners", "nonNullableErrorField"], FieldError::new("Error for nonNullableErrorField", Value::null()), ), ]);