1919import graphql .annotations .annotationTypes .GraphQLDataFetcher ;
2020import graphql .annotations .annotationTypes .GraphQLField ;
2121import graphql .annotations .annotationTypes .GraphQLName ;
22- import graphql .annotations .annotationTypes .directives .activation .Directive ;
23- import graphql .annotations .annotationTypes .directives .activation .GraphQLDirectives ;
2422import graphql .annotations .annotationTypes .directives .definition .DirectiveLocations ;
2523import graphql .annotations .annotationTypes .directives .definition .GraphQLDirectiveDefinition ;
2624import graphql .annotations .directives .AnnotationsDirectiveWiring ;
3937import java .util .Map ;
4038
4139import static graphql .schema .GraphQLSchema .newSchema ;
42- import static org .testng .Assert .assertEquals ;
43- import static org .testng .Assert .assertNotNull ;
44- import static org .testng .Assert .assertTrue ;
40+ import static org .testng .Assert .*;
4541
4642public class GraphQLDirectivesViaAnnotationDefinitionTest {
4743 private GraphQLAnnotations graphQLAnnotations ;
@@ -52,6 +48,7 @@ public void setUp() {
5248 this .graphQLAnnotations = new GraphQLAnnotations ();
5349 this .graphQLAnnotations .directiveViaAnnotation (Upper .class );
5450 this .graphQLAnnotations .directiveViaAnnotation (Suffix .class );
51+ this .graphQLAnnotations .directiveViaAnnotation (DirectiveWithList .class );
5552 GraphQLObjectType object = this .graphQLAnnotations .object (Query .class );
5653 GraphQLCodeRegistry codeRegistry = graphQLAnnotations .getContainer ().getCodeRegistryBuilder ().build ();
5754 this .schema = newSchema ().query (object ).codeRegistry (codeRegistry ).build ();
@@ -122,6 +119,16 @@ public GraphQLInputObjectType onInputObjectType(AnnotationsWiringEnvironment env
122119 }
123120 }
124121
122+ public static class DirectiveWithListWiring implements AnnotationsDirectiveWiring {
123+ @ Override
124+ public GraphQLFieldDefinition onField (AnnotationsWiringEnvironment environment ) {
125+ GraphQLFieldDefinition field = (GraphQLFieldDefinition ) environment .getElement ();
126+ String [] list = (String []) environment .getDirective ().getArgument ("list" ).getValue ();
127+ CodeRegistryUtil .wrapDataFetcher (field , environment , (dataFetchingEnvironment , value ) -> value + list [0 ]);
128+ return field ;
129+ }
130+ }
131+
125132
126133 @ GraphQLDirectiveDefinition (wiring = UpperWiring .class )
127134 @ GraphQLName ("upper" )
@@ -141,7 +148,15 @@ public GraphQLInputObjectType onInputObjectType(AnnotationsWiringEnvironment env
141148 @ GraphQLName ("suffix" )
142149 String suffixToAdd ();
143150 boolean isActive ();
144- String [] extraSuffixes () default {};
151+ }
152+
153+ @ GraphQLDirectiveDefinition (wiring = DirectiveWithListWiring .class )
154+ @ GraphQLName ("list" )
155+ @ Target ({ElementType .FIELD , ElementType .PARAMETER , ElementType .TYPE , ElementType .METHOD })
156+ @ Retention (RetentionPolicy .RUNTIME )
157+ @ DirectiveLocations ({Introspection .DirectiveLocation .FIELD_DEFINITION , Introspection .DirectiveLocation .ARGUMENT_DEFINITION , Introspection .DirectiveLocation .INPUT_FIELD_DEFINITION })
158+ @interface DirectiveWithList {
159+ String [] list ();
145160 }
146161
147162 public static class Query {
@@ -179,6 +194,9 @@ public static String nameWithMultipleDirectives(){
179194 return "yarin" ;
180195 }
181196
197+ @ GraphQLField
198+ @ DirectiveWithList (list = {"v" , "x" , "y" })
199+ public static String nameWithDirectiveWithList () {return "yarin" ;}
182200
183201 public static class NameWithArgument implements DataFetcher {
184202 @ Override
@@ -266,4 +284,15 @@ public void usingAnnotationDirective_multipleDirectivesOnField_wiringHappensInOr
266284 assertEquals (((Map <String , String >) result1 .getData ()).get ("nameWithMultipleDirectives" ).toString (), "YARIN is cool" );
267285 }
268286
287+ @ Test
288+ public void usingAnnotationDirective_listArgument_wiringHappens (){
289+ // Act
290+ ExecutionResult result1 = GraphQL .newGraphQL (schema ).build ().execute ("query { nameWithDirectiveWithList }" );
291+
292+ // Assert
293+ assertTrue (result1 .getErrors ().isEmpty ());
294+ assertEquals (((Map <String , String >) result1 .getData ()).get ("nameWithDirectiveWithList" ).toString (), "yarinv" );
295+ }
296+
297+
269298}
0 commit comments