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();
}
}