Skip to content

Commit 0cb9071

Browse files
Merge pull request #497 from jdmcmahan/client-query-name
Initialize `GraphQLQuery#name` from generated subclasses
2 parents 9dfa263 + 8f221e6 commit 0cb9071

File tree

3 files changed

+77
-5
lines changed

3 files changed

+77
-5
lines changed

graphql-dgs-codegen-core/src/main/kotlin/com/netflix/graphql/dgs/codegen/generators/java/ClientApiGenerator.kt

+19-3
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,12 @@ class ClientApiGenerator(private val config: CodeGenConfig, private val document
110110
.addCode(
111111
if (it.inputValueDefinitions.isNotEmpty()) {
112112
"""
113-
|return new $methodName(${it.inputValueDefinitions.joinToString(", ") { ReservedKeywordSanitizer.sanitize(it.name) }}, fieldsSet);
113+
|return new $methodName(${it.inputValueDefinitions.joinToString(", ") { ReservedKeywordSanitizer.sanitize(it.name) }}, queryName, fieldsSet);
114114
|
115115
""".trimMargin()
116116
} else {
117117
"""
118-
|return new $methodName();
118+
|return new $methodName(queryName);
119119
""".trimMargin()
120120
}
121121
)
@@ -126,7 +126,7 @@ class ClientApiGenerator(private val config: CodeGenConfig, private val document
126126
.addModifiers(Modifier.PUBLIC)
127127
constructorBuilder.addCode(
128128
"""
129-
|super("${operation.lowercase()}");
129+
|super("${operation.lowercase()}", queryName);
130130
|
131131
""".trimMargin()
132132
)
@@ -170,6 +170,22 @@ class ClientApiGenerator(private val config: CodeGenConfig, private val document
170170
}
171171
}
172172

173+
val nameMethodBuilder = MethodSpec.methodBuilder("queryName")
174+
.addParameter(String::class.java, "queryName")
175+
.returns(ClassName.get("", "Builder"))
176+
.addModifiers(Modifier.PUBLIC)
177+
.addCode(
178+
"""
179+
|this.queryName = queryName;
180+
|return this;
181+
""".trimMargin()
182+
)
183+
184+
builderClass.addField(FieldSpec.builder(String::class.java, "queryName", Modifier.PRIVATE).build())
185+
.addMethod(nameMethodBuilder.build())
186+
187+
constructorBuilder.addParameter(String::class.java, "queryName")
188+
173189
if (it.inputValueDefinitions.size > 0) {
174190
constructorBuilder.addParameter(setOfStringType, "fieldsSet")
175191
}

graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/clientapi/ClientApiGenBuilderTest.kt

+56
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,60 @@ class ClientApiGenBuilderTest {
8282
assertThat(result2QueryObject.input.keys).isEmpty()
8383
assertThat(result2QueryObject.input["nameFilter"]).isNull()
8484
}
85+
86+
@Test
87+
fun `Query name should be null if not set`() {
88+
val schema = """
89+
type Query {
90+
filter(nameFilter: String): [String]
91+
}
92+
""".trimIndent()
93+
94+
val codeGenResult = CodeGen(
95+
CodeGenConfig(
96+
schemas = setOf(schema),
97+
packageName = basePackageName,
98+
generateClientApi = true,
99+
maxProjectionDepth = 2
100+
)
101+
).generate()
102+
103+
val builderClass = assertCompilesJava(codeGenResult).toClassLoader()
104+
.loadClass("$basePackageName.client.FilterGraphQLQuery\$Builder")
105+
val buildMethod = builderClass.getMethod("build")
106+
107+
val builder = builderClass.constructors[0].newInstance()
108+
val result2QueryObject: GraphQLQuery = buildMethod.invoke(builder) as GraphQLQuery
109+
assertThat(result2QueryObject.name).isNull()
110+
}
111+
112+
@Test
113+
fun `Query name should be accessible via GraphQLQuery#name if set`() {
114+
val schema = """
115+
type Query {
116+
filter(nameFilter: String): [String]
117+
}
118+
""".trimIndent()
119+
120+
val codeGenResult = CodeGen(
121+
CodeGenConfig(
122+
schemas = setOf(schema),
123+
packageName = basePackageName,
124+
generateClientApi = true,
125+
maxProjectionDepth = 2
126+
)
127+
).generate()
128+
129+
val builderClass = assertCompilesJava(codeGenResult).toClassLoader()
130+
.loadClass("$basePackageName.client.FilterGraphQLQuery\$Builder")
131+
val nameMethod = builderClass.getMethod("queryName", String::class.java)
132+
val buildMethod = builderClass.getMethod("build")
133+
134+
val builder = builderClass.constructors[0].newInstance()
135+
nameMethod.invoke(builder, "test")
136+
137+
val result2QueryObject: GraphQLQuery = buildMethod.invoke(builder) as GraphQLQuery
138+
assertThat(result2QueryObject.name).isNotNull
139+
assertThat(result2QueryObject.name).isEqualTo("test")
140+
}
85141
}

graphql-dgs-codegen-core/src/test/kotlin/com/netflix/graphql/dgs/codegen/clientapi/ClientApiGenMutationTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ class ClientApiGenMutationTest {
160160
.find { it.name == "<init>" }?.code.toString()
161161

162162
val expected = """
163-
|super("mutation");
163+
|super("mutation", queryName);
164164
|if (movie != null || fieldsSet.contains("movie")) {
165165
| getInput().put("movie", movie);
166166
|}if (reviews != null || fieldsSet.contains("reviews")) {
@@ -200,7 +200,7 @@ class ClientApiGenMutationTest {
200200
assert(
201201
codeGenResult.javaQueryTypes[0].typeSpec.methodSpecs
202202
.find { it.name == "<init>" }?.code.toString()
203-
.contains("super(\"mutation\");\ngetInput().put(\"movieId\", movieId);")
203+
.contains("super(\"mutation\", queryName);\ngetInput().put(\"movieId\", movieId);")
204204
)
205205

206206
assertCompilesJava(

0 commit comments

Comments
 (0)