Skip to content

Commit b69422c

Browse files
committed
added tests
1 parent f3d091d commit b69422c

7 files changed

+660
-348
lines changed

src/test/java/graphql/annotations/AnnotationsSchemaCreatorTest.java

+13
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@
1818
import graphql.annotations.annotationTypes.GraphQLDescription;
1919
import graphql.annotations.annotationTypes.GraphQLField;
2020
import graphql.annotations.annotationTypes.GraphQLName;
21+
import graphql.annotations.directives.AnnotationsDirectiveWiring;
22+
import graphql.annotations.directives.AnnotationsWiringEnvironment;
2123
import graphql.annotations.directives.creation.DirectiveLocations;
24+
import graphql.annotations.directives.creation.DirectiveWiring;
2225
import graphql.annotations.processor.GraphQLAnnotations;
2326
import graphql.introspection.Introspection;
2427
import graphql.schema.GraphQLDirective;
28+
import graphql.schema.GraphQLFieldDefinition;
2529
import graphql.schema.GraphQLObjectType;
2630
import graphql.schema.GraphQLSchema;
2731
import org.testng.annotations.BeforeMethod;
@@ -107,8 +111,16 @@ public void build_Subscription_SchemaIsCreatedWithSubscription() {
107111
assertThat(subscriptionType.getFieldDefinitions().size(), is(1));
108112
}
109113

