Skip to content

Commit 6acc136

Browse files
meistermeierkobylynskyi
authored andcommitted
Don't fail with enums in directive parameters.
1 parent 981a1b6 commit 6acc136

File tree

10 files changed

+183
-7
lines changed

10 files changed

+183
-7
lines changed

src/main/java/com/kobylynskyi/graphql/codegen/mapper/ValueMapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,9 @@ private String mapEnum(MappingContext mappingContext, EnumValue value, Type<?> g
129129
if (graphQLType instanceof NonNullType) {
130130
return mapEnum(mappingContext, value, ((NonNullType) graphQLType).getType());
131131
}
132+
if (graphQLType == null) {
133+
return value.getName();
134+
}
132135
throw new IllegalArgumentException("Unexpected Enum value for list type");
133136
}
134137

src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenAnnotationsTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,8 @@ void generate_Directives() throws Exception {
210210
"n={{n?toString}})"));
211211
directiveAnnotationsMapping.put("valid", singletonList("@javax.validation.Valid"));
212212
directiveAnnotationsMapping.put("customResolver", singletonList("@com.example.CustomAnnotation"));
213+
directiveAnnotationsMapping.put("relationship",
214+
singletonList("@com.example.Relationship(type = {{type}}, direction = {{direction}})"));
213215
mappingConfig.setDirectiveAnnotationsMapping(directiveAnnotationsMapping);
214216

215217
new JavaGraphQLCodegen(singletonList("src/test/resources/schemas/test.graphqls"),
@@ -225,6 +227,9 @@ void generate_Directives() throws Exception {
225227
assertSameTrimmedContent(
226228
new File("src/test/resources/expected-classes/annotation/EventProperty.java.txt"),
227229
getFileByName(files, "EventProperty.java"));
230+
assertSameTrimmedContent(
231+
new File("src/test/resources/expected-classes/annotation/User.java.txt"),
232+
getFileByName(files, "User.java"));
228233
}
229234

230235
}

src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenApisTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void generate_DoNotGenerateApiInterfaceForOperations() throws IOException {
138138
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
139139
assertEquals(Arrays.asList(
140140
"Event.java", "EventProperty.java", "EventPropertyResolver.java", "EventStatus.java",
141-
"MutationResolver.java", "QueryResolver.java", "SubscriptionResolver.java"),
141+
"MutationResolver.java", "QueryResolver.java", "SubscriptionResolver.java", "User.java"),
142142
Arrays.stream(files).map(File::getName).sorted().collect(toList()));
143143
}
144144

@@ -155,7 +155,8 @@ void generate_DoNotGenerateRootApiInterfaces() throws IOException {
155155
assertEquals(Arrays.asList(
156156
"CreateEventMutationResolver.java", "Event.java", "EventByIdQueryResolver.java", "EventProperty.java",
157157
"EventPropertyResolver.java", "EventStatus.java", "EventsByCategoryAndStatusQueryResolver.java",
158-
"EventsByIdsQueryResolver.java", "EventsCreatedSubscriptionResolver.java", "VersionQueryResolver.java"),
158+
"EventsByIdsQueryResolver.java", "EventsCreatedSubscriptionResolver.java", "User.java",
159+
"VersionQueryResolver.java"),
159160
Arrays.stream(files).map(File::getName).sorted().collect(toList()));
160161
}
161162

src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenModelsForRootTypesTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void generate_CheckFiles_generateApisFalse() throws Exception {
7272
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
7373
List<String> generatedFileNames = Arrays.stream(files).map(File::getName).sorted().collect(toList());
7474
assertEquals(Arrays.asList("Event.java", "EventProperty.java", "EventStatus.java",
75-
"Mutation.java", "Query.java", "Subscription.java"),
75+
"Mutation.java", "Query.java", "Subscription.java", "User.java"),
7676
generatedFileNames);
7777
}
7878

