Skip to content

Commit 044e4fb

Browse files
authored
Merge pull request #129 from graphql-java/fix-extension-bug
Hotfix - check if the GraphQL type has extension annotation
2 parents 6d2b428 + a791296 commit 044e4fb

File tree

3 files changed

+52
-19
lines changed

3 files changed

+52
-19
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
group = com.graphql-java
1+
group = io.github.graphql-java
22

33
org.gradle.caching=true
44
org.gradle.daemon=true

src/main/java/graphql/annotations/processor/retrievers/fieldBuilders/field/FieldDataFetcherBuilder.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package graphql.annotations.processor.retrievers.fieldBuilders.field;
1616

1717
import graphql.annotations.annotationTypes.GraphQLDataFetcher;
18+
import graphql.annotations.annotationTypes.GraphQLTypeExtension;
1819
import graphql.annotations.connection.GraphQLConnection;
1920
import graphql.annotations.dataFetchers.ExtensionDataFetcherWrapper;
2021
import graphql.annotations.dataFetchers.MethodDataFetcher;
@@ -73,13 +74,13 @@ private DataFetcher handleNullCase(DataFetcher actualDataFetcher) {
7374
if (isaBoolean()) {
7475
actualDataFetcher = getBooleanDataFetcher(actualDataFetcher);
7576
} else if (checkIfPrefixGetterExists(field.getDeclaringClass(), "get", field.getName())) {
76-
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()));
77+
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()), field);
7778
} else{
7879
actualDataFetcher = getDataFetcherWithFluentGetter(actualDataFetcher);
7980
}
8081

8182
if (actualDataFetcher == null) {
82-
actualDataFetcher = wrapExtension(new FieldDataFetcher(field.getName()));
83+
actualDataFetcher = wrapExtension(new FieldDataFetcher(field.getName()), field);
8384
}
8485
return actualDataFetcher;
8586
}
@@ -103,14 +104,17 @@ private DataFetcher getDataFetcherWithFluentGetter(DataFetcher actualDataFetcher
103104
return actualDataFetcher;
104105
}
105106

106-
private ExtensionDataFetcherWrapper wrapExtension(DataFetcher dataFetcher) {
107-
return new ExtensionDataFetcherWrapper(field.getDeclaringClass(), dataFetcher);
107+
private DataFetcher wrapExtension(DataFetcher dataFetcher, Field field) {
108+
if (field.getDeclaringClass().isAnnotationPresent(GraphQLTypeExtension.class)) {
109+
return new ExtensionDataFetcherWrapper(field.getDeclaringClass(), dataFetcher);
110+
}
111+
return dataFetcher;
108112
}
109113

110114
private DataFetcher getBooleanDataFetcher(DataFetcher actualDataFetcher) {
111115
if (checkIfPrefixGetterExists(field.getDeclaringClass(), "is", field.getName()) ||
112116
checkIfPrefixGetterExists(field.getDeclaringClass(), "get", field.getName())) {
113-
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()));
117+
actualDataFetcher = wrapExtension(new PropertyDataFetcher(field.getName()), field);
114118
}
115119
return actualDataFetcher;
116120
}

src/test/java/graphql/annotations/GraphQLObjectTest.java

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,14 @@
1818
import graphql.GraphQL;
1919
import graphql.Scalars;
2020
import graphql.annotations.annotationTypes.*;
21-
import graphql.annotations.dataFetchers.ExtensionDataFetcherWrapper;
21+
import graphql.annotations.annotationTypes.GraphQLNonNull;
2222
import graphql.annotations.processor.GraphQLAnnotations;
2323
import graphql.annotations.processor.ProcessingElementsContainer;
2424
import graphql.annotations.processor.retrievers.GraphQLInputObjectRetriever;
2525
import graphql.annotations.processor.retrievers.GraphQLObjectHandler;
2626
import graphql.annotations.processor.typeFunctions.TypeFunction;
27-
import graphql.schema.DataFetcher;
28-
import graphql.schema.DataFetchingEnvironment;
29-
30-
import graphql.schema.GraphQLArgument;
31-
import graphql.schema.GraphQLFieldDefinition;
32-
import graphql.schema.GraphQLInputObjectType;
33-
import graphql.schema.GraphQLInputType;
34-
import graphql.schema.GraphQLList;
35-
import graphql.schema.GraphQLObjectType;
36-
import graphql.schema.GraphQLSchema;
27+
import graphql.schema.*;
28+
3729
import graphql.schema.GraphQLType;
3830
import graphql.schema.idl.SchemaParser;
3931
import graphql.schema.idl.SchemaPrinter;
@@ -141,6 +133,43 @@ public String fieldWithNamedArgs(@GraphQLName("namedArg") String firstArgument)
141133
}
142134
}
143135

136+
public static class TestMappedObject {
137+
@GraphQLField
138+
public String name;
139+
}
140+
141+
public static class TestObjectDB{
142+
public String name;
143+
144+
public TestObjectDB(String name) {
145+
this.name = name;
146+
}
147+
}
148+
149+
public static class TestQuery{
150+
@GraphQLField
151+
@GraphQLDataFetcher(ObjectFetcher.class)
152+
public TestMappedObject object;
153+
}
154+
155+
public static class ObjectFetcher implements DataFetcher<TestObjectDB> {
156+
157+
@Override
158+
public TestObjectDB get(DataFetchingEnvironment environment) {
159+
return new TestObjectDB("test");
160+
}
161+
}
162+
163+
@Test
164+
public void fetchTestMappedObject_assertNameIsMappedFromDBObject(){
165+
GraphQLObjectType object = GraphQLAnnotations.object(TestQuery.class);
166+
GraphQLSchema schema = newSchema().query(object).build();
167+
168+
ExecutionResult result = GraphQL.newGraphQL(schema).build().execute("{object {name}}");
169+
assertTrue(result.getErrors().isEmpty());
170+
assertEquals(((LinkedHashMap)(((LinkedHashMap)result.getData()).get("object"))).get("name"), "test");
171+
}
172+
144173
@Test
145174
public void namedFields() {
146175
GraphQLObjectType object = GraphQLAnnotations.object(TestObjectNamedArgs.class);
@@ -214,8 +243,8 @@ public void fields() {
214243
assertEquals(fields.get(5).getName(), "privateTest");
215244
assertEquals(fields.get(6).getName(), "publicTest");
216245

217-
assertEquals(fields.get(5).getDataFetcher().getClass(), ExtensionDataFetcherWrapper.class);
218-
assertEquals(fields.get(6).getDataFetcher().getClass(), ExtensionDataFetcherWrapper.class);
246+
assertEquals(fields.get(5).getDataFetcher().getClass(), PropertyDataFetcher.class);
247+
assertEquals(fields.get(6).getDataFetcher().getClass(), FieldDataFetcher.class);
219248

220249
assertEquals(fields.get(7).getName(), "z_nonOptionalString");
221250
assertTrue(fields.get(7).getType() instanceof graphql.schema.GraphQLNonNull);

0 commit comments

Comments
 (0)