Skip to content

Commit 34f34fe

Browse files
authored
Merge pull request #2014 from dugenkui03/fix_for_ValuesResolver
Fix getArgumentValuesImpl according by spec.CoerceArgumentValues()
2 parents df5bbde + e33e017 commit 34f34fe

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

src/main/java/graphql/execution/ValuesResolver.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,10 @@ private Map<String, Object> getArgumentValuesImpl(GraphQLCodeRegistry codeRegist
108108
if (argument != null) {
109109
value = coerceValueAst(codeRegistry.getFieldVisibility(), fieldArgument.getType(), argument.getValue(), variables);
110110
}
111-
if (value == null) {
111+
if (value == null
112+
&& !(argument != null && argument.getValue() instanceof NullValue)
113+
&& !(argument != null && argument.getValue() instanceof VariableReference && variables.containsKey(((VariableReference) argument.getValue()).getName()))
114+
) {
112115
value = fieldArgument.getDefaultValue();
113116
}
114117
boolean wasValueProvided = false;

src/test/groovy/graphql/execution/ValuesResolverTest.groovy

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import graphql.language.EnumValue
99
import graphql.language.IntValue
1010
import graphql.language.ListType
1111
import graphql.language.NonNullType
12+
import graphql.language.NullValue
1213
import graphql.language.ObjectField
1314
import graphql.language.ObjectValue
1415
import graphql.language.StringValue
@@ -449,4 +450,40 @@ class ValuesResolverTest extends Specification {
449450
then:
450451
thrown(GraphQLException)
451452
}
453+
454+
// Note: use NullValue defined in Field when it exists,
455+
// and ignore defaultValue defined in type system
456+
def "getArgumentValues: use null value when argumentValue defined in Field is null"() {
457+
given: "schema defining input object"
458+
def inputObjectType = newInputObject()
459+
.name("inputObject")
460+
.build()
461+
462+
def fieldArgument = new GraphQLArgument("arg", "", inputObjectType, "hello")
463+
def argument = new Argument("arg", NullValue.newNullValue().build())
464+
465+
when:
466+
def variables = [:]
467+
def values = resolver.getArgumentValues([fieldArgument], [argument], variables)
468+
469+
then:
470+
values['arg'] == null
471+
}
472+
473+
def "getArgumentValues: use null when reference value in variables is null"() {
474+
given: "schema defining input object"
475+
def inputObjectType = newInputObject()
476+
.name("inputObject")
477+
.build()
478+
479+
def fieldArgument = new GraphQLArgument("arg", "", inputObjectType, "hello")
480+
def argument = new Argument("arg", new VariableReference("var"))
481+
482+
when:
483+
def variables = ["var": null]
484+
def values = resolver.getArgumentValues([fieldArgument], [argument], variables)
485+
486+
then:
487+
values['arg'] == null
488+
}
452489
}

0 commit comments

Comments
 (0)