Skip to content

Commit 05b5ee5

Browse files
committed
added tests, move wiring into the directive annotation annoation
1 parent 4e1d3b8 commit 05b5ee5

File tree

6 files changed

+118
-13
lines changed

6 files changed

+118
-13
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package graphql.annotations.directives.creation;
22

3+
import graphql.annotations.directives.AnnotationsDirectiveWiring;
4+
35
import java.lang.annotation.ElementType;
46
import java.lang.annotation.Retention;
57
import java.lang.annotation.RetentionPolicy;
@@ -8,6 +10,6 @@
810
@Target({ElementType.ANNOTATION_TYPE})
911
@Retention(RetentionPolicy.RUNTIME)
1012
public @interface DirectiveAnnotation{
11-
13+
Class<? extends AnnotationsDirectiveWiring> value();
1214
}
1315

src/main/java/graphql/annotations/processor/GraphQLAnnotations.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import graphql.annotations.annotationTypes.GraphQLDirectiveDefinition;
1818
import graphql.annotations.annotationTypes.GraphQLName;
19+
import graphql.annotations.directives.creation.DirectiveAnnotation;
1920
import graphql.annotations.directives.creation.DirectiveWiring;
2021
import graphql.annotations.processor.directives.CommonPropertiesCreator;
2122
import graphql.annotations.processor.directives.DirectiveArgumentCreator;
@@ -161,7 +162,7 @@ public GraphQLDirective directive(Class<?> object) throws GraphQLAnnotationsExce
161162
public GraphQLDirective directiveViaAnnotation(Class<?> annotationClass) {
162163
try {
163164
GraphQLDirective directive = this.directiveCreator.getDirective(annotationClass);
164-
DirectiveWiring annotation = annotationClass.getAnnotation(DirectiveWiring.class);
165+
DirectiveAnnotation annotation = annotationClass.getAnnotation(DirectiveAnnotation.class);
165166
if (annotation==null){
166167
throw new GraphQLAnnotationsException(String.format("No wiring is provided to directive class %s", annotationClass.getSimpleName()), null);
167168
}

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
*/
1515
package graphql.annotations;
1616

17-
import graphql.annotations.AnnotationsSchemaCreator;
1817
import graphql.annotations.annotationTypes.GraphQLDescription;
1918
import graphql.annotations.annotationTypes.GraphQLField;
2019
import graphql.annotations.annotationTypes.GraphQLName;

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

Lines changed: 103 additions & 6 deletions
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.
@@ -15,8 +15,10 @@
1515
package graphql.annotations;
1616

1717
import graphql.annotations.annotationTypes.GraphQLDescription;
18+
import graphql.annotations.annotationTypes.GraphQLDirectiveDefinition;
1819
import graphql.annotations.annotationTypes.GraphQLName;
1920
import graphql.annotations.directives.AnnotationsDirectiveWiring;
21+
import graphql.annotations.directives.creation.DirectiveAnnotation;
2022
import graphql.annotations.directives.creation.DirectiveLocations;
2123
import graphql.annotations.directives.creation.DirectiveWiring;
2224
import graphql.annotations.processor.GraphQLAnnotations;
@@ -26,6 +28,8 @@
2628
import org.testng.annotations.BeforeMethod;
2729
import org.testng.annotations.Test;
2830

31+
import java.util.Set;
32+
2933
import static graphql.Scalars.GraphQLBoolean;
3034
import static graphql.Scalars.GraphQLString;
3135
import static org.testng.AssertJUnit.*;
@@ -40,7 +44,11 @@ public void setUp() {
4044
this.graphQLAnnotations = new GraphQLAnnotations();
4145
}
4246

43-
public static class GeneralWiring implements AnnotationsDirectiveWiring{
47+
/**
48+
* Defining of directives through a class (@Deprecated)
49+
*/
50+
51+
public static class GeneralWiring implements AnnotationsDirectiveWiring {
4452

4553
}
4654

@@ -58,7 +66,7 @@ public static class UpperDirective {
5866
}
5967

6068
@Test
61-
public void test_directive_creation() {
69+
public void directive_suppliedDirectiveClass_returnCorrectDirective() {
6270
// Act
6371
GraphQLDirective directive = this.graphQLAnnotations.directive(UpperDirective.class);
6472

@@ -83,4 +91,93 @@ public void test_directive_creation() {
8391
assertNotNull(noDefaultValue);
8492
assertNull(noDefaultValue.getDefaultValue());
8593
}
94+
95+
/**
96+
* Defining of directives through a method
97+
*/
98+
99+
static class Wiring implements AnnotationsDirectiveWiring{
100+
101+
}
102+
103+
static class DirectivesMethodsContainer {
104+
@GraphQLName("upper")
105+
@GraphQLDescription("upper directive")
106+
@GraphQLDirectiveDefinition(wiring = Wiring.class)
107+
@DirectiveLocations({Introspection.DirectiveLocation.FIELD_DEFINITION, Introspection.DirectiveLocation.INTERFACE})
108+
public void upperDirective(@GraphQLName("isActive") @GraphQLDescription("is active") boolean isActive) {
109+
}
110+
111+
@GraphQLName("suffix")
112+
@GraphQLDescription("suffix directive")
113+
@GraphQLDirectiveDefinition(wiring = Wiring.class)
114+
@DirectiveLocations({Introspection.DirectiveLocation.FIELD_DEFINITION, Introspection.DirectiveLocation.INTERFACE})
115+
public void suffixDirective(@GraphQLName("suffix") @GraphQLDescription("the suffix") String suffix) {
116+
}
117+
}
118+
119+
120+
@Test
121+
public void directive_suppliedDirectiveMethodContainer_returnCorrectDirective() {
122+
// Act
123+
Set<GraphQLDirective> directive = this.graphQLAnnotations.directives(DirectivesMethodsContainer.class);
124+
125+
GraphQLDirective upper = (GraphQLDirective) directive.toArray()[1];
126+
GraphQLDirective suffix = (GraphQLDirective) directive.toArray()[0];
127+
128+
// Assert
129+
assertEquals(upper.getName(), "upper");
130+
assertEquals(upper.getDescription(), "upper directive");
131+
assertArrayEquals(upper.validLocations().toArray(), new Introspection.DirectiveLocation[]{Introspection.DirectiveLocation.FIELD_DEFINITION,
132+
Introspection.DirectiveLocation.INTERFACE});
133+
GraphQLArgument isActive = upper.getArgument("isActive");
134+
assertNotNull(isActive);
135+
assertEquals(isActive.getName(), "isActive");
136+
assertEquals(isActive.getType(), GraphQLBoolean);
137+
assertNull(isActive.getDefaultValue());
138+
139+
GraphQLArgument suffixToAdd = suffix.getArgument("suffix");
140+
assertNotNull(suffixToAdd);
141+
assertEquals(suffixToAdd.getType(), GraphQLString);
142+
assertEquals("the suffix", suffixToAdd.getDescription());
143+
assertNull(suffixToAdd.getDefaultValue());
144+
}
145+
146+
147+
/**
148+
* Defining of directives through a java annotation
149+
*/
150+
151+
@GraphQLName("upper")
152+
@GraphQLDescription("the upper")
153+
@DirectiveAnnotation(Wiring.class)
154+
@DirectiveLocations({Introspection.DirectiveLocation.FIELD_DEFINITION, Introspection.DirectiveLocation.INTERFACE})
155+
@interface UpperAnnotation {
156+
@GraphQLName("isActive")
157+
@GraphQLDescription("is active")
158+
boolean isActive() default true;
159+
}
160+
161+
@GraphQLName("bla")
162+
@interface NoDirectiveAnnotation {
163+
boolean isActive() default true;
164+
}
165+
166+
@Test
167+
public void directive_suppliedDirectiveAnnotation_returnCorrectDirective() {
168+
// Act
169+
GraphQLDirective upper = this.graphQLAnnotations.directiveViaAnnotation(UpperAnnotation.class);
170+
171+
// Assert
172+
assertEquals(upper.getName(), "upper");
173+
assertEquals(upper.getDescription(), "the upper");
174+
assertArrayEquals(upper.validLocations().toArray(), new Introspection.DirectiveLocation[]{Introspection.DirectiveLocation.FIELD_DEFINITION,
175+
Introspection.DirectiveLocation.INTERFACE});
176+
GraphQLArgument isActive = upper.getArgument("isActive");
177+
assertNotNull(isActive);
178+
assertEquals(isActive.getName(), "isActive");
179+
assertEquals(isActive.getType(), GraphQLBoolean);
180+
assertEquals(true,isActive.getDefaultValue());
181+
}
182+
86183
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,8 +189,7 @@ public static String name() {
189189

190190
@Target({ElementType.TYPE, ElementType.METHOD})
191191
@Retention(RetentionPolicy.RUNTIME)
192-
@DirectiveAnnotation
193-
@DirectiveWiring(UpperWiring.class)
192+
@DirectiveAnnotation(UpperWiring.class)
194193
@DirectiveLocations(Introspection.DirectiveLocation.FIELD_DEFINITION)
195194
@GraphQLName("upper")
196195
public @interface ToUpperCase{
@@ -352,4 +351,6 @@ public void queryName_chainedDirectives_wiringIsActivatedInCorrectOrder() throws
352351
}
353352

354353

354+
public static class Wiring implements AnnotationsDirectiveWiring {
355+
}
355356
}

src/test/java/graphql/annotations/processor/util/DirectiveJavaAnnotationUtilTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import graphql.annotations.annotationTypes.GraphQLDescription;
44
import graphql.annotations.annotationTypes.GraphQLName;
5+
import graphql.annotations.directives.AnnotationsDirectiveWiring;
56
import graphql.annotations.directives.creation.DirectiveAnnotation;
67
import org.testng.annotations.Test;
78

@@ -20,15 +21,19 @@ public void getDirectiveAnnotations_nullElement_throwException() {
2021
DirectiveJavaAnnotationUtil.getDirectiveAnnotations(null);
2122
}
2223

23-
@DirectiveAnnotation
24+
static class Wiring implements AnnotationsDirectiveWiring {
25+
26+
}
27+
28+
@DirectiveAnnotation(Wiring.class)
2429
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
2530
@Retention(RetentionPolicy.RUNTIME)
2631
@GraphQLName("sample")
2732
@interface DirectiveAnnotationSample{
2833

2934
}
3035

31-
@DirectiveAnnotation
36+
@DirectiveAnnotation(Wiring.class)
3237
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
3338
@Retention(RetentionPolicy.RUNTIME)
3439
@interface DirectiveAnnotationSample2{

0 commit comments

Comments
 (0)