114+
public static class GeneralWiring implements AnnotationsDirectiveWiring{
115+
@Override
116+
public GraphQLFieldDefinition onField(AnnotationsWiringEnvironment environment) {
117+
return null;
118+
}
119+
}
120+
110121
@GraphQLName("testDirective")
111122
@DirectiveLocations({Introspection.DirectiveLocation.FIELD_DEFINITION})
123+
@DirectiveWiring(GeneralWiring.class)
112124
public static class DirectiveDefinitionTest {
113125
private boolean isActive = true;
114126
}
@@ -127,6 +139,7 @@ public void build_Directive_SchemaIsCreatedWithDirective() {
127139

128140
@GraphQLName("secondDirective")
129141
@DirectiveLocations(Introspection.DirectiveLocation.FIELD)
142+
@DirectiveWiring(GeneralWiring.class)
130143
public static class SecondDirective {
131144

132145
}

src/test/java/graphql/annotations/GraphQLDirectiveCreationTest.java

+7
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
import graphql.annotations.annotationTypes.GraphQLDescription;
1818
import graphql.annotations.annotationTypes.GraphQLName;
19+
import graphql.annotations.directives.AnnotationsDirectiveWiring;
1920
import graphql.annotations.directives.creation.DirectiveLocations;
21+
import graphql.annotations.directives.creation.DirectiveWiring;
2022
import graphql.annotations.processor.GraphQLAnnotations;
2123
import graphql.introspection.Introspection;
2224
import graphql.schema.GraphQLArgument;
@@ -38,9 +40,14 @@ public void setUp() {
3840
this.graphQLAnnotations = new GraphQLAnnotations();
3941
}
4042

43+
public static class GeneralWiring implements AnnotationsDirectiveWiring{
44+
45+
}
46+
4147
@GraphQLName("upper")
4248
@GraphQLDescription("makes string upper case")
4349
@DirectiveLocations({Introspection.DirectiveLocation.FIELD_DEFINITION, Introspection.DirectiveLocation.INTERFACE})
50+
@DirectiveWiring(GeneralWiring.class)
4451
public static class UpperDirective {
4552
private boolean isActive = true;
4653
@GraphQLName("suffixToAdd")

src/test/java/graphql/annotations/GraphQLDirectivesTest.java

+94-19
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
/**
22
* Copyright 2016 Yurii Rashkovskii
3-
*
3+
* <p>
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
66
* You may obtain a copy of the License at
7-
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
9-
*
7+
* <p>
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
* <p>
1010
* Unless required by applicable law or agreed to in writing, software
1111
* distributed under the License is distributed on an "AS IS" BASIS,
1212
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -16,13 +16,17 @@
1616

1717
import graphql.ExecutionResult;
1818
import graphql.GraphQL;
19+
import graphql.annotations.annotationTypes.GraphQLDirectiveDefinition;
1920
import graphql.annotations.annotationTypes.GraphQLDirectives;
2021
import graphql.annotations.annotationTypes.GraphQLField;
2122
import graphql.annotations.annotationTypes.GraphQLName;
2223
import graphql.annotations.directives.AnnotationsDirectiveWiring;
2324
import graphql.annotations.directives.AnnotationsWiringEnvironment;
2425
import graphql.annotations.directives.Directive;
26+
import graphql.annotations.directives.creation.DirectiveAnnotation;
2527
import graphql.annotations.directives.creation.DirectiveLocations;
28+
import graphql.annotations.directives.creation.DirectiveWiring;
29+
import graphql.annotations.processor.DirectiveAndWiring;
2630
import graphql.annotations.processor.GraphQLAnnotations;
2731
import graphql.annotations.processor.exceptions.GraphQLAnnotationsException;
2832
import graphql.annotations.processor.util.CodeRegistryUtil;
@@ -31,6 +35,10 @@
3135
import org.testng.annotations.BeforeMethod;
3236
import org.testng.annotations.Test;
3337

38+
import java.lang.annotation.ElementType;
39+
import java.lang.annotation.Retention;
40+
import java.lang.annotation.RetentionPolicy;
41+
import java.lang.annotation.Target;
3442
import java.util.Map;
3543

3644
import static graphql.Scalars.GraphQLBoolean;
@@ -103,47 +111,46 @@ public GraphQLInputObjectType onInputObjectType(AnnotationsWiringEnvironment env
103111

104112
public static class Query {
105113
@GraphQLField
106-
@GraphQLDirectives(@Directive(name = "upperCase", wiringClass = UpperWiring.class, argumentsValues = {"true"}))
114+
@GraphQLDirectives(@Directive(name = "upperCase", argumentsValues = {"true"}))
107115
public static String name() {
108116
return "yarin";
109117
}
110118

111119
@GraphQLField
112-
@GraphQLDirectives(@Directive(name = "upperCase", wiringClass = UpperWiring.class, argumentsValues = {"false"}))
120+
@GraphQLDirectives(@Directive(name = "upperCase", argumentsValues = {"false"}))
113121
public static String nameWithFalse() {
114122
return "yarin";
115123
}
116124
}
117125

118126
public static class Query2 {
119127
@GraphQLField
120-
@GraphQLDirectives(@Directive(name = "upperCase", wiringClass = UpperWiring.class))
128+
@GraphQLDirectives(@Directive(name = "upperCase"))
121129
public static String nameWithNoArgs() {
122130
return "yarin";
123131
}
124132
}
125133

126134
public static class Query3 {
127135
@GraphQLField
128-
@GraphQLDirectives({@Directive(name = "upperCase", wiringClass = UpperWiring.class, argumentsValues = {"true"}),
129-
@Directive(name = "suffix", wiringClass = SuffixWiring.class, argumentsValues = {"coolSuffix"})})
136+
@GraphQLDirectives({@Directive(name = "upperCase", argumentsValues = {"true"}),
137+
@Directive(name = "suffix", argumentsValues = {"coolSuffix"})})
130138
public static String name() {
131139
return "yarin";
132140
}
133141
}
134142

135143
public static class Query4 {
136144
@GraphQLField
137-
public static String nameWithArgument(@GraphQLDirectives({@Directive(name = "suffix",
138-
wiringClass = SuffixWiring.class, argumentsValues = {"coolSuffixForArg"})})
145+
public static String nameWithArgument(@GraphQLDirectives({@Directive(name = "suffix", argumentsValues = {"coolSuffixForArg"})})
139146
@GraphQLName("extensionArg") String extensionArg) {
140147
return "yarin" + extensionArg;
141148
}
142149
}
143150

144151
public static class InputObject {
145152
@GraphQLField
146-
@GraphQLDirectives({@Directive(name = "suffix", wiringClass = SuffixWiring.class, argumentsValues = {"coolSuffix"})})
153+
@GraphQLDirectives({@Directive(name = "suffix", argumentsValues = {"coolSuffix"})})
147154
private String a;
148155

149156
@GraphQLField
@@ -162,12 +169,79 @@ public static String nameWithInputObject(@GraphQLName("inputObject") InputObject
162169
}
163170
}
164171

172+
173+
public static class QueryAlternative {
174+
@GraphQLName("suffix")
175+
@GraphQLDirectiveDefinition(wiring = SuffixWiring.class)
176+
@DirectiveLocations({Introspection.DirectiveLocation.FIELD_DEFINITION, Introspection.DirectiveLocation.ARGUMENT_DEFINITION})
177+
public static void suffixDirective(@GraphQLName("suffix") String suffix) {
178+
179+
}
180+
181+
@GraphQLField
182+
@GraphQLDirectives({
183+
@Directive(name = "suffix", argumentsValues = {"coolSuffix"})})
184+
public static String name() {
185+
return "yarin";
186+
}
187+
}
188+
189+
190+
@Target({ElementType.TYPE, ElementType.METHOD})
191+
@Retention(RetentionPolicy.RUNTIME)
192+
@DirectiveAnnotation
193+
@DirectiveWiring(UpperWiring.class)
194+
@DirectiveLocations(Introspection.DirectiveLocation.FIELD_DEFINITION)
195+
@GraphQLName("upper")
196+
public @interface ToUpperCase{
197+
boolean isActive() default true;
198+
}
199+
200+
201+
public static class QueryAnnotation {
202+
@GraphQLField
203+
@ToUpperCase
204+
public static String name() {
205+
return "yarin";
206+
}
207+
}
208+
209+
210+
@Test
211+
public void queryName_javaAnnotationDirective_wiringIsActivated() throws Exception {
212+
this.graphQLAnnotations.directiveViaAnnotation(ToUpperCase.class);
213+
GraphQLObjectType object = this.graphQLAnnotations.object(QueryAnnotation.class);
214+
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
215+
216+
GraphQLSchema schema = newSchema().query(object).codeRegistry(codeRegistry).build();
217+
218+
ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("query { name }");
219+
assertTrue(result.getErrors().isEmpty());
220+
assertEquals(((Map<String, String>) result.getData()).get("name").toString(), "YARIN");
221+
}
222+
223+
224+
225+
@Test
226+
public void queryName_directivesInAlternativeWayCreation_wiringIsActivated() throws Exception {
227+
this.graphQLAnnotations.directives(QueryAlternative.class);
228+
GraphQLObjectType object = this.graphQLAnnotations.object(QueryAlternative.class);
229+
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
230+
231+
GraphQLSchema schema = newSchema().query(object).codeRegistry(codeRegistry).build();
232+
233+
ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("query { name }");
234+
assertTrue(result.getErrors().isEmpty());
235+
assertEquals(((Map<String, String>) result.getData()).get("name").toString(), "yarincoolSuffix");
236+
}
237+
238+
165239
@Test
166240
public void queryNameWithInputObject_directivesProvidedToRegistry_wiringOfInputObjectIsActivated() {
167241
GraphQLDirective suffixDirective = GraphQLDirective.newDirective().name("suffix").argument(builder -> builder.name("suffix").type(GraphQLString))
168242
.validLocations(Introspection.DirectiveLocation.INPUT_FIELD_DEFINITION, Introspection.DirectiveLocation.FIELD_DEFINITION).build();
169243

170-
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(suffixDirective.getName(), suffixDirective);
244+
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(suffixDirective.getName(), new DirectiveAndWiring(suffixDirective, SuffixWiring.class));
171245
GraphQLObjectType object = this.graphQLAnnotations.object(Query5.class);
172246
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
173247
GraphQLSchema schema = newSchema().query(object).codeRegistry(codeRegistry).build();
@@ -180,7 +254,7 @@ public void queryNameWithInputObject_directivesProvidedToRegistry_wiringOfInputO
180254
public void queryNameWithArgument_directivesProvidedToRegistry_wiringOfArgumentIsActivated() {
181255
GraphQLDirective suffixDirective = GraphQLDirective.newDirective().name("suffix").argument(builder -> builder.name("suffix").type(GraphQLString))
182256
.validLocations(Introspection.DirectiveLocation.FIELD_DEFINITION, Introspection.DirectiveLocation.ARGUMENT_DEFINITION).build();
183-
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(suffixDirective.getName(), suffixDirective);
257+
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(suffixDirective.getName(), new DirectiveAndWiring(suffixDirective, SuffixWiring.class));
184258
GraphQLObjectType object = this.graphQLAnnotations.object(Query4.class);
185259
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
186260
GraphQLSchema schema = newSchema().query(object).codeRegistry(codeRegistry).build();
@@ -200,6 +274,7 @@ public void queryName_noDirectivesProvidedToRegistry_exceptionIsThrown() throws
200274

201275
@GraphQLName("upperCase")
202276
@DirectiveLocations(Introspection.DirectiveLocation.FIELD_DEFINITION)
277+
@DirectiveWiring(UpperWiring.class)
203278
public static class UpperCase {
204279
boolean isActive;
205280
}
@@ -221,7 +296,7 @@ public void queryName_directivesProvidedToRegistry_wiringIsActivated() throws Ex
221296
public void queryNameWithFalse_directivesProvidedToRegistry_wiringIsActivated() throws Exception {
222297
GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("isActive").type(GraphQLBoolean))
223298
.validLocations(Introspection.DirectiveLocation.FIELD_DEFINITION).build();
224-
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), upperCase);
299+
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), new DirectiveAndWiring(upperCase, UpperWiring.class));
225300
GraphQLObjectType object = this.graphQLAnnotations.object(Query.class);
226301
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
227302
GraphQLSchema schema = newSchema().query(object).codeRegistry(codeRegistry).build();
@@ -235,7 +310,7 @@ public void queryNameWithFalse_directivesProvidedToRegistry_wiringIsActivated()
235310
public void queryNameWithNoArgs_directivesProvidedToRegistry_wiringIsActivated() throws Exception {
236311
GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("isActive").type(GraphQLBoolean).defaultValue(true))
237312
.validLocations(Introspection.DirectiveLocation.FIELD_DEFINITION).build();
238-
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), upperCase);
313+
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), new DirectiveAndWiring(upperCase, UpperWiring.class));
239314
GraphQLObjectType object = this.graphQLAnnotations.object(Query2.class);
240315
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
241316
GraphQLSchema schema = newSchema().query(object).codeRegistry(codeRegistry).build();
@@ -249,7 +324,7 @@ public void queryNameWithNoArgs_directivesProvidedToRegistry_wiringIsActivated()
249324
public void queryNameWithNoArgs_noDefaultValue_exceptionIsThrown() throws Exception {
250325
GraphQLDirective upperCase = newDirective().name("upperCase").argument(builder -> builder.name("isActive").type(GraphQLBoolean))
251326
.validLocations(Introspection.DirectiveLocation.FIELD_DEFINITION).build();
252-
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), upperCase);
327+
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), new DirectiveAndWiring(upperCase, UpperWiring.class));
253328
GraphQLObjectType object = this.graphQLAnnotations.object(Query2.class);
254329
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
255330

@@ -264,8 +339,8 @@ public void queryName_chainedDirectives_wiringIsActivatedInCorrectOrder() throws
264339
.validLocations(Introspection.DirectiveLocation.FIELD_DEFINITION).build();
265340
GraphQLDirective suffixDirective = GraphQLDirective.newDirective().name("suffix").argument(builder -> builder.name("suffix").type(GraphQLString))
266341
.validLocations(Introspection.DirectiveLocation.FIELD_DEFINITION, Introspection.DirectiveLocation.ARGUMENT_DEFINITION).build();
267-
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), upperCase);
268-
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(suffixDirective.getName(), suffixDirective);
342+
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(upperCase.getName(), new DirectiveAndWiring(upperCase, UpperWiring.class));
343+
this.graphQLAnnotations.getContainer().getDirectiveRegistry().put(suffixDirective.getName(), new DirectiveAndWiring(suffixDirective, SuffixWiring.class));
269344
GraphQLObjectType object = this.graphQLAnnotations.object(Query3.class);
270345
GraphQLCodeRegistry codeRegistry = graphQLAnnotations.getContainer().getCodeRegistryBuilder().build();
271346

src/test/java/graphql/annotations/directives/DirectiveWiringMapRetrieverTest.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package graphql.annotations.directives;
1616

1717
import graphql.annotations.annotationTypes.GraphQLDirectives;
18+
import graphql.annotations.processor.DirectiveAndWiring;
1819
import graphql.annotations.processor.ProcessingElementsContainer;
1920
import graphql.annotations.processor.exceptions.GraphQLAnnotationsException;
2021
import graphql.schema.GraphQLDirective;
@@ -40,10 +41,10 @@ private static class ThirdWiringClass implements AnnotationsDirectiveWiring{
4041

4142
}
4243

43-
@GraphQLDirectives({@Directive(name = "upperCase", wiringClass = WiringClass.class), @Directive(name = "lowerCase", wiringClass = SecondWiringClass.class)})
44+
@GraphQLDirectives({@Directive(name = "upperCase"), @Directive(name = "lowerCase")})
4445
public static String field;
4546

46-
@GraphQLDirectives({@Directive(name = "upperCase", wiringClass = ThirdWiringClass.class)})
47+
@GraphQLDirectives({@Directive(name = "upperCase")})
4748
public static String fieldWithPrivateWiringClassThatShouldFail;
4849

4950
@Test
@@ -68,8 +69,8 @@ public void getDirectiveWiringMap_wiringClassIsPrivate_throwAGraphQLAnnotationsE
6869
GraphQLDirective upperCase = newDirective().name("upperCase").build();
6970
GraphQLDirective lowerCase = newDirective().name("lowerCase").build();
7071
ProcessingElementsContainer container = new ProcessingElementsContainer();
71-
container.getDirectiveRegistry().put("upperCase", upperCase);
72-
container.getDirectiveRegistry().put("lowerCase", lowerCase);
72+
container.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, ThirdWiringClass.class));
73+
container.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, SecondWiringClass.class));
7374

7475
// Act
7576
try {
@@ -88,8 +89,8 @@ public void getDirectiveWiringMap_directivesAreInRegistry_returnCorrectMap() thr
8889
GraphQLDirective upperCase = newDirective().name("upperCase").build();
8990
GraphQLDirective lowerCase = newDirective().name("lowerCase").build();
9091
ProcessingElementsContainer container = new ProcessingElementsContainer();
91-
container.getDirectiveRegistry().put("upperCase", upperCase);
92-
container.getDirectiveRegistry().put("lowerCase", lowerCase);
92+
container.getDirectiveRegistry().put("upperCase", new DirectiveAndWiring(upperCase, WiringClass.class));
93+
container.getDirectiveRegistry().put("lowerCase", new DirectiveAndWiring(lowerCase, SecondWiringClass.class));
9394

9495
// Act
9596
Map<GraphQLDirective, AnnotationsDirectiveWiring> map = directiveWiringMapRetriever.getDirectiveWiringMap(this.getClass().getField("field"), container);

0 commit comments

Comments
 (0)