Nachrichten überarbeitet spring/sumup-messages spring/sumup-messages--vorlage spring/sumup-messages--2025-03-18--19-42 spring/sumup-messages--2025-03-signal spring/sumup-messages--2025-04-signal spring/sumup-messages--vorlage--2025-03-18--19-42 spring/sumup-messages--vorlage--2025-03-signal spring/sumup-messages--vorlage--2025-04-signal
authorKai Moritz <kai@juplo.de>
Sun, 2 Feb 2025 16:06:55 +0000 (17:06 +0100)
committerKai Moritz <kai@juplo.de>
Sat, 15 Mar 2025 18:26:46 +0000 (19:26 +0100)
build.gradle
pom.xml
src/main/java/de/juplo/messages/Add.java
src/main/java/de/juplo/messages/Calculate.java
src/main/java/de/juplo/messages/Message.java
src/test/java/de/juplo/messages/MessageTest.java

index 0d3fdb9..16cf7cf 100644 (file)
@@ -34,6 +34,8 @@ dependencies {
        compileOnly 'org.projectlombok:lombok'
        annotationProcessor 'org.projectlombok:lombok'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
+       testCompileOnly 'org.projectlombok:lombok'
+       testAnnotationProcessor 'org.projectlombok:lombok'
        testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
 }
 
diff --git a/pom.xml b/pom.xml
index e632758..32610c4 100644 (file)
--- a/pom.xml
+++ b/pom.xml
       <artifactId>spring-boot-starter-test</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
index 940aed3..45b6ef3 100644 (file)
@@ -1,13 +1,18 @@
 package de.juplo.messages;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
+import lombok.*;
 
 
 @Data
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class Add extends Message
 {
+  private Integer number;
   private Integer next;
 
 
index 07f0dc8..eae1c96 100644 (file)
@@ -1,13 +1,19 @@
 package de.juplo.messages;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.Data;
+import lombok.*;
 
 
 @Data
+@EqualsAndHashCode(callSuper = false)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor(access = AccessLevel.PRIVATE)
 @JsonIgnoreProperties(ignoreUnknown = true)
 public class Calculate extends Message
 {
+  private Integer number;
+
   @Override
   public Type getType()
   {
index a20076f..ff020e8 100644 (file)
@@ -3,7 +3,7 @@ package de.juplo.messages;
 
 public abstract class Message
 {
-  public enum Type {ADD, CALC}
+  public enum Type { ADD, CALC }
 
   public abstract Type getType();
 }
index 6092706..d226feb 100644 (file)
@@ -2,28 +2,52 @@ package de.juplo.messages;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import org.junit.jupiter.api.Assertions;
+import lombok.extern.slf4j.Slf4j;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
 
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatCode;
 
+
+@Slf4j
 public class MessageTest
 {
   ObjectMapper mapper = new ObjectMapper();
 
   @Test
-  @DisplayName("Deserialize a MessageAddNumber message")
-  public void testDeserializeMessageAddNumber()
+  @DisplayName("Serialization roundtrip for message Add")
+  public void testSerializationAdd() throws JsonProcessingException
+  {
+    Add before = Add.builder().number(66).next(6).build();
+    String json = mapper.writeValueAsString(before);
+    Add after = mapper.readValue(json, Add.class);
+    assertThat(after).isEqualTo(before);
+  }
+
+  @Test
+  @DisplayName("Serialization roundtrip for message Calculate")
+  public void testSerializationCalc() throws JsonProcessingException
+  {
+    Calculate before = Calculate.builder().number(66).build();
+    String json = mapper.writeValueAsString(before);
+    Calculate after = mapper.readValue(json, Calculate.class);
+    assertThat(after).isEqualTo(before);
+  }
+
+  @Test
+  @DisplayName("Deserialization of an Add message with additional fields does not throw an exception")
+  public void testDeserializeAdd()
   {
-    Assertions.assertDoesNotThrow(() -> mapper.readValue("{\"next\":42}", Add.class));
-    Assertions.assertDoesNotThrow(() -> mapper.readValue("{\"number\":666,\"next\":42}", Add.class));
+    assertThatCode(() -> mapper.readValue("{\"next\":42,\"ignore\":\"foo\"}", Add.class)).doesNotThrowAnyException();
+    assertThatCode(() -> mapper.readValue("{\"number\":666,\"next\":42,\"ignore\":\"foo\"}", Add.class)).doesNotThrowAnyException();
   }
 
   @Test
-  @DisplayName("Deserialize a MessageCalculateSum message")
-  public void testDeserializeMessageCalculateSum() throws JsonProcessingException
+  @DisplayName("Deserialization of a Calculate message with additional fields does not throw an exception")
+  public void testDeserializeCalculate()
   {
-    Assertions.assertDoesNotThrow(() -> mapper.readValue("{}", Calculate.class));
-    Assertions.assertDoesNotThrow(() -> mapper.readValue("{\"number\":666}", Calculate.class));
+    assertThatCode(() -> mapper.readValue("{\"ignore\":\"foo\"}", Calculate.class)).doesNotThrowAnyException();
+    assertThatCode(() -> mapper.readValue("{\"number\":666,\"ignore\":\"foo\"}", Calculate.class)).doesNotThrowAnyException();
   }
 }