diff --git a/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistration.scala b/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistration.scala index 79d0073..ccbfb8d 100644 --- a/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistration.scala +++ b/library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistration.scala @@ -254,7 +254,9 @@ class OpenAPIModelRegistration( } private def registerAsReference(name: String, schema: Schema[_]): Schema[_] = { - components.addSchemas(name, schema) + if (!Option(components.getSchemas).exists(_.containsKey(name))) { + components.addSchemas(name, schema) + } val schemaReference = new Schema schemaReference.set$ref(s"#/components/schemas/$name") schemaReference diff --git a/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistrationSpec.scala b/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistrationSpec.scala index 038ca8d..9ec1145 100644 --- a/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistrationSpec.scala +++ b/library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistrationSpec.scala @@ -143,6 +143,8 @@ class OpenAPIModelRegistrationSpec extends AnyFlatSpec { private sealed trait NestedSealedTrait + private case class NestedSealedTraitBreaker(breaker: NestedSealedTrait.NestedSealedTraitVariant1) + private object NestedSealedTrait { case class NestedSealedTraitVariant1(a: String, b: Int, c: NestedSealedTrait) extends NestedSealedTrait case object NestedSealedTraitVariant2 extends NestedSealedTrait @@ -396,6 +398,7 @@ class OpenAPIModelRegistrationSpec extends AnyFlatSpec { ) openAPIModelRegistration.register[NestedSealedTrait]() + openAPIModelRegistration.register[NestedSealedTraitBreaker]() val actualSchemas = components.getSchemas @@ -535,6 +538,13 @@ class OpenAPIModelRegistrationSpec extends AnyFlatSpec { areDiscriminatorPropertyRequired } ) + + assertTypeAndFormatAreAsExpected(actualSchemas, "NestedSealedTraitBreaker", "object") + assertRefIsAsExpected( + actualSchemas, + "NestedSealedTraitBreaker.breaker", + "#/components/schemas/NestedSealedTraitVariant1" + ) } it should "add discriminator to sealed types " +