@@ -89,7 +89,8 @@ void generate_CheckFiles_generateApisTrue_CustomTypeResolverSuffix() throws Exce
8989
"EventsByCategoryAndStatusQueryResolver.java", "EventsByIdsQueryResolver.java",
9090
"EventsCreatedSubscriptionResolver.java", "Mutation.java", "MutationResolver.java",
9191
"MutationTypeResolver.java", "Query.java", "QueryResolver.java", "QueryTypeResolver.java",
92-
"Subscription.java", "SubscriptionResolver.java", "VersionQueryResolver.java"), generatedFileNames);
92+
"Subscription.java", "SubscriptionResolver.java", "User.java", "VersionQueryResolver.java"),
93+
generatedFileNames);
9394
}
9495

9596
}

src/test/java/com/kobylynskyi/graphql/codegen/GraphQLCodegenTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void generate_CheckFiles() throws Exception {
7070
"CreateEventMutationResolver.java", "Event.java", "EventByIdQueryResolver.java", "EventProperty.java",
7171
"EventStatus.java", "EventsByCategoryAndStatusQueryResolver.java", "EventsByIdsQueryResolver.java",
7272
"EventsCreatedSubscriptionResolver.java", "MutationResolver.java", "QueryResolver.java",
73-
"SubscriptionResolver.java",
73+
"SubscriptionResolver.java", "User.java",
7474
"VersionQueryResolver.java"), generatedFileNames);
7575

