From 932962e463cc0e31e9bac9604ebcedff749a50bc Mon Sep 17 00:00:00 2001 From: mo7ty Date: Tue, 15 Apr 2025 22:11:42 +0100 Subject: [PATCH 1/2] Add [+UserDeserializationTest+] --- src/test/java/UserDeserializationTest.java | 64 ++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/test/java/UserDeserializationTest.java diff --git a/src/test/java/UserDeserializationTest.java b/src/test/java/UserDeserializationTest.java new file mode 100644 index 0000000..0b8b1c6 --- /dev/null +++ b/src/test/java/UserDeserializationTest.java @@ -0,0 +1,64 @@ +import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +import static java.util.Objects.hash; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class UserDeserializationTest { + + public static class User { + private String username; + private int age; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public boolean equals(final Object o) { + return this == o + || (o instanceof User + && hashCode() == o.hashCode()); + } + + @Override + public int hashCode() { + return hash(getUsername(), + getAge()); + } + } + + abstract static class UserMixin { + public static final String USER_NAME = "user_name"; + @JsonProperty + @JsonAlias(USER_NAME) + abstract void setUsername(String username); + } + + @Test + public void testUserDeserializationWithSingleObjectMapper() throws Exception { + String json = "{\"username\": \"Bob\", \"age\": 25}"; + + ObjectMapper mapper = new ObjectMapper(); + mapper.addMixIn(User.class, UserMixin.class); + + User user1 = mapper.readValue(json, User.class); + User user2 = mapper.readValue(json.replace("username", UserMixin.USER_NAME), User.class); + + assertEquals(user1, user2); + } +} From 33a93cfb09c938be796dbf973c36bbcbc2661d44 Mon Sep 17 00:00:00 2001 From: mo7ty Date: Wed, 16 Apr 2025 09:16:32 +0100 Subject: [PATCH 2/2] Improve `UserDeserializationTest#testUserDeserializationWithSingleObjectMapper()` --- src/test/java/UserDeserializationTest.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/test/java/UserDeserializationTest.java b/src/test/java/UserDeserializationTest.java index 0b8b1c6..abe541b 100644 --- a/src/test/java/UserDeserializationTest.java +++ b/src/test/java/UserDeserializationTest.java @@ -4,7 +4,9 @@ import org.junit.jupiter.api.Test; import static java.util.Objects.hash; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; public class UserDeserializationTest { @@ -51,14 +53,20 @@ abstract static class UserMixin { @Test public void testUserDeserializationWithSingleObjectMapper() throws Exception { - String json = "{\"username\": \"Bob\", \"age\": 25}"; ObjectMapper mapper = new ObjectMapper(); mapper.addMixIn(User.class, UserMixin.class); - User user1 = mapper.readValue(json, User.class); - User user2 = mapper.readValue(json.replace("username", UserMixin.USER_NAME), User.class); + String json1 = "{\"username\": \"Bob\", \"age\": 25}"; + assertThat(json1).doesNotContain(UserMixin.USER_NAME); + String json2 = json1.replace("username", UserMixin.USER_NAME); + assertThat(json2).contains(UserMixin.USER_NAME); + + assertNotEquals(json1, json2); + + User user1 = mapper.readValue(json1, User.class); + User user2 = mapper.readValue(json2, User.class); assertEquals(user1, user2); } }