@@ -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