Skip to content

Commit 73a9d0e

Browse files
committed
Added test for kotlinx_serialization with discriminator
1 parent 5d74cdf commit 73a9d0e

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

modules/openapi-generator/src/test/java/org/openapitools/codegen/kotlin/KotlinClientCodegenModelTest.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -533,6 +533,46 @@ private void givenSchemaObjectPropertyNameContainsDollarSignWhenGenerateThenDoll
533533
Assert.assertEquals(customKotlinParseListener.getStringReferenceCount(), 0);
534534
}
535535

536+
@Test(description = "generate polymorphic kotlinx_serialization model")
537+
public void polymorphicKotlinxSerialzation() throws IOException {
538+
File output = Files.createTempDirectory("test").toFile();
539+
output.deleteOnExit();
540+
541+
final CodegenConfigurator configurator = new CodegenConfigurator()
542+
.setGeneratorName("kotlin")
543+
.setLibrary("jvm-retrofit2")
544+
.setAdditionalProperties(new HashMap<>() {{
545+
put(CodegenConstants.SERIALIZATION_LIBRARY, "kotlinx_serialization");
546+
put(CodegenConstants.MODEL_PACKAGE, "xyz.abcdef.model");
547+
}})
548+
.setInputSpec("src/test/resources/3_0/issue_xxxx.yaml")
549+
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
550+
551+
final ClientOptInput clientOptInput = configurator.toClientOptInput();
552+
DefaultGenerator generator = new DefaultGenerator();
553+
List<File> files = generator.opts(clientOptInput).generate();
554+
555+
Assert.assertEquals(files.size(), 36);
556+
557+
final Path animalKt = Paths.get(output + "/src/main/kotlin/xyz/abcdef/model/Animal.kt");
558+
// base doesn't contain discriminator
559+
TestUtils.assertFileNotContains(animalKt, "val discriminator");
560+
// base is sealed class
561+
TestUtils.assertFileContains(animalKt, "sealed class Animal");
562+
// base properties are abstract
563+
TestUtils.assertFileContains(animalKt, "abstract val id");
564+
TestUtils.assertFileContains(animalKt, "abstract val optionalProperty");
565+
// base has extra imports
566+
TestUtils.assertFileContains(animalKt, "import kotlinx.serialization.ExperimentalSerializationApi");
567+
TestUtils.assertFileContains(animalKt, "import kotlinx.serialization.json.JsonClassDiscriminator");
568+
569+
final Path birdKt = Paths.get(output + "/src/main/kotlin/xyz/abcdef/model/Bird.kt");
570+
// derived doesn't contain disciminator
571+
TestUtils.assertFileNotContains(birdKt, "val discriminator");
572+
// derived has serial name set to mapping key
573+
TestUtils.assertFileContains(birdKt, "@SerialName(value = \"BIRD\")");
574+
}
575+
536576
private static class ModelNameTest {
537577
private final String expectedName;
538578
private final String expectedClassName;

0 commit comments

Comments
 (0)