Skip to content

Commit 51969ec

Browse files
author
Cole Turner
authored
fix(DataTypeGenerator): support typeMapping for union parent type (#552)
1 parent ffef604 commit 51969ec

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

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

+4-1
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,10 @@ abstract class BaseDataTypeGenerator(
394394
}
395395

396396
private fun addInterface(type: String, javaType: TypeSpec.Builder) {
397-
javaType.addSuperinterface(ClassName.get(packageName, type))
397+
val interfaceTypeMappedName: String? = config.typeMapping[type]
398+
val interfaceName: ClassName = if (interfaceTypeMappedName == null) ClassName.get(packageName, type) else ClassName.bestGuess(interfaceTypeMappedName)
399+
400+
javaType.addSuperinterface(interfaceName)
398401
}
399402

400403
private fun addField(fieldDefinition: Field, javaType: TypeSpec.Builder) {

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

+30
Original file line numberDiff line numberDiff line change
@@ -4151,4 +4151,34 @@ It takes a title and such.
41514151
// Check that the third field of the Person type is an Integer
41524152
assertThat(dataTypes[0].typeSpec.fieldSpecs[2].type.toString()).isEqualTo("java.lang.Integer")
41534153
}
4154+
4155+
@Test
4156+
fun `Supports typeMapping for union types`() {
4157+
val schema = """
4158+
type A {
4159+
name: String
4160+
}
4161+
4162+
type B {
4163+
count: Int
4164+
}
4165+
4166+
union C = A | B
4167+
""".trimIndent()
4168+
4169+
val (dataTypes) = CodeGen(
4170+
CodeGenConfig(
4171+
schemas = setOf(schema),
4172+
packageName = basePackageName,
4173+
typeMapping = mapOf(
4174+
"C" to "java.lang.String"
4175+
)
4176+
)
4177+
).generate()
4178+
4179+
assertThat(dataTypes.size).isEqualTo(2)
4180+
4181+
assertThat(dataTypes[0].typeSpec.superinterfaces[0].toString()).isEqualTo("java.lang.String")
4182+
assertThat(dataTypes[1].typeSpec.superinterfaces[0].toString()).isEqualTo("java.lang.String")
4183+
}
41544184
}

0 commit comments

Comments
 (0)