Skip to content

Commit 8c98205

Browse files
smyrickShane Myrick
and
Shane Myrick
authored
Fix issue with GraphQLName on properties (ExpediaGroup#870)
* Fix issue with GraphQLName on properties * Update integration test Co-authored-by: Shane Myrick <[email protected]>
1 parent f9d341a commit 8c98205

File tree

4 files changed

+28
-5
lines changed

4 files changed

+28
-5
lines changed

examples/spring/src/main/kotlin/com/expediagroup/graphql/examples/query/NestedQueries.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.expediagroup.graphql.examples.query
1818

1919
import com.expediagroup.graphql.annotations.GraphQLDescription
20+
import com.expediagroup.graphql.annotations.GraphQLName
2021
import com.expediagroup.graphql.spring.operations.Query
2122
import com.fasterxml.jackson.annotation.JsonIgnore
2223
import graphql.schema.DataFetcher
@@ -38,6 +39,7 @@ class NestedQueries(private val coffeeBean: CoffeeBean) : Query {
3839

3940
data class NestedAnimal(
4041
val id: Int,
42+
@GraphQLName("animalType")
4143
val type: String
4244
) {
4345
@JsonIgnore

examples/spring/src/test/kotlin/com/expediagroup/graphql/examples/query/NestedQueriesIT.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ class NestedQueriesIT(@Autowired private val testClient: WebTestClient) {
4242
.uri(GRAPHQL_ENDPOINT)
4343
.accept(APPLICATION_JSON)
4444
.contentType(GRAPHQL_MEDIA_TYPE)
45-
.bodyValue("query { $query { details { veryDetailedFunction }, id, type } }")
45+
.bodyValue("query { $query { details { veryDetailedFunction }, id, animalType } }")
4646
.exchange()
4747
.expectStatus().isOk
4848
.verifyOnlyDataExists(query)
4949
.jsonPath("$DATA_JSON_PATH.$query.details").exists()
5050
.jsonPath("$DATA_JSON_PATH.$query.details.veryDetailedFunction").isEqualTo("Details(1)")
5151
.jsonPath("$DATA_JSON_PATH.$query.id").isEqualTo("1")
52-
.jsonPath("$DATA_JSON_PATH.$query.type").isEqualTo("cat")
52+
.jsonPath("$DATA_JSON_PATH.$query.animalType").isEqualTo("cat")
5353
}
5454

5555
@Test

graphql-kotlin-schema-generator/src/main/kotlin/com/expediagroup/graphql/generator/types/generateProperty.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ internal fun generateProperty(generator: SchemaGenerator, prop: KProperty<*>, pa
3333
val propertyType = generateGraphQLType(generator, type = prop.returnType)
3434
.safeCast<GraphQLOutputType>()
3535

36+
val propertyName = prop.getPropertyName(parentClass)
37+
3638
val fieldBuilder = GraphQLFieldDefinition.newFieldDefinition()
3739
.description(prop.getPropertyDescription(parentClass))
38-
.name(prop.getPropertyName(parentClass))
40+
.name(propertyName)
3941
.type(propertyType)
4042

4143
prop.getPropertyDeprecationReason(parentClass)?.let {
@@ -50,7 +52,7 @@ internal fun generateProperty(generator: SchemaGenerator, prop: KProperty<*>, pa
5052
val field = fieldBuilder.build()
5153

5254
val parentType = parentClass.getSimpleName()
53-
val coordinates = FieldCoordinates.coordinates(parentType, prop.name)
55+
val coordinates = FieldCoordinates.coordinates(parentType, propertyName)
5456
val dataFetcherFactory = generator.config.dataFetcherFactoryProvider.propertyDataFetcherFactory(kClass = parentClass, kProperty = prop)
5557
generator.codeRegistry.dataFetcher(coordinates, dataFetcherFactory)
5658

graphql-kotlin-schema-generator/src/test/kotlin/com/expediagroup/graphql/generator/types/GeneratePropertyTest.kt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.expediagroup.graphql.generator.types
1919
import com.expediagroup.graphql.SchemaGeneratorConfig
2020
import com.expediagroup.graphql.annotations.GraphQLDescription
2121
import com.expediagroup.graphql.annotations.GraphQLDirective
22+
import com.expediagroup.graphql.annotations.GraphQLName
2223
import com.expediagroup.graphql.directives.KotlinDirectiveWiringFactory
2324
import com.expediagroup.graphql.directives.KotlinSchemaDirectiveWiring
2425
import com.expediagroup.graphql.execution.KotlinDataFetcherFactoryProvider
@@ -42,6 +43,7 @@ import io.mockk.spyk
4243
import org.junit.jupiter.api.Test
4344
import kotlin.test.assertEquals
4445
import kotlin.test.assertFalse
46+
import kotlin.test.assertNotNull
4547
import kotlin.test.assertNull
4648
import kotlin.test.assertTrue
4749

@@ -54,7 +56,7 @@ class GeneratePropertyTest : TypeTestHelper() {
5456
private class ClassWithProperties {
5557
@GraphQLDescription("It's not a lie")
5658
@PropertyDirective("trust me")
57-
lateinit var cake: String
59+
val cake: String = "chocolate"
5860

5961
@Deprecated("Only cake")
6062
lateinit var dessert: String
@@ -63,6 +65,9 @@ class GeneratePropertyTest : TypeTestHelper() {
6365
lateinit var healthyFood: String
6466

6567
var nullableCake: String? = null
68+
69+
@GraphQLName("pie")
70+
val renameMe: String = "apple"
6671
}
6772

6873
private data class DataClassWithProperties(
@@ -84,6 +89,20 @@ class GeneratePropertyTest : TypeTestHelper() {
8489
val result = generateProperty(generator, prop, ClassWithProperties::class)
8590

8691
assertEquals("cake", result.name)
92+
val registry = generator.codeRegistry.build()
93+
val coordinates = FieldCoordinates.coordinates("ClassWithProperties", "cake")
94+
assertNotNull(registry.getDataFetcher(coordinates, result))
95+
}
96+
97+
@Test
98+
fun `Test naming override`() {
99+
val prop = ClassWithProperties::renameMe
100+
val result = generateProperty(generator, prop, ClassWithProperties::class)
101+
102+
assertEquals("pie", result.name)
103+
val registry = generator.codeRegistry.build()
104+
val coordinates = FieldCoordinates.coordinates("ClassWithProperties", "pie")
105+
assertNotNull(registry.getDataFetcher(coordinates, result))
87106
}
88107

89108
@Test

0 commit comments

Comments
 (0)