7676
for (File file : files) {
@@ -170,7 +170,7 @@ void generate_CustomModelAndApiPackages() throws Exception {
170170

171171
File[] modelFiles = Objects.requireNonNull(new File(outputJavaClassesDir, "model").listFiles());
172172
List<String> generatedModelFileNames = Arrays.stream(modelFiles).map(File::getName).sorted().collect(toList());
173-
assertEquals(Arrays.asList("Event.java", "EventProperty.java", "EventStatus.java"), generatedModelFileNames);
173+
assertEquals(Arrays.asList("Event.java", "EventProperty.java", "EventStatus.java", "User.java"), generatedModelFileNames);
174174

175175
for (File modelFile : modelFiles) {
176176
assertThat(Utils.getFileContent(modelFile.getPath()),
@@ -296,7 +296,7 @@ void generate_OnlyModel() throws Exception {
296296

297297
File[] files = Objects.requireNonNull(outputJavaClassesDir.listFiles());
298298
List<String> generatedFileNames = Arrays.stream(files).map(File::getName).sorted().collect(toList());
299-
assertEquals(Arrays.asList("Event.java", "EventProperty.java", "EventStatus.java"), generatedFileNames);
299+
assertEquals(Arrays.asList("Event.java", "EventProperty.java", "EventStatus.java", "User.java"), generatedFileNames);
300300
}
301301

302302
@Test

src/test/java/com/kobylynskyi/graphql/codegen/scala/GraphQLCodegenAnnotationsTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ void generate_Directives() throws Exception {
171171
"@com.example.CustomAnnotation(roles={{roles?toArray}}, " +
172172
"boo={{boo?toArray}}, float={{float?toArrayOfStrings}}, int={{int}}, " +
173173
"n={{n?toString}})"));
174+
directiveAnnotationsMapping.put("relationship",
175+
singletonList("@com.example.Relationship(type = {{type}}, direction = {{direction}})"));
174176
mappingConfig.setDirectiveAnnotationsMapping(directiveAnnotationsMapping);
175177

176178
new ScalaGraphQLCodegen(singletonList("src/test/resources/schemas/test.graphqls"),
@@ -183,6 +185,9 @@ void generate_Directives() throws Exception {
183185
assertSameTrimmedContent(
184186
new File("src/test/resources/expected-classes/scala/annotation/MutationResolver.scala.txt"),
185187
getFileByName(files, "MutationResolver.scala"));
188+
assertSameTrimmedContent(
189+
new File("src/test/resources/expected-classes/scala/annotation/User.scala.txt"),
190+
getFileByName(files, "User.scala"));
186191
}
187192

188193
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.kobylynskyi.graphql.test1;
2+
3+
4+
/**
5+
* type with directive using enum value
6+
*/
7+
@javax.annotation.Generated(
8+
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
9+
date = "2020-12-31T23:59:59-0500"
10+
)
11+
public class User implements java.io.Serializable {
12+
13+
private String name;
14+
private java.util.List<User> friends;
15+
16+
public User() {
17+
}
18+
19+
public User(String name, java.util.List<User> friends) {
20+
this.name = name;
21+
this.friends = friends;
22+
}
23+
24+
public String getName() {
25+
return name;
26+
}
27+
public void setName(String name) {
28+
this.name = name;
29+
}
30+
31+
public java.util.List<User> getFriends() {
32+
return friends;
33+
}
34+
public void setFriends(java.util.List<User> friends) {
35+
this.friends = friends;
36+
}
37+
38+
39+
40+
public static User.Builder builder() {
41+
return new User.Builder();
42+
}
43+
44+
public static class Builder {
45+
46+
private String name;
47+
private java.util.List<User> friends;
48+
49+
public Builder() {
50+
}
51+
52+
public Builder setName(String name) {
53+
this.name = name;
54+
return this;
55+
}
56+
57+
public Builder setFriends(java.util.List<User> friends) {
58+
this.friends = friends;
59+
return this;
60+
}
61+
62+
63+
public User build() {
64+
return new User(name, friends);
65+
}
66+
67+
}
68+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.kobylynskyi.graphql.test1;
2+
3+
4+
/**
5+
* type with directive using enum value
6+
*/
7+
@javax.annotation.Generated(
8+
value = "com.kobylynskyi.graphql.codegen.GraphQLCodegen",
9+
date = "2020-12-31T23:59:59-0500"
10+
)
11+
public class User implements java.io.Serializable {
12+
13+
private String name;
14+
@com.example.Relationship(type = "FRIEND_WITH", direction = OUT)
15+
private java.util.List<User> friends;
16+
17+
public User() {
18+
}
19+
20+
public User(String name, java.util.List<User> friends) {
21+
this.name = name;
22+
this.friends = friends;
23+
}
24+
25+
public String getName() {
26+
return name;
27+
}
28+
public void setName(String name) {
29+
this.name = name;
30+
}
31+
32+
public java.util.List<User> getFriends() {
33+
return friends;
34+
}
35+
public void setFriends(java.util.List<User> friends) {
36+
this.friends = friends;
37+
}
38+
39+
40+
41+
public static User.Builder builder() {
42+
return new User.Builder();
43+
}
44+
45+
public static class Builder {
46+
47+
private String name;
48+
private java.util.List<User> friends;
49+
50+
public Builder() {
51+
}
52+
53+
public Builder setName(String name) {
54+
this.name = name;
55+
return this;
56+
}
57+
58+
public Builder setFriends(java.util.List<User> friends) {
59+
this.friends = friends;
60+
return this;
61+
}
62+
63+
64+
public User build() {
65+
return new User(name, friends);
66+
}
67+
68+
}
69+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.kobylynskyi.graphql.test1
2+
3+
import scala.collection.JavaConverters._
4+
5+
/**
6+
* type with directive using enum value
7+
*/
8+
@javax.annotation.Generated(
9+
value = Array("com.kobylynskyi.graphql.codegen.GraphQLCodegen"),
10+
date = "2020-12-31T23:59:59-0500"
11+
)
12+
case class User(
13+
name: String,
14+
@com.example.Relationship(type = "FRIEND_WITH", direction = OUT)
15+
friends: scala.Seq[User]
16+
) {
17+
18+
}

src/test/resources/schemas/test.graphqls

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ enum EventStatus {
9595
LOGGED
9696
}
9797

98+
# type with directive using enum value
99+
type User {
100+
name: String,
101+
friends: [User] @relationship(type: "FRIEND_WITH", direction: OUT)
102+
}
103+
98104
directive @auth (
99105
roles: [String] = ["viewer"],
100106
float: [Float] = [],

0 commit comments

Comments
 (0)