Skip to content

Commit 570d482

Browse files
authored
#61 Fix missing discriminator if ADT element was reregistered in non-ADT context (#62)
1 parent fe28136 commit 570d482

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

library/src/main/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistration.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,9 @@ class OpenAPIModelRegistration(
254254
}
255255

256256
private def registerAsReference(name: String, schema: Schema[_]): Schema[_] = {
257-
components.addSchemas(name, schema)
257+
if (!Option(components.getSchemas).exists(_.containsKey(name))) {
258+
components.addSchemas(name, schema)
259+
}
258260
val schemaReference = new Schema
259261
schemaReference.set$ref(s"#/components/schemas/$name")
260262
schemaReference

library/src/test/scala/za/co/absa/springdocopenapiscala/OpenAPIModelRegistrationSpec.scala

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ class OpenAPIModelRegistrationSpec extends AnyFlatSpec {
143143

144144
private sealed trait NestedSealedTrait
145145

146+
private case class NestedSealedTraitBreaker(breaker: NestedSealedTrait.NestedSealedTraitVariant1)
147+
146148
private object NestedSealedTrait {
147149
case class NestedSealedTraitVariant1(a: String, b: Int, c: NestedSealedTrait) extends NestedSealedTrait
148150
case object NestedSealedTraitVariant2 extends NestedSealedTrait
@@ -396,6 +398,7 @@ class OpenAPIModelRegistrationSpec extends AnyFlatSpec {
396398
)
397399

398400
openAPIModelRegistration.register[NestedSealedTrait]()
401+
openAPIModelRegistration.register[NestedSealedTraitBreaker]()
399402

400403
val actualSchemas = components.getSchemas
401404

@@ -535,6 +538,13 @@ class OpenAPIModelRegistrationSpec extends AnyFlatSpec {
535538
areDiscriminatorPropertyRequired
536539
}
537540
)
541+
542+
assertTypeAndFormatAreAsExpected(actualSchemas, "NestedSealedTraitBreaker", "object")
543+
assertRefIsAsExpected(
544+
actualSchemas,
545+
"NestedSealedTraitBreaker.breaker",
546+
"#/components/schemas/NestedSealedTraitVariant1"
547+
)
538548
}
539549

540550
it should "add discriminator to sealed types " +

0 commit comments

Comments
 (0)