Skip to content

Commit 1186a0c

Browse files
committed
DataFetcherConstructor args constructor as the annotation + tests
1 parent e120188 commit 1186a0c

File tree

3 files changed

+91
-3
lines changed

3 files changed

+91
-3
lines changed

src/main/java/graphql/annotations/processor/util/DataFetcherConstructor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public DataFetcher constructDataFetcher(String fieldName, GraphQLDataFetcher ann
3939
return newInstance(annotatedDataFetcher.value());
4040
} else {
4141
try {
42-
final Constructor<? extends DataFetcher> ctr = annotatedDataFetcher.value().getDeclaredConstructor(
43-
stream(args).map(v -> String.class).toArray(Class[]::new));
44-
return constructNewInstance(ctr, (Object[]) args);
42+
// Get the String[] constructor
43+
final Constructor<? extends DataFetcher> ctr = annotatedDataFetcher.value().getDeclaredConstructor(String[].class);
44+
return constructNewInstance(ctr, new Object[] {args});
4545
} catch (final NoSuchMethodException e) {
4646
throw new GraphQLAnnotationsException("Unable to instantiate DataFetcher via constructor for: " + fieldName, e);
4747
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package graphql.annotations.processor.util;
2+
3+
import graphql.annotations.annotationTypes.GraphQLDataFetcher;
4+
import graphql.schema.DataFetcher;
5+
import org.testng.annotations.Test;
6+
7+
import java.lang.annotation.Annotation;
8+
9+
import static org.testng.Assert.assertEquals;
10+
import static org.testng.Assert.assertNull;
11+
12+
/**
13+
* @author danieltaub on 07/05/2018.
14+
*/
15+
public class DataFetcherConstructorTest {
16+
private DataFetcherConstructor constructor = new DataFetcherConstructor();
17+
18+
@Test
19+
public void graphQLDataFetcherWithArgsTest() {
20+
GraphQLDataFetcher graphQLDataFetcher = getGraphQLDataFetcher(DataFetcherMock.class, false, "Arg1", "Arg2");
21+
DataFetcherMock dataFetcher = (DataFetcherMock) constructor.constructDataFetcher(null, graphQLDataFetcher);
22+
23+
assertEquals(dataFetcher.getArgs().length, 2);
24+
assertEquals(dataFetcher.getArgs()[0], "Arg1");
25+
assertEquals(dataFetcher.getArgs()[1], "Arg2");
26+
}
27+
28+
@Test
29+
public void graphQLDataFetcherDefaultCtorTest() {
30+
GraphQLDataFetcher graphQLDataFetcher = getGraphQLDataFetcher(DataFetcherMock.class, false);
31+
DataFetcherMock dataFetcher = (DataFetcherMock) constructor.constructDataFetcher(null, graphQLDataFetcher);
32+
33+
assertNull(dataFetcher.getArgs());
34+
}
35+
36+
private GraphQLDataFetcher getGraphQLDataFetcher(final Class<? extends DataFetcher> value,
37+
boolean argsInTarget, String... args) {
38+
GraphQLDataFetcher annotation = new GraphQLDataFetcher() {
39+
@Override
40+
public Class<? extends Annotation> annotationType() {
41+
return GraphQLDataFetcher.class;
42+
}
43+
44+
@Override
45+
public Class<? extends DataFetcher> value() {
46+
return value;
47+
}
48+
49+
@Override
50+
public String[] args() {
51+
return args;
52+
}
53+
54+
@Override
55+
public boolean firstArgIsTargetName() {
56+
return argsInTarget;
57+
}
58+
};
59+
60+
return annotation;
61+
}
62+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package graphql.annotations.processor.util;
2+
3+
import graphql.schema.DataFetcher;
4+
import graphql.schema.DataFetchingEnvironment;
5+
6+
/**
7+
* @author danieltaub on 07/05/2018.
8+
*/
9+
public class DataFetcherMock implements DataFetcher {
10+
private String[] args;
11+
12+
public DataFetcherMock(String... args){
13+
this.args = args;
14+
}
15+
16+
public DataFetcherMock(){ }
17+
18+
@Override
19+
public Object get(DataFetchingEnvironment environment) {
20+
return null;
21+
}
22+
23+
public String[] getArgs() {
24+
return args;
25+
}
26+
}

0 commit comments

Comments
 (0)