|
1 | 1 | package com.taboola.rest.api.internal.serialization; |
2 | 2 |
|
3 | 3 | import com.fasterxml.jackson.annotation.JsonAnySetter; |
| 4 | +import com.fasterxml.jackson.annotation.JsonEnumDefaultValue; |
4 | 5 | import com.fasterxml.jackson.annotation.JsonIgnore; |
5 | 6 | import com.fasterxml.jackson.annotation.JsonProperty; |
6 | 7 | import com.fasterxml.jackson.databind.ObjectMapper; |
7 | 8 | import com.fasterxml.jackson.databind.PropertyNamingStrategy; |
| 9 | +import com.fasterxml.jackson.databind.exc.InvalidFormatException; |
8 | 10 | import com.taboola.rest.api.internal.config.SerializationConfig; |
9 | 11 |
|
10 | 12 | import org.junit.Assert; |
@@ -68,17 +70,82 @@ public void createObjectMapper_serializationConfigWithIgnoreAnySetterAndApiObjec |
68 | 70 | Assert.assertNull("Name is parsed incorrectly", sampleApi.name); |
69 | 71 | } |
70 | 72 |
|
| 73 | + @Test |
| 74 | + public void createObjectMapper_defaultSerializationConfigAndApiObjectHasValidEnum_enumParsedCorrectly() throws IOException { |
| 75 | + SerializationConfig serializationConfig = new SerializationConfig(); |
| 76 | + ObjectMapper objectMapper = SerializationMapperCreator.createObjectMapper(serializationConfig); |
| 77 | + |
| 78 | + SampleApi sampleApi = objectMapper.readValue("{ \"letter\": \"B\" }", SampleApi.class); |
| 79 | + |
| 80 | + Assert.assertEquals("Unknown enum is parsed incorrectly", SampleEnum.B, sampleApi.letter); |
| 81 | + } |
| 82 | + |
| 83 | + @Test |
| 84 | + public void createObjectMapper_defaultSerializationConfigAndApiObjectHasInvalidEnum_defaultValueUsedOnSerialization() throws IOException { |
| 85 | + SerializationConfig serializationConfig = new SerializationConfig(); |
| 86 | + ObjectMapper objectMapper = SerializationMapperCreator.createObjectMapper(serializationConfig); |
| 87 | + |
| 88 | + SampleApi sampleApi = objectMapper.readValue("{ \"letter\": \"D\" }", SampleApi.class); |
| 89 | + |
| 90 | + Assert.assertEquals("Unknown enum is parsed incorrectly", SampleEnum.UNKNOWN, sampleApi.letter); |
| 91 | + } |
| 92 | + |
| 93 | + @Test |
| 94 | + public void createObjectMapper_defaultSerializationConfigAndApiObjectHasEmptyEnumValue_defaultValueUsedOnSerialization() throws IOException { |
| 95 | + SerializationConfig serializationConfig = new SerializationConfig(); |
| 96 | + ObjectMapper objectMapper = SerializationMapperCreator.createObjectMapper(serializationConfig); |
| 97 | + |
| 98 | + SampleApi sampleApi = objectMapper.readValue("{ \"letter\": \"D\" }", SampleApi.class); |
| 99 | + |
| 100 | + Assert.assertEquals("Unknown enum is parsed incorrectly", SampleEnum.UNKNOWN, sampleApi.letter); |
| 101 | + } |
| 102 | + |
| 103 | + @Test |
| 104 | + public void createObjectMapper_serializationConfigWithReadUnknownEnumsDisabledAndApiObjectHasValidEnum_enumParsedCorrectly() throws IOException { |
| 105 | + SerializationConfig serializationConfig = new SerializationConfig().setShouldDisableReadUnknownEnumValuesAsDefaultValue(); |
| 106 | + ObjectMapper objectMapper = SerializationMapperCreator.createObjectMapper(serializationConfig); |
| 107 | + |
| 108 | + SampleApi sampleApi = objectMapper.readValue("{ \"letter\": \"B\" }", SampleApi.class); |
| 109 | + |
| 110 | + Assert.assertEquals("Unknown enum is parsed incorrectly", SampleEnum.B, sampleApi.letter); |
| 111 | + } |
| 112 | + |
| 113 | + @Test(expected = InvalidFormatException.class) |
| 114 | + public void createObjectMapper_serializationConfigWithReadUnknownEnumsDisabledAndApiObjectHasInvalidEnum_InvalidFormatExceptionIsThrown() throws IOException { |
| 115 | + SerializationConfig serializationConfig = new SerializationConfig().setShouldDisableReadUnknownEnumValuesAsDefaultValue(); |
| 116 | + ObjectMapper objectMapper = SerializationMapperCreator.createObjectMapper(serializationConfig); |
| 117 | + |
| 118 | + objectMapper.readValue("{ \"letter\": \"D\" }", SampleApi.class); |
| 119 | + } |
| 120 | + |
| 121 | + @Test(expected = InvalidFormatException.class) |
| 122 | + public void createObjectMapper_serializationConfigWithReadUnknownEnumsDisabledAndApiObjectHasEmptyEnumValue_InvalidFormatExceptionIsThrown() throws IOException { |
| 123 | + SerializationConfig serializationConfig = new SerializationConfig().setShouldDisableReadUnknownEnumValuesAsDefaultValue(); |
| 124 | + ObjectMapper objectMapper = SerializationMapperCreator.createObjectMapper(serializationConfig); |
| 125 | + |
| 126 | + objectMapper.readValue("{ \"letter\": \"\" }", SampleApi.class); |
| 127 | + } |
| 128 | + |
| 129 | + private enum SampleEnum { |
| 130 | + A, B, @JsonEnumDefaultValue UNKNOWN |
| 131 | + } |
| 132 | + |
71 | 133 | private static class SampleApi { |
72 | 134 | @JsonProperty("id") |
73 | 135 | int id; |
74 | 136 |
|
| 137 | + @JsonProperty("letter") |
| 138 | + SampleEnum letter; |
| 139 | + |
75 | 140 | @JsonProperty("name") |
76 | 141 | String name; |
77 | 142 |
|
78 | 143 | @JsonAnySetter |
79 | 144 | public void handlerUnknownSetter(String field, Object value) throws Exception { |
80 | 145 | throw new Exception("unknown field"); |
81 | 146 | } |
| 147 | + |
| 148 | + |
82 | 149 | } |
83 | 150 |
|
84 | 151 | private abstract class SampleMixIn { |
|
0 commit comments