package be.swsb.fiazard.util.representation; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.SerializerProvider; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.io.IOException; import java.time.LocalDateTime; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class LocalDateTimeSerializerDeserializerTest { @Mock private DeserializationContext contextMock; @Mock private JsonParser jsonParserMock; @Mock private SerializerProvider serializerProviderMock; private LocalDateTimeDeserializer deserializer = new LocalDateTimeDeserializer(); private LocalDateTimeSerializer serializer = new LocalDateTimeSerializer(); @Test public void serializeDeserializeReturnsSameLocalDateTime() throws Exception { JsonGenerator jsonGeneratorMock = mock(JsonGenerator.class); LocalDateTime now = LocalDateTime.now(); serializer.serialize(now, jsonGeneratorMock, serializerProviderMock); String serializedLocalDateTime = getStringWrittenToJson(jsonGeneratorMock); when(jsonParserMock.getValueAsString()).thenReturn(serializedLocalDateTime); LocalDateTime deserializedLocalDateTime = deserializer.deserialize(jsonParserMock, contextMock); assertThat(deserializedLocalDateTime).isEqualTo(now); } private String getStringWrittenToJson(JsonGenerator jsonGeneratorMock) throws IOException { ArgumentCaptor<String> stringCapturer = ArgumentCaptor.forClass(String.class); verify(jsonGeneratorMock).writeString(stringCapturer.capture()); return stringCapturer.getValue(); } }