Skip to content

Commit

Permalink
Merge pull request #497 from jdmcmahan/client-query-name
Browse files Browse the repository at this point in the history
Initialize `GraphQLQuery#name` from generated subclasses
  • Loading branch information
srinivasankavitha authored Dec 6, 2022
2 parents 9dfa263 + 8f221e6 commit 0cb9071
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,12 @@ class ClientApiGenerator(private val config: CodeGenConfig, private val document
.addCode(
if (it.inputValueDefinitions.isNotEmpty()) {
"""
|return new $methodName(${it.inputValueDefinitions.joinToString(", ") { ReservedKeywordSanitizer.sanitize(it.name) }}, fieldsSet);
|return new $methodName(${it.inputValueDefinitions.joinToString(", ") { ReservedKeywordSanitizer.sanitize(it.name) }}, queryName, fieldsSet);
|
""".trimMargin()
} else {
"""
|return new $methodName();
|return new $methodName(queryName);
""".trimMargin()
}
)
Expand All @@ -126,7 +126,7 @@ class ClientApiGenerator(private val config: CodeGenConfig, private val document
.addModifiers(Modifier.PUBLIC)
constructorBuilder.addCode(
"""
|super("${operation.lowercase()}");
|super("${operation.lowercase()}", queryName);
|
""".trimMargin()
)
Expand Down Expand Up @@ -170,6 +170,22 @@ class ClientApiGenerator(private val config: CodeGenConfig, private val document
}
}

val nameMethodBuilder = MethodSpec.methodBuilder("queryName")
.addParameter(String::class.java, "queryName")
.returns(ClassName.get("", "Builder"))
.addModifiers(Modifier.PUBLIC)
.addCode(
"""
|this.queryName = queryName;
|return this;
""".trimMargin()
)

builderClass.addField(FieldSpec.builder(String::class.java, "queryName", Modifier.PRIVATE).build())
.addMethod(nameMethodBuilder.build())

constructorBuilder.addParameter(String::class.java, "queryName")

if (it.inputValueDefinitions.size > 0) {
constructorBuilder.addParameter(setOfStringType, "fieldsSet")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,60 @@ class ClientApiGenBuilderTest {
assertThat(result2QueryObject.input.keys).isEmpty()
assertThat(result2QueryObject.input["nameFilter"]).isNull()
}

@Test
fun `Query name should be null if not set`() {
val schema = """
type Query {
filter(nameFilter: String): [String]
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true,
maxProjectionDepth = 2
)
).generate()

val builderClass = assertCompilesJava(codeGenResult).toClassLoader()
.loadClass("$basePackageName.client.FilterGraphQLQuery\$Builder")
val buildMethod = builderClass.getMethod("build")

val builder = builderClass.constructors[0].newInstance()
val result2QueryObject: GraphQLQuery = buildMethod.invoke(builder) as GraphQLQuery
assertThat(result2QueryObject.name).isNull()
}

@Test
fun `Query name should be accessible via GraphQLQuery#name if set`() {
val schema = """
type Query {
filter(nameFilter: String): [String]
}
""".trimIndent()

val codeGenResult = CodeGen(
CodeGenConfig(
schemas = setOf(schema),
packageName = basePackageName,
generateClientApi = true,
maxProjectionDepth = 2
)
).generate()

val builderClass = assertCompilesJava(codeGenResult).toClassLoader()
.loadClass("$basePackageName.client.FilterGraphQLQuery\$Builder")
val nameMethod = builderClass.getMethod("queryName", String::class.java)
val buildMethod = builderClass.getMethod("build")

val builder = builderClass.constructors[0].newInstance()
nameMethod.invoke(builder, "test")

val result2QueryObject: GraphQLQuery = buildMethod.invoke(builder) as GraphQLQuery
assertThat(result2QueryObject.name).isNotNull
assertThat(result2QueryObject.name).isEqualTo("test")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ class ClientApiGenMutationTest {
.find { it.name == "<init>" }?.code.toString()

val expected = """
|super("mutation");
|super("mutation", queryName);
|if (movie != null || fieldsSet.contains("movie")) {
| getInput().put("movie", movie);
|}if (reviews != null || fieldsSet.contains("reviews")) {
Expand Down Expand Up @@ -200,7 +200,7 @@ class ClientApiGenMutationTest {
assert(
codeGenResult.javaQueryTypes[0].typeSpec.methodSpecs
.find { it.name == "<init>" }?.code.toString()
.contains("super(\"mutation\");\ngetInput().put(\"movieId\", movieId);")
.contains("super(\"mutation\", queryName);\ngetInput().put(\"movieId\", movieId);")
)

assertCompilesJava(
Expand Down

0 comments on commit 0cb9071

Please sign in to comment.