From 22be2f898d7248bcdb827bc19b86927893aef463 Mon Sep 17 00:00:00 2001 From: Andrzej Zabost <5508894+azabost@users.noreply.github.com> Date: Wed, 28 Jun 2023 01:19:33 +0200 Subject: [PATCH] Add a few more tests for the int-based enums serialization --- .../jackson/CodifiedJacksonModuleTest.kt | 17 +++++++++++++++++ .../serializer/CodifiedEnumSerializerTest.kt | 14 ++++++++++++++ .../codified/enums/serializer/IntEnum.kt | 15 +++++++++++++++ .../enums/serializer/MixedEnumWrapper.kt | 12 ++++++++++++ 4 files changed, 58 insertions(+) create mode 100644 enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/IntEnum.kt create mode 100644 enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/MixedEnumWrapper.kt diff --git a/enums-jackson/src/test/kotlin/pl/brightinventions/codified/jackson/CodifiedJacksonModuleTest.kt b/enums-jackson/src/test/kotlin/pl/brightinventions/codified/jackson/CodifiedJacksonModuleTest.kt index cb9a3f7..eaddebf 100644 --- a/enums-jackson/src/test/kotlin/pl/brightinventions/codified/jackson/CodifiedJacksonModuleTest.kt +++ b/enums-jackson/src/test/kotlin/pl/brightinventions/codified/jackson/CodifiedJacksonModuleTest.kt @@ -35,6 +35,18 @@ class CodifiedJacksonModuleTest { output.knownOrNull().shouldEqual(input) } + @Test + fun `can deserialize known value to codified enum with int from json`() { + // given + val input = 400 + + // when + val output = serdeCodifiedEnum(input) + + // then + output.knownOrNull().shouldEqual(Weight.Medium) + } + @Test fun `can serialize and deserialize not known value to codified enum`() { // given @@ -130,6 +142,11 @@ class CodifiedJacksonModuleTest { return objectMapper.readValue(json, object : TypeReference>() {}) } + private fun serdeCodifiedEnum(input: Int): CodifiedEnum { + val json = objectMapper.writer().writeValueAsString(input) + return objectMapper.readValue(json, object : TypeReference>() {}) + } + private inline fun serde(input: T): T { val json = objectMapper.writer().writeValueAsString(input) return objectMapper.readValue(json, T::class.java) diff --git a/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/CodifiedEnumSerializerTest.kt b/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/CodifiedEnumSerializerTest.kt index d8a7b87..b7d7c34 100644 --- a/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/CodifiedEnumSerializerTest.kt +++ b/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/CodifiedEnumSerializerTest.kt @@ -152,4 +152,18 @@ class CodifiedEnumSerializerTest { val basket = json.decodeFromString(FoodBasket.serializer(), stringifiedBasket) basket.shouldEqual(expectedBasket) } + + @Test + fun `mixed enum wrapper should be serialized`() { + val wrapper = MixedEnumWrapper(StringEnum.FOO.codifiedEnum(), IntEnum.QUX.codifiedEnum()) + val string = json.encodeToString(MixedEnumWrapper.serializer(), wrapper) + string.shouldEqual("{\"stringEnum\":\"${StringEnum.FOO.code}\",\"intEnum\":${IntEnum.QUX.code}}") + } + + @Test + fun `mixed enum wrapper should be deserialized`() { + val string = "{\"stringEnum\":\"${StringEnum.FOO.code}\",\"intEnum\":${IntEnum.QUX.code}}" + val wrapper = json.decodeFromString(MixedEnumWrapper.serializer(), string) + wrapper.shouldEqual(MixedEnumWrapper(StringEnum.FOO.codifiedEnum(), IntEnum.QUX.codifiedEnum())) + } } \ No newline at end of file diff --git a/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/IntEnum.kt b/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/IntEnum.kt new file mode 100644 index 0000000..f0ef402 --- /dev/null +++ b/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/IntEnum.kt @@ -0,0 +1,15 @@ +package pl.brightinventions.codified.enums.serializer + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.serializer +import pl.brightinventions.codified.Codified +import pl.brightinventions.codified.enums.CodifiedEnum + +const val BAZ_CODE = 100 +const val QUX_CODE = 999 + +enum class IntEnum(override val code: Int) : Codified { + BAZ(BAZ_CODE), QUX(QUX_CODE); + + object CodifiedSerializer : KSerializer> by codifiedEnumSerializer(Int.serializer()) +} \ No newline at end of file diff --git a/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/MixedEnumWrapper.kt b/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/MixedEnumWrapper.kt new file mode 100644 index 0000000..bbb30c2 --- /dev/null +++ b/enums-serializer/src/test/kotlin/pl/brightinventions/codified/enums/serializer/MixedEnumWrapper.kt @@ -0,0 +1,12 @@ +package pl.brightinventions.codified.enums.serializer + +import kotlinx.serialization.Serializable +import pl.brightinventions.codified.enums.CodifiedEnum + +@Serializable +data class MixedEnumWrapper( + @Serializable(with = StringEnum.CodifiedSerializer::class) + val stringEnum: CodifiedEnum, + @Serializable(with = IntEnum.CodifiedSerializer::class) + val intEnum: CodifiedEnum, +) \ No newline at end of file