|
15 | 15 | */
|
16 | 16 | package org.springframework.data.redis.serializer;
|
17 | 17 |
|
18 |
| -import static org.assertj.core.api.Assertions.*; |
19 |
| -import static org.mockito.Mockito.*; |
20 |
| -import static org.springframework.test.util.ReflectionTestUtils.*; |
21 |
| -import static org.springframework.util.ObjectUtils.*; |
22 |
| - |
23 |
| -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; |
24 |
| -import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
25 |
| -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; |
26 |
| -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; |
27 |
| -import lombok.Data; |
28 |
| -import lombok.ToString; |
| 18 | +import static org.assertj.core.api.Assertions.assertThat; |
| 19 | +import static org.assertj.core.api.Assertions.assertThatExceptionOfType; |
| 20 | +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; |
| 21 | +import static org.mockito.ArgumentMatchers.eq; |
| 22 | +import static org.mockito.Mockito.any; |
| 23 | +import static org.mockito.Mockito.mock; |
| 24 | +import static org.mockito.Mockito.times; |
| 25 | +import static org.mockito.Mockito.verify; |
| 26 | +import static org.mockito.Mockito.verifyNoInteractions; |
| 27 | +import static org.mockito.Mockito.verifyNoMoreInteractions; |
| 28 | +import static org.mockito.Mockito.when; |
| 29 | +import static org.springframework.test.util.ReflectionTestUtils.getField; |
| 30 | +import static org.springframework.util.ObjectUtils.nullSafeEquals; |
| 31 | +import static org.springframework.util.ObjectUtils.nullSafeHashCode; |
29 | 32 |
|
30 | 33 | import java.io.IOException;
|
31 | 34 | import java.nio.charset.StandardCharsets;
|
32 | 35 | import java.time.LocalDate;
|
33 | 36 | import java.util.Map;
|
34 | 37 | import java.util.UUID;
|
35 | 38 | import java.util.concurrent.atomic.AtomicReference;
|
| 39 | +import java.util.function.Consumer; |
36 | 40 |
|
37 | 41 | import org.junit.jupiter.api.Test;
|
38 | 42 | import org.mockito.Mockito;
|
| 43 | + |
39 | 44 | import org.springframework.beans.BeanUtils;
|
40 | 45 | import org.springframework.cache.support.NullValue;
|
| 46 | +import org.springframework.lang.Nullable; |
41 | 47 |
|
42 | 48 | import com.fasterxml.jackson.annotation.JsonTypeInfo;
|
43 | 49 | import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
|
|
47 | 53 | import com.fasterxml.jackson.databind.JsonMappingException;
|
48 | 54 | import com.fasterxml.jackson.databind.ObjectMapper;
|
49 | 55 | import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping;
|
| 56 | +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; |
| 57 | +import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
50 | 58 | import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
|
51 | 59 | import com.fasterxml.jackson.databind.type.TypeFactory;
|
52 |
| -import org.springframework.lang.Nullable; |
| 60 | +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; |
| 61 | +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; |
| 62 | + |
| 63 | +import lombok.Data; |
| 64 | +import lombok.ToString; |
53 | 65 |
|
54 | 66 | /**
|
55 | 67 | * Unit tests for {@link GenericJackson2JsonRedisSerializer}.
|
56 | 68 | *
|
57 | 69 | * @author Christoph Strobl
|
58 | 70 | * @author Mark Paluch
|
| 71 | + * @author John Blum |
59 | 72 | */
|
60 | 73 | class GenericJackson2JsonRedisSerializerUnitTests {
|
61 | 74 |
|
@@ -407,6 +420,33 @@ void deserializesJavaTimeFrimBytes() {
|
407 | 420 | assertThat(serializer.deserialize(source, WithJsr310.class).myDate).isEqualTo(java.time.LocalDate.of(2022,9,2));
|
408 | 421 | }
|
409 | 422 |
|
| 423 | + @Test // GH-2601 |
| 424 | + public void internalObjectMapperCustomization() { |
| 425 | + |
| 426 | + GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(); |
| 427 | + |
| 428 | + com.fasterxml.jackson.databind.Module mockModule = mock(com.fasterxml.jackson.databind.Module.class); |
| 429 | + |
| 430 | + ObjectMapper mockObjectMapper = mock(ObjectMapper.class); |
| 431 | + |
| 432 | + Consumer<ObjectMapper> configurer = objectMapper -> mockObjectMapper.registerModule(mockModule); |
| 433 | + |
| 434 | + assertThat(serializer.configure(configurer)).isSameAs(serializer); |
| 435 | + |
| 436 | + verify(mockObjectMapper, times(1)).registerModule(eq(mockModule)); |
| 437 | + verifyNoMoreInteractions(mockObjectMapper); |
| 438 | + verifyNoInteractions(mockModule); |
| 439 | + } |
| 440 | + |
| 441 | + @Test // GH-2601 |
| 442 | + public void configureWithNullConsumerThrowsIllegalArgumentException() { |
| 443 | + |
| 444 | + assertThatIllegalArgumentException() |
| 445 | + .isThrownBy(() -> new GenericJackson2JsonRedisSerializer().configure(null)) |
| 446 | + .withMessage("Consumer used to configure and customize ObjectMapper must not be null") |
| 447 | + .withNoCause(); |
| 448 | + } |
| 449 | + |
410 | 450 | private static void serializeAndDeserializeNullValue(GenericJackson2JsonRedisSerializer serializer) {
|
411 | 451 |
|
412 | 452 | NullValue nv = BeanUtils.instantiateClass(NullValue.class);
|
|
0 commit comments