11package io.github.projectmapk.jackson.module.kogera.zPorted.test.github
22
3+ import com.fasterxml.jackson.annotation.JsonProperty
4+ import com.fasterxml.jackson.annotation.OptBoolean
35import com.fasterxml.jackson.databind.BeanDescription
46import com.fasterxml.jackson.databind.ObjectMapper
57import io.github.projectmapk.jackson.module.kogera.KotlinFeature
8+ import io.github.projectmapk.jackson.module.kogera.defaultMapper
69import io.github.projectmapk.jackson.module.kogera.jacksonObjectMapper
10+ import org.junit.jupiter.api.Assertions.assertEquals
711import org.junit.jupiter.api.Assertions.assertTrue
812import org.junit.jupiter.api.Test
13+ import kotlin.reflect.full.memberProperties
914
1015class GitHub922 {
1116 private inline fun <reified T : Any > ObjectMapper.introspectSerialization (): BeanDescription =
@@ -29,4 +34,49 @@ class GitHub922 {
2934 assertTrue(desc.isRequired(" list" ))
3035 assertTrue(desc.isRequired(" map" ))
3136 }
37+
38+ // isRequired_required_nullability_expected
39+ @Suppress(" PropertyName" )
40+ data class IsRequiredDto (
41+ // region: isRequired takes precedence
42+ @JsonProperty(isRequired = OptBoolean .FALSE , required = false )
43+ val FALSE_false_nullable_false : String? ,
44+ @JsonProperty(isRequired = OptBoolean .FALSE , required = false )
45+ val FALSE_false_nonNull_false : String ,
46+ @JsonProperty(isRequired = OptBoolean .FALSE , required = true )
47+ val FALSE_true_nullable_false : String? ,
48+ @JsonProperty(isRequired = OptBoolean .FALSE , required = true )
49+ val FALSE_true_nonNull_false : String ,
50+ @JsonProperty(isRequired = OptBoolean .TRUE , required = false )
51+ val TRUE_false_nullable_true : String? ,
52+ @JsonProperty(isRequired = OptBoolean .TRUE , required = false )
53+ val TRUE_false_nonNull_true : String ,
54+ @JsonProperty(isRequired = OptBoolean .TRUE , required = true )
55+ val TRUE_true_nullable_true : String? ,
56+ @JsonProperty(isRequired = OptBoolean .TRUE , required = true )
57+ val TRUE_true_nonNull_true : String ,
58+ // endregion
59+ // region: If isRequired is the default, only overrides by required = true will work.
60+ @JsonProperty(isRequired = OptBoolean .DEFAULT , required = false )
61+ val DEFAULT_false_nullable_false : String? ,
62+ @JsonProperty(isRequired = OptBoolean .DEFAULT , required = false )
63+ val DEFAULT_false_nonNull_true : String ,
64+ @JsonProperty(isRequired = OptBoolean .DEFAULT , required = true )
65+ val DEFAULT_true_nullable_true : String? ,
66+ @JsonProperty(isRequired = OptBoolean .DEFAULT , required = true )
67+ val DEFAULT_true_nonNull_true : String ,
68+ // endregion
69+ )
70+
71+ @Test
72+ fun `JsonProperty properly overrides required` () {
73+ val desc = defaultMapper.introspectDeserialization<IsRequiredDto >()
74+
75+ IsRequiredDto ::class .memberProperties.forEach { prop ->
76+ val name = prop.name
77+ val expected = name.split(" _" ).last().toBoolean()
78+
79+ assertEquals(expected, desc.isRequired(name), name)
80+ }
81+ }
3282}
0 commit comments