Skip to content

Commit

Permalink
fix: ensure that the DGS constants are always generated in the same o…
Browse files Browse the repository at this point in the history
…rder
  • Loading branch information
jGleitz committed Feb 13, 2025
1 parent 2603477 commit d963912
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,12 @@ class ConstantsGenerator(private val config: CodeGenConfig, private val document
types[it.name] = constantsType
}

types.values.forEach {
javaType.addType(it.build())
}
types.values.map { it.build() }.sortedBy { it.name }.forEach(javaType::addType)

document.definitions.filterIsInstance<InputObjectTypeDefinition>()
.asSequence()
.excludeSchemaTypeExtension()
.sortedBy { it.name }
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
constantsType.addField(
Expand All @@ -102,6 +101,7 @@ class ConstantsGenerator(private val config: CodeGenConfig, private val document
document.definitions.filterIsInstance<InterfaceTypeDefinition>()
.asSequence()
.excludeSchemaTypeExtension()
.sortedBy { it.name }
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)

Expand All @@ -128,6 +128,7 @@ class ConstantsGenerator(private val config: CodeGenConfig, private val document
document.definitions.filterIsInstance<UnionTypeDefinition>()
.asSequence()
.excludeSchemaTypeExtension()
.sortedBy { it.name }
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)
constantsType.addField(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class KotlinConstantsGenerator(private val config: CodeGenConfig, private val do

document.definitions.filterIsInstance<ObjectTypeDefinition>()
.excludeSchemaTypeExtension()
.sortedBy { it.name }
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)

Expand All @@ -58,6 +59,7 @@ class KotlinConstantsGenerator(private val config: CodeGenConfig, private val do

document.definitions.filterIsInstance<InputObjectTypeDefinition>()
.excludeSchemaTypeExtension()
.sortedBy { it.name }
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)

Expand All @@ -73,6 +75,7 @@ class KotlinConstantsGenerator(private val config: CodeGenConfig, private val do

document.definitions.filterIsInstance<InterfaceTypeDefinition>()
.excludeSchemaTypeExtension()
.sortedBy { it.name }
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)

Expand All @@ -90,6 +93,7 @@ class KotlinConstantsGenerator(private val config: CodeGenConfig, private val do

document.definitions.filterIsInstance<UnionTypeDefinition>()
.excludeSchemaTypeExtension()
.sortedBy { it.name }
.forEach {
val constantsType = createConstantTypeBuilder(config, it.name)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1917,7 +1917,7 @@ class CodeGenTest {
val type = result.javaConstants[0].typeSpec
assertThat(type.name).isEqualTo("DgsConstants")
assertThat(type.typeSpecs).extracting("name").containsExactlyElementsOf(constantNames)
assertThat(type.typeSpecs[0].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "People")
assertThat(type.typeSpecs[2].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "People")
}

@Test
Expand All @@ -1944,7 +1944,7 @@ class CodeGenTest {
)
).generate()
val type = result.javaConstants[0].typeSpec
assertThat(type.typeSpecs).extracting("name").containsExactly("QUERY", "PERSON", "PERSONFILTER")
assertThat(type.typeSpecs).extracting("name").containsExactly("PERSON", "QUERY", "PERSONFILTER")
assertThat(type.typeSpecs[2].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "Email")
assertThat(type.typeSpecs[2].fieldSpecs[0].initializer.toString()).contains("\"PersonFilter\"")
}
Expand Down Expand Up @@ -1977,7 +1977,7 @@ class CodeGenTest {
)
).generate()
val type = result.javaConstants[0].typeSpec
assertThat(type.typeSpecs).extracting("name").containsExactly("QUERY", "PERSON", "PERSONFILTER")
assertThat(type.typeSpecs).extracting("name").containsExactly("PERSON", "QUERY", "PERSONFILTER")
assertThat(type.typeSpecs[2].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "Email", "BirthYear")
}

Expand Down Expand Up @@ -2005,8 +2005,8 @@ class CodeGenTest {
)
).generate()
val type = result.javaConstants[0].typeSpec
assertThat(type.typeSpecs).extracting("name").containsExactly("QUERY", "PERSON")
assertThat(type.typeSpecs[1].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "Firstname", "Lastname", "Email")
assertThat(type.typeSpecs).extracting("name").containsExactly("PERSON", "QUERY")
assertThat(type.typeSpecs[0].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "Firstname", "Lastname", "Email")
}

@Test
Expand All @@ -2033,8 +2033,8 @@ class CodeGenTest {
)
).generate()
val type = result.javaConstants[0].typeSpec
assertThat(type.typeSpecs).extracting("name").containsExactly("QUERY", "PERSON")
assertThat(type.typeSpecs[0].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "People", "Friends")
assertThat(type.typeSpecs).extracting("name").containsExactly("PERSON", "QUERY")
assertThat(type.typeSpecs[1].fieldSpecs).extracting("name").containsExactly("TYPE_NAME", "People", "Friends")
}

@Test
Expand Down Expand Up @@ -3624,11 +3624,11 @@ It takes a title and such.
return Stream.of(
arguments(
true,
listOf("QUERY", "PERSON", "PERSON_META_DATA", "V_PERSON_META_DATA", "V_1_PERSON_META_DATA", "URL_META_DATA")
listOf("PERSON", "PERSON_META_DATA", "QUERY", "URL_META_DATA", "V_1_PERSON_META_DATA", "V_PERSON_META_DATA")
),
arguments(
false,
listOf("QUERY", "PERSON", "PERSONMETADATA", "VPERSONMETADATA", "V1PERSONMETADATA", "URLMETADATA")
listOf("PERSON", "PERSONMETADATA", "QUERY", "URLMETADATA", "V1PERSONMETADATA", "VPERSONMETADATA")
)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1901,10 +1901,10 @@ class KotlinCodeGenTest {
).generate()
val type = result.kotlinConstants[0].members[0] as TypeSpec
assertThat(type.typeSpecs).extracting("name").containsExactlyElementsOf(constantNames)
assertThat(type.typeSpecs[0].propertySpecs).extracting("name").containsExactly("TYPE_NAME", "People")
assertThat(type.typeSpecs[1].propertySpecs).extracting("name")
assertThat(type.typeSpecs[1].propertySpecs).extracting("name").containsExactly("TYPE_NAME", "Data")
assertThat(type.typeSpecs[0].propertySpecs).extracting("name")
.containsExactly("TYPE_NAME", "Firstname", "Lastname", "Metadata")
assertThat(type.typeSpecs[2].propertySpecs).extracting("name").containsExactly("TYPE_NAME", "Data")
assertThat(type.typeSpecs[2].propertySpecs).extracting("name").containsExactly("TYPE_NAME", "People")

assertCompilesKotlin(result.kotlinDataTypes + result.kotlinConstants)
}
Expand All @@ -1916,17 +1916,17 @@ class KotlinCodeGenTest {
Arguments.of(
true,
listOf(
"QUERY",
"PERSON",
"PERSON_META_DATA",
"V_PERSON_META_DATA",
"QUERY",
"URL_META_DATA",
"V_1_PERSON_META_DATA",
"URL_META_DATA"
"V_PERSON_META_DATA"
)
),
Arguments.of(
false,
listOf("QUERY", "PERSON", "PERSONMETADATA", "VPERSONMETADATA", "V1PERSONMETADATA", "URLMETADATA")
listOf("PERSON", "PERSONMETADATA", "QUERY", "URLMETADATA", "V1PERSONMETADATA", "VPERSONMETADATA")
)
)
}
Expand Down Expand Up @@ -1957,7 +1957,7 @@ class KotlinCodeGenTest {
)
).generate()
val type = result.kotlinConstants[0].members[0] as TypeSpec
assertThat(type.typeSpecs).extracting("name").containsExactly("QUERY", "PERSON", "PERSONFILTER")
assertThat(type.typeSpecs).extracting("name").containsExactly("PERSON", "QUERY", "PERSONFILTER")
assertThat(type.typeSpecs[2].propertySpecs).extracting("name").containsExactly("TYPE_NAME", "Email")

assertCompilesKotlin(result.kotlinDataTypes + result.kotlinConstants)
Expand Down Expand Up @@ -1992,7 +1992,7 @@ class KotlinCodeGenTest {
)
).generate()
val type = result.kotlinConstants[0].members[0] as TypeSpec
assertThat(type.typeSpecs).extracting("name").containsExactly("QUERY", "PERSON", "PERSONFILTER")
assertThat(type.typeSpecs).extracting("name").containsExactly("PERSON", "QUERY", "PERSONFILTER")
assertThat(type.typeSpecs[2].propertySpecs).extracting("name")
.containsExactly("TYPE_NAME", "Email", "BirthYear")

Expand Down Expand Up @@ -2024,8 +2024,8 @@ class KotlinCodeGenTest {
)
).generate()
val type = result.kotlinConstants[0].members[0] as TypeSpec
assertThat(type.typeSpecs).extracting("name").containsExactly("QUERY", "PERSON")
assertThat(type.typeSpecs[1].propertySpecs).extracting("name")
assertThat(type.typeSpecs).extracting("name").containsExactly("PERSON", "QUERY")
assertThat(type.typeSpecs[0].propertySpecs).extracting("name")
.containsExactly("TYPE_NAME", "Firstname", "Lastname", "Email")

assertCompilesKotlin(result.kotlinDataTypes + result.kotlinConstants)
Expand Down

0 comments on commit d963912

Please sign in to comment.