@@ -2,7 +2,13 @@ package graphql.kickstart.tools
22
33import graphql.kickstart.tools.resolver.FieldResolverError
44import graphql.language.SourceLocation
5+ import graphql.schema.GraphQLArgument
6+ import graphql.schema.GraphQLInputObjectType
7+ import graphql.schema.GraphQLInputType
8+ import graphql.schema.GraphQLNonNull
59import graphql.schema.GraphQLSchema
10+ import graphql.schema.idl.SchemaDirectiveWiring
11+ import graphql.schema.idl.SchemaDirectiveWiringEnvironment
612import org.springframework.aop.framework.ProxyFactory
713import spock.lang.Specification
814
@@ -368,6 +374,45 @@ class SchemaParserSpec extends Specification {
368374 noExceptionThrown()
369375 }
370376
377+ def " NonNull and nullable arguments returning it's GraphQLInputObjectType " () {
378+ when :
379+ GraphQLSchema schema = SchemaParser . newParser(). schemaString(''' \
380+ type Query {
381+ testNonNullable(filter: Filter!): Boolean
382+ testNullable(filter: Filter): Boolean
383+ }
384+
385+ input Filter {
386+ filter: String
387+ }
388+ ''' . stripIndent())
389+ .resolvers(new GraphQLQueryResolver () {
390+ boolean testNonNullable (Filter filter ) { false }
391+ boolean testNullable (Filter filter ) { false }
392+ })
393+ .directiveWiring(new SchemaDirectiveWiring (){
394+ GraphQLArgument onArgument (SchemaDirectiveWiringEnvironment<GraphQLArgument > environment ) {
395+ switch (environment. getElement(). type. class) {
396+ case GraphQLNonNull :
397+ assert (environment. getElement(). type as graphql.schema.GraphQLNonNull ). wrappedType. class == GraphQLInputObjectType
398+ }
399+ return environment. getElement()
400+ }})
401+ .build()
402+ .makeExecutableSchema()
403+
404+ then :
405+ GraphQLArgument testNonNullableArgument = schema. getObjectType(" Query" )
406+ .getFieldDefinition(" testNonNullable" )
407+ .arguments. first()
408+ GraphQLArgument testNullableArgument = schema. getObjectType(" Query" )
409+ .getFieldDefinition(" testNullable" )
410+ .arguments. first()
411+ testNonNullableArgument. type. class == graphql.schema.GraphQLNonNull
412+ (testNonNullableArgument. type as graphql.schema.GraphQLNonNull ). wrappedType. class == GraphQLInputObjectType
413+ testNullableArgument. type. class == GraphQLInputObjectType
414+ }
415+
371416 enum EnumType {
372417 TEST
373418 }
0 commit comments