Skip to content

Commit 68f5975

Browse files
tinnoubbakerman
authored andcommitted
Fix #882, variable input type mismatch throws AssertException
1 parent 4cad94a commit 68f5975

3 files changed

Lines changed: 82 additions & 6 deletions

File tree

src/main/java/graphql/execution/TypeFromAST.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ public class TypeFromAST {
1616

1717

1818
public static GraphQLType getTypeFromAST(GraphQLSchema schema, Type type) {
19+
GraphQLType innerType;
1920
if (type instanceof ListType) {
20-
return new GraphQLList(getTypeFromAST(schema, ((ListType) type).getType()));
21+
innerType = getTypeFromAST(schema, ((ListType) type).getType());
22+
return innerType != null ? new GraphQLList(innerType) : null;
2123
} else if (type instanceof NonNullType) {
22-
return new GraphQLNonNull(getTypeFromAST(schema, ((NonNullType) type).getType()));
24+
innerType = getTypeFromAST(schema, ((NonNullType) type).getType());
25+
return innerType != null ? new GraphQLNonNull(innerType) : null;
2326
}
27+
2428
return schema.getType(((TypeName) type).getName());
2529
}
2630
}

src/main/java/graphql/validation/TraversalContext.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package graphql.validation;
22

33

4+
import java.util.ArrayList;
5+
import java.util.List;
6+
47
import graphql.Assert;
58
import graphql.Internal;
69
import graphql.execution.TypeFromAST;
@@ -36,9 +39,6 @@
3639
import graphql.schema.GraphQLUnmodifiedType;
3740
import graphql.schema.SchemaUtil;
3841

39-
import java.util.ArrayList;
40-
import java.util.List;
41-
4242
import static graphql.introspection.Introspection.SchemaMetaFieldDef;
4343
import static graphql.introspection.Introspection.TypeMetaFieldDef;
4444
import static graphql.introspection.Introspection.TypeNameMetaFieldDef;
@@ -139,7 +139,7 @@ private void enterImpl(FragmentDefinition fragmentDefinition) {
139139

140140
private void enterImpl(VariableDefinition variableDefinition) {
141141
GraphQLType type = TypeFromAST.getTypeFromAST(schema, variableDefinition.getType());
142-
addInputType((GraphQLInputType) type);
142+
addInputType(type != null ? (GraphQLInputType) type : null);
143143
}
144144

145145
private void enterImpl(Argument argument) {
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package graphql.validation
2+
/**
3+
* validation examples used in the spec in given section
4+
* http://facebook.github.io/graphql/#sec-Validation
5+
*
6+
*/
7+
class SpecValidation573Test extends SpecValidationBase {
8+
9+
def '5.7.3 Variables Are Input Types - type mismatch (must be non-null)'() {
10+
def query = """
11+
query madDog(\$dogCommand: DogCommand){
12+
dog {
13+
doesKnowCommand(dogCommand: \$dogCommand)
14+
}
15+
}"""
16+
when:
17+
def validationErrors = validate(query)
18+
19+
then:
20+
!validationErrors.empty
21+
validationErrors.size() == 1
22+
validationErrors.get(0).getValidationErrorType() == ValidationErrorType.VariableTypeMismatch
23+
}
24+
25+
def '5.7.3 Variables Are Input Types - unknown type'() {
26+
def query = """
27+
query madDog(\$dogCommand: UnknownType){
28+
dog {
29+
doesKnowCommand(dogCommand: \$dogCommand)
30+
}
31+
}"""
32+
when:
33+
def validationErrors = validate(query)
34+
35+
then:
36+
!validationErrors.empty
37+
validationErrors.size() == 1
38+
validationErrors.get(0).getValidationErrorType() == ValidationErrorType.UnknownType
39+
}
40+
41+
def '5.7.3 Variables Are Input Types - non-null unknown type'() {
42+
def query = """
43+
query madDog(\$dogCommand: UnknownType!){
44+
dog {
45+
doesKnowCommand(dogCommand: \$dogCommand)
46+
}
47+
}"""
48+
when:
49+
def validationErrors = validate(query)
50+
51+
then:
52+
!validationErrors.empty
53+
validationErrors.size() == 1
54+
validationErrors.get(0).getValidationErrorType() == ValidationErrorType.UnknownType
55+
}
56+
57+
def '5.7.3 Variables Are Input Types - non-null list unknown type'() {
58+
def query = """
59+
query madDog(\$dogCommand: [UnknownType]){
60+
dog {
61+
doesKnowCommand(dogCommand: \$dogCommand)
62+
}
63+
}"""
64+
when:
65+
def validationErrors = validate(query)
66+
67+
then:
68+
!validationErrors.empty
69+
validationErrors.size() == 1
70+
validationErrors.get(0).getValidationErrorType() == ValidationErrorType.UnknownType
71+
}
72+
}

0 commit comments

Comments
 (0)