From 4c04bd19fe141072590f1c59bc1dde664867b385 Mon Sep 17 00:00:00 2001 From: Mateusz Fabisiak Date: Fri, 19 Jun 2026 13:53:00 +0200 Subject: [PATCH] fix: use backtick-escaped constant reference for enum default values --- .../core/gen/model/ModelGenerator.kt | 2 +- .../justworks/core/gen/ModelGeneratorTest.kt | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/core/src/main/kotlin/com/avsystem/justworks/core/gen/model/ModelGenerator.kt b/core/src/main/kotlin/com/avsystem/justworks/core/gen/model/ModelGenerator.kt index 0c3a997..44a0ec1 100644 --- a/core/src/main/kotlin/com/avsystem/justworks/core/gen/model/ModelGenerator.kt +++ b/core/src/main/kotlin/com/avsystem/justworks/core/gen/model/ModelGenerator.kt @@ -564,7 +564,7 @@ internal object ModelGenerator { } is String -> { - CodeBlock.of("%T.%L", className, value.toEnumConstantName()) + CodeBlock.of("%T.%N", className, value.toEnumConstantName()) } else -> { diff --git a/core/src/test/kotlin/com/avsystem/justworks/core/gen/ModelGeneratorTest.kt b/core/src/test/kotlin/com/avsystem/justworks/core/gen/ModelGeneratorTest.kt index 33b25b5..56261a3 100644 --- a/core/src/test/kotlin/com/avsystem/justworks/core/gen/ModelGeneratorTest.kt +++ b/core/src/test/kotlin/com/avsystem/justworks/core/gen/ModelGeneratorTest.kt @@ -640,6 +640,40 @@ class ModelGeneratorTest { ) } + @Test + fun `enum default with numeric string value uses backtick-escaped constant reference`() { + val floorEnum = + EnumModel( + name = "Floor", + description = null, + type = EnumBackingType.STRING, + values = listOf(EnumModel.Value("1"), EnumModel.Value("2"), EnumModel.Value("3")), + ) + val schema = + SchemaModel( + name = "Request", + description = null, + properties = + listOf( + PropertyModel("floor", TypeRef.Reference("Floor"), null, false, "1"), + ), + requiredProperties = setOf("floor"), + allOf = null, + oneOf = null, + anyOf = null, + discriminator = null, + ) + val files = generate(spec(schemas = listOf(schema), enums = listOf(floorEnum))) + val typeSpec = files.first { it.name == "Request" }.members.filterIsInstance()[0] + val constructor = assertNotNull(typeSpec.primaryConstructor) + val param = constructor.parameters.first { it.name == "floor" } + val defaultStr = param.defaultValue.toString() + assertTrue( + defaultStr.contains("`1`"), + "Expected backtick-escaped `1`, got: $defaultStr", + ) + } + @Test fun `array property with default emits listOf with element literals`() { val schema =