Skip to content

Commit 7657acb

Browse files
committed
Merge branch 'develop' into v2.7
2 parents a94cfdf + cff3999 commit 7657acb

File tree

4 files changed

+35
-13
lines changed

4 files changed

+35
-13
lines changed

src/main/scala/com/github/swagger/scala/converter/SwaggerScalaModelConverter.scala

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import io.swagger.v3.core.jackson.ModelResolver
1010
import io.swagger.v3.core.util.{Json, PrimitiveType}
1111
import io.swagger.v3.oas.annotations.Parameter
1212
import io.swagger.v3.oas.annotations.media.{ArraySchema, Schema => SchemaAnnotation}
13-
import io.swagger.v3.oas.models.media.{ObjectSchema, Schema}
13+
import io.swagger.v3.oas.models.media.{MapSchema, ObjectSchema, Schema}
1414
import org.slf4j.LoggerFactory
1515

1616
import java.lang.annotation.Annotation
@@ -294,17 +294,22 @@ class SwaggerScalaModelConverter extends ModelResolver(SwaggerScalaModelConverte
294294
}
295295

296296
private[converter] def tryCorrectSchema(itemSchema: Schema[_], primitiveType: PrimitiveType): Schema[_] = {
297-
Try {
298-
val primitiveProperty = primitiveType.createProperty()
299-
val propAsString = objectMapper.writeValueAsString(itemSchema)
300-
val correctedSchema = objectMapper.readValue(propAsString, primitiveProperty.getClass)
301-
correctedSchema.setType(primitiveProperty.getType)
302-
Option(itemSchema.getFormat) match {
303-
case Some(_) =>
304-
case _ => correctedSchema.setFormat(primitiveProperty.getFormat)
297+
itemSchema match {
298+
case ms: MapSchema => ms
299+
case _ => {
300+
Try {
301+
val primitiveProperty = primitiveType.createProperty()
302+
val propAsString = objectMapper.writeValueAsString(itemSchema)
303+
val correctedSchema = objectMapper.readValue(propAsString, primitiveProperty.getClass)
304+
correctedSchema.setType(primitiveProperty.getType)
305+
Option(itemSchema.getFormat) match {
306+
case Some(_) =>
307+
case _ => correctedSchema.setFormat(primitiveProperty.getFormat)
308+
}
309+
correctedSchema
310+
}.toOption.getOrElse(itemSchema)
305311
}
306-
correctedSchema
307-
}.toOption.getOrElse(itemSchema)
312+
}
308313
}
309314

310315

src/test/scala/com/github/swagger/scala/converter/ModelPropertyParserTest.scala

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ import scala.reflect.ClassTag
1717
class ModelPropertyParserTest extends AnyFlatSpec with BeforeAndAfterEach with Matchers with OptionValues {
1818
override protected def beforeEach() = {
1919
SwaggerScalaModelConverter.setRequiredBasedOnAnnotation(true)
20+
SwaggerScalaModelConverter.setRequiredBasedOnDefaultValue(true)
2021
}
2122

2223
override protected def afterEach() = {
2324
SwaggerScalaModelConverter.setRequiredBasedOnAnnotation(true)
25+
SwaggerScalaModelConverter.setRequiredBasedOnDefaultValue(true)
2426
}
2527

2628
trait TestScope {
@@ -389,6 +391,7 @@ class ModelPropertyParserTest extends AnyFlatSpec with BeforeAndAfterEach with M
389391

390392
it should "process Model with Scala BigDecimal with annotation" in new PropertiesScope[ModelWBigDecimalAnnotated]() {
391393
val fieldSchema = model.value.getProperties.get("field")
394+
fieldSchema.getDeprecated shouldBe java.lang.Boolean.TRUE
392395
fieldSchema shouldBe a[StringSchema]
393396
fieldSchema.asInstanceOf[StringSchema].getExample shouldEqual ("42.0")
394397
nullSafeSeq(model.value.getRequired) shouldEqual Seq("field")
@@ -397,6 +400,7 @@ class ModelPropertyParserTest extends AnyFlatSpec with BeforeAndAfterEach with M
397400
it should "map BigDecimal to schema type 'number'" in new PropertiesScope[ModelWBigDecimalNoType]() {
398401
val properties = model.value.getProperties
399402
val fieldSchema = properties.get("field")
403+
fieldSchema.getDeprecated shouldBe null
400404
properties should have size 1
401405

402406
fieldSchema shouldBe a[NumberSchema]
@@ -470,17 +474,27 @@ class ModelPropertyParserTest extends AnyFlatSpec with BeforeAndAfterEach with M
470474
it should "default to supplied schema if it can't be corrected" in new PropertiesScope[ModelWMapStringCaseClass] {
471475
schemas should have size 2
472476

477+
nullSafeSeq(model.value.getRequired) shouldBe empty
473478
val mapField = model.value.getProperties.get("maybeMapStringCaseClass")
474479
mapField shouldBe a[MapSchema]
475480
mapField.getAdditionalProperties shouldBe a[Schema[_]]
476481
mapField.getAdditionalProperties.asInstanceOf[Schema[_]].get$ref() shouldBe "#/components/schemas/SomeCaseClass"
477482

478-
479483
val caseClassField = schemas("SomeCaseClass")
480484
caseClassField shouldBe a[Schema[_]]
481485
caseClassField.getProperties.get("field") shouldBe an[IntegerSchema]
482486
}
483487

488+
it should "handle Option[Map[String, Long]]" in new PropertiesScope[ModelWMapStringLong] {
489+
schemas should have size 1
490+
491+
nullSafeSeq(model.value.getRequired) shouldBe empty
492+
val mapField = model.value.getProperties.get("maybeMapStringLong")
493+
mapField shouldBe a[MapSchema]
494+
nullSafeMap(mapField.getProperties) shouldBe empty
495+
mapField.getAdditionalProperties shouldBe a[Schema[_]]
496+
}
497+
484498
it should "process Model with Scala Seq" in new PropertiesScope[ModelWSeqString] {
485499
schemas should have size 1
486500
val stringsField = model.value.getProperties.get("strings")

src/test/scala/models/ModelWBigDecimalAnnotated.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package models
33
import io.swagger.v3.oas.annotations.media.Schema
44

55
case class ModelWBigDecimalAnnotated(
6-
@Schema(description = "bigdecimal value", `type` = "string", example = "42.0", required = true) field: BigDecimal
6+
@Schema(description = "bigdecimal value", `type` = "string", example = "42.0",
7+
required = true, deprecated = true) field: BigDecimal
78
)
89

910
case class ModelWBigDecimalNoType(field: BigDecimal)

src/test/scala/models/ModelWSeqString.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ case class SomeCaseClass(field: Int)
1212

1313
case class ModelWMapStringCaseClass(maybeMapStringCaseClass: Option[Map[String, SomeCaseClass]])
1414

15+
case class ModelWMapStringLong(maybeMapStringLong: Option[Map[String, Long]])
16+
1517
case class ModelWJavaMapString(strings: java.util.Map[String, String])

0 commit comments

Comments
 (0)