Skip to content

Commit f2e51b4

Browse files
committed
Add test for deserializing correct units from format annotation
1 parent e650766 commit f2e51b4

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/test/kotlin/com/fasterxml/jackson/module/kotlin/test/DurationTests.kt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import java.time.Instant
1616
import kotlin.test.assertContentEquals
1717
import kotlin.test.assertEquals
1818
import kotlin.time.Duration.Companion.hours
19+
import kotlin.time.Duration.Companion.seconds
1920
import java.time.Duration as JavaDuration
2021
import kotlin.time.Duration as KotlinDuration
2122

@@ -177,6 +178,31 @@ class DurationTests {
177178
assertEquals(mapper.writeValueAsString(jdto), mapper.writeValueAsString(kdto))
178179
}
179180

181+
data class DurationWithFormattedUnits(
182+
@field:JsonFormat(pattern = "HOURS") val formatted: KotlinDuration,
183+
val default: KotlinDuration,
184+
) {
185+
companion object {
186+
@Suppress("unused")
187+
@JvmStatic
188+
@JsonCreator
189+
fun create(
190+
formatted: KotlinDuration,
191+
default: KotlinDuration,
192+
) = DurationWithFormattedUnits(formatted, default)
193+
}
194+
}
195+
196+
@Test
197+
fun `should deserialize using custom units specified by format annotation`() {
198+
val mapper = objectMapper.registerModule(JavaTimeModule())
199+
200+
val actual = mapper.readValue<DurationWithFormattedUnits>("""{"formatted":1,"default":1}""")
201+
202+
assertEquals(1.hours, actual.formatted)
203+
assertEquals(1.seconds, actual.default)
204+
}
205+
180206
private fun jacksonObjectMapper(
181207
configuration: KotlinModule.Builder.() -> Unit,
182208
) = ObjectMapper().registerModule(kotlinModule(configuration))

0 commit comments

Comments
 (0)