From da586630270d8d8104e4f430d1ec1c4a41d2ecc7 Mon Sep 17 00:00:00 2001 From: dugenkui03 Date: Wed, 25 Nov 2020 01:36:11 +0800 Subject: [PATCH] introspection for repeatable directive info --- .../graphql/introspection/Introspection.java | 4 ++++ .../introspection/IntrospectionQuery.java | 1 + .../introspection/IntrospectionTest.groovy | 22 +++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/src/main/java/graphql/introspection/Introspection.java b/src/main/java/graphql/introspection/Introspection.java index 414452120e..9036654cc2 100644 --- a/src/main/java/graphql/introspection/Introspection.java +++ b/src/main/java/graphql/introspection/Introspection.java @@ -474,6 +474,10 @@ public enum DirectiveLocation { }); register(__Directive, "name", nameDataFetcher); register(__Directive, "description", descriptionDataFetcher); + register(__Directive, "isRepeatable", environment -> { + GraphQLDirective directive = environment.getSource(); + return directive.isRepeatable(); + }); } public static final GraphQLObjectType __Schema = newObject() diff --git a/src/main/java/graphql/introspection/IntrospectionQuery.java b/src/main/java/graphql/introspection/IntrospectionQuery.java index 90834459b9..5234807732 100644 --- a/src/main/java/graphql/introspection/IntrospectionQuery.java +++ b/src/main/java/graphql/introspection/IntrospectionQuery.java @@ -21,6 +21,7 @@ public interface IntrospectionQuery { " args {\n" + " ...InputValue\n" + " }\n" + + " isRepeatable\n" + " }\n" + " }\n" + " }\n" + diff --git a/src/test/groovy/graphql/introspection/IntrospectionTest.groovy b/src/test/groovy/graphql/introspection/IntrospectionTest.groovy index 0f196007d5..efa268945c 100644 --- a/src/test/groovy/graphql/introspection/IntrospectionTest.groovy +++ b/src/test/groovy/graphql/introspection/IntrospectionTest.groovy @@ -81,4 +81,26 @@ class IntrospectionTest extends Specification { data == [__schema: [description: "This is my schema"]] } + + def "introspection for repeatable directive info"() { + def spec = ''' + directive @repeatableDirective(arg: String) repeatable on FIELD + + type Query { + namedField: String + } + ''' + + when: + def graphQL = TestUtil.graphQL(spec).build() + def executionResult = graphQL.execute(IntrospectionQuery.INTROSPECTION_QUERY) + + then: + executionResult.errors.isEmpty() + + def directives = executionResult.data.getAt("__schema").getAt("directives") as List + def geoPolygonType = directives.find { it['name'] == 'repeatableDirective' } + geoPolygonType["isRepeatable"] == true + } + }