Skip to content

Commit 78d30c0

Browse files
committed
Only set schema properties when not empty
to prevent empty name or default value from being set branch:
1 parent 0b29029 commit 78d30c0

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

src/main/scala/com/github/swagger/enumeratum/converter/SwaggerEnumeratumModelConverter.scala

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,34 @@ import io.swagger.v3.oas.models.media.Schema
1414
class SwaggerEnumeratumModelConverter extends ModelResolver(Json.mapper()) {
1515
private val enumEntryClass = classOf[EnumEntry]
1616

17+
def noneIfEmpty(s: String): Option[String] = Option(s).filter(_.trim.nonEmpty)
18+
1719
override def resolve(annotatedType: AnnotatedType, context: ModelConverterContext, chain: Iterator[ModelConverter]): Schema[_] = {
1820
val javaType = _mapper.constructType(annotatedType.getType)
1921
val cls = javaType.getRawClass
2022
if (isEnum(cls)) {
2123
val sp: Schema[String] = PrimitiveType.STRING.createProperty().asInstanceOf[Schema[String]]
2224
setRequired(annotatedType)
23-
getValues(cls).foreach { v =>
25+
getValues(cls).foreach { v: String =>
2426
sp.addEnumItemObject(v)
2527
}
2628
nullSafeList(annotatedType.getCtxAnnotations).foreach {
2729
case p: Parameter => {
28-
Option(p.description).foreach(desc => sp.setDescription(desc))
30+
noneIfEmpty(p.description).foreach(desc => sp.setDescription(desc))
2931
sp.setDeprecated(p.deprecated)
30-
Option(p.example).foreach(ex => sp.setExample(ex))
31-
Option(p.name).foreach(name => sp.setName(name))
32+
noneIfEmpty(p.example).foreach(ex => sp.setExample(ex))
33+
noneIfEmpty(p.name).foreach(name => sp.setName(name))
3234
}
3335
case s: SchemaAnnotation => {
34-
Option(s.description).foreach(desc => sp.setDescription(desc))
35-
Option(s.defaultValue).foreach(df => sp.setDefault(df))
36+
noneIfEmpty(s.description).foreach(desc => sp.setDescription(desc))
37+
noneIfEmpty(s.defaultValue).foreach(df => sp.setDefault(df))
3638
sp.setDeprecated(s.deprecated)
37-
Option(s.example).foreach(ex => sp.setExample(ex))
38-
Option(s.name).foreach(name => sp.setName(name))
39-
Option(s.accessMode).foreach { accessMode =>
40-
accessMode match {
41-
case AccessMode.READ_ONLY => sp.setReadOnly(true)
42-
case AccessMode.WRITE_ONLY => sp.setWriteOnly(true)
43-
case _ =>
44-
}
39+
noneIfEmpty(s.example).foreach(ex => sp.setExample(ex))
40+
noneIfEmpty(s.name).foreach(name => sp.setName(name))
41+
Option(s.accessMode).foreach {
42+
case AccessMode.READ_ONLY => sp.setReadOnly(true)
43+
case AccessMode.WRITE_ONLY => sp.setWriteOnly(true)
44+
case _ =>
4545
}
4646
}
4747
case _ =>

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ class ModelPropertyParserTest extends AnyFlatSpec with Matchers with OptionValue
6868
field shouldBe a [StringSchema]
6969
val schema = field.asInstanceOf[StringSchema]
7070
schema.getDescription shouldEqual (null)
71+
schema.getDefault should be (null)
7172
schema.getEnum.asScala shouldEqual Ctx.Color.values.map(_.entryName)
7273
nullSafeList(model.value.getRequired) shouldBe Seq("field")
7374
}
@@ -76,6 +77,18 @@ class ModelPropertyParserTest extends AnyFlatSpec with Matchers with OptionValue
7677
val converter = ModelConverters.getInstance()
7778
val schemas = converter.readAll(classOf[ModelWCtxEnumAndAnnotation]).asScala.toMap
7879
schemas.keys should have size 1
80+
81+
val model = findModel(schemas, "ModelWCtxEnum")
82+
model should be(defined)
83+
model.get.getProperties should not be (null)
84+
val field = model.value.getProperties.get("field")
85+
field shouldBe a[StringSchema]
86+
val schema = field.asInstanceOf[StringSchema]
87+
schema.getDescription shouldEqual "An annotated field"
88+
schema.getName shouldEqual "field"
89+
schema.getDefault should be (null)
90+
schema.getEnum.asScala shouldEqual Ctx.Color.values.map(_.entryName)
91+
nullSafeList(model.value.getRequired) shouldBe Seq("field")
7992
}
8093

8194
def findModel(schemas: Map[String, Schema[_]], name: String): Option[Schema[_]] = {

0 commit comments

Comments
 (0)