Test jackson support for scala enumerations (#28726)

* Extends Spec over scala enumerations
* Adds documentation for scala enumeration support serializing with Jackson
This commit is contained in:
Ignasi Marimon-Clos 2020-03-19 11:09:05 +01:00 committed by GitHub
parent 3d8b4360f0
commit bcfdb896b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 1 deletions

View file

@ -17,7 +17,6 @@ import java.util.logging.FileHandler
import scala.collection.immutable
import scala.concurrent.duration.FiniteDuration
import scala.concurrent.duration._
import akka.actor.ActorRef
import akka.actor.ActorSystem
import akka.actor.Address
@ -51,7 +50,9 @@ import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonGenerator
import com.fasterxml.jackson.core.StreamReadFeature
import com.fasterxml.jackson.core.StreamWriteFeature
import com.fasterxml.jackson.core.`type`.TypeReference
import com.fasterxml.jackson.databind.json.JsonMapper
import com.fasterxml.jackson.module.scala.JsonScalaEnumeration
import com.github.ghik.silencer.silent
object ScalaTestMessages {
@ -96,6 +97,21 @@ object ScalaTestMessages {
final case class OldCommandNotInBindings(name: String)
// #jackson-scala-enumeration
object Planet extends Enumeration {
type Planet = Value
val Mercury, Venus, Earth, Mars, Krypton = Value
}
// Uses default Jackson serialization format for Scala Enumerations
final case class Alien(name: String, planet: Planet.Planet) extends TestMessage
// Serializes planet values as a JsonString
class PlanetType extends TypeReference[Planet.type] {}
final case class Superhero(name: String, @JsonScalaEnumeration(classOf[PlanetType]) planet: Planet.Planet)
extends TestMessage
// #jackson-scala-enumeration
}
class ScalaTestEventMigration extends JacksonMigration {
@ -463,6 +479,15 @@ class JacksonJsonSerializerSpec extends JacksonSerializerSpec("jackson-json") {
deserializeFromJsonString(json, serializer.identifier, serializer.manifest(expected)) should ===(expected)
}
"deserialize Enumerations as String when configured" in {
val json = """{"name":"Superman", "planet":"Krypton"}"""
val expected = Superhero("Superman", Planet.Krypton)
val serializer = serializerFor(expected)
deserializeFromJsonString(json, serializer.identifier, serializer.manifest(expected)) should ===(expected)
}
"compress large payload with gzip" in {
val conf = JacksonObjectMapperProvider.configForBinding("jackson-json", system.settings.config)
val compressionAlgo = conf.getString("compression.algorithm")
@ -722,6 +747,14 @@ abstract class JacksonSerializerSpec(serializerName: String)
checkSerialization(BooleanCommand(false))
}
"serialize message with Enumeration property (using Jackson legacy format)" in {
checkSerialization(Alien("E.T.", Planet.Mars))
}
"serialize message with Enumeration property as a String" in {
checkSerialization(Superhero("Kal El", Planet.Krypton))
}
"serialize message with Optional property" in {
checkSerialization(OptionCommand(Some("abc")))
checkSerialization(OptionCommand(None))