|
29 | 29 | import com.basistech.util.LanguageCode; |
30 | 30 | import com.fasterxml.jackson.core.JsonProcessingException; |
31 | 31 | import com.fasterxml.jackson.core.type.TypeReference; |
32 | | -import com.fasterxml.jackson.databind.MapperFeature; |
| 32 | +import com.fasterxml.jackson.databind.JsonNode; |
33 | 33 | import com.fasterxml.jackson.databind.ObjectMapper; |
34 | | -import com.fasterxml.jackson.databind.SerializationFeature; |
35 | 34 | import org.junit.jupiter.api.Test; |
36 | 35 |
|
37 | 36 | import java.util.List; |
|
42 | 41 | class RecordSimilarityRequestTest { |
43 | 42 |
|
44 | 43 | private static final ObjectMapper MAPPER = ApiModelMixinModule.setupObjectMapper(new ObjectMapper()); |
| 44 | + private static final String EXPECTED_JSON = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5,\"scoreIfNull\":0.8}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"houseNumber\":\"123\",\"road\":\"Roadlane Ave\"}}]}}"; |
| 45 | + private static final String EXPECTED_JSON_WITH_PARAMS = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true,\"parameters\":{\"timeDistanceWeight\":\"0.8\",\"stringDistanceWeight\":\"0.1\"}},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"houseNumber\":\"123\",\"road\":\"Roadlane Ave\"}}]}}"; |
| 46 | + private static final String EXPECTED_JSON_WITH_UNIVERSE = "{\"fields\":{\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"addr\":{\"type\":\"rni_address\",\"weight\":0.5}},\"properties\":{\"threshold\":0.7,\"includeExplainInfo\":true,\"parameterUniverse\":\"myParameterUniverse\"},\"records\":{\"left\":[{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"text\":\"Ethan R\",\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\"},\"dob\":\"1993-04-16\",\"addr\":\"123 Roadlane Ave\"},{\"primaryName\":{\"text\":\"Evan R\"},\"dob\":{\"date\":\"1993-04-16\"}}],\"right\":[{\"primaryName\":{\"text\":\"Seth R\",\"language\":\"eng\"},\"dob\":{\"date\":\"1993-04-16\"}},{\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\",\"dob\":{\"date\":\"1993-04-16\"},\"addr\":{\"houseNumber\":\"123\",\"road\":\"Roadlane Ave\"}}]}}"; |
45 | 47 |
|
46 | | - private static final String EXPECTED_JSON = "{\"fields\":{\"addr\":{\"type\":\"rni_address\",\"weight\":0.5},\"dob\":{\"type\":\"rni_date\",\"weight\":0.2},\"dob2\":{\"type\":\"rni_date\",\"weight\":0.1},\"primaryName\":{\"type\":\"rni_name\",\"weight\":0.5}},\"properties\":{\"includeExplainInfo\":true,\"threshold\":0.7},\"records\":{\"left\":[{\"addr\":\"123 Roadlane Ave\",\"dob\":\"1993-04-16\",\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":{\"entityType\":\"PERSON\",\"language\":\"eng\",\"languageOfOrigin\":\"eng\",\"script\":\"Latn\",\"text\":\"Ethan R\"}},{\"dob\":{\"date\":\"1993-04-16\"},\"primaryName\":{\"text\":\"Evan R\"}}],\"right\":[{\"dob\":{\"date\":\"1993-04-16\"},\"primaryName\":{\"language\":\"eng\",\"text\":\"Seth R\"}},{\"addr\":{\"address\":\"123 Roadlane Ave\"},\"dob\":{\"date\":\"1993-04-16\"},\"dob2\":{\"date\":\"1993/04/16\"},\"primaryName\":\"Ivan R\"}]}}"; |
47 | 48 | private static final RecordSimilarityRequest EXPECTED_REQUEST = RecordSimilarityRequest.builder() |
48 | 49 | .fields(Map.of( |
| 50 | + "addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_ADDRESS).weight(0.5).scoreIfNull(0.8).build(), |
| 51 | + "dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.1).scoreIfNull(null).build(), |
| 52 | + "primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_NAME).weight(0.5).build(), |
| 53 | + "dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.2).build())) |
| 54 | + .properties(RecordSimilarityProperties.builder().threshold(0.7).includeExplainInfo(true).build()) |
| 55 | + .records(RecordSimilarityRecords.builder() |
| 56 | + .left( |
| 57 | + List.of( |
| 58 | + Map.of( |
| 59 | + "primaryName", NameField.FieldedName.builder() |
| 60 | + .text("Ethan R").entityType("PERSON") |
| 61 | + .language(LanguageCode.ENGLISH) |
| 62 | + .languageOfOrigin(LanguageCode.ENGLISH) |
| 63 | + .script(ISO15924.Latn) |
| 64 | + .build(), |
| 65 | + "dob", DateField.UnfieldedDate.builder().date("1993-04-16").build(), |
| 66 | + "dob2", DateField.FieldedDate.builder().date("1993/04/16").build(), |
| 67 | + "addr", AddressField.UnfieldedAddress.builder().address("123 Roadlane Ave").build() |
| 68 | + ), |
| 69 | + Map.of( |
| 70 | + "primaryName", NameField.FieldedName.builder().text("Evan R").build(), |
| 71 | + "dob", DateField.FieldedDate.builder().date("1993-04-16").build() |
| 72 | + ) |
| 73 | + ) |
| 74 | + ).right( |
| 75 | + List.of( |
| 76 | + Map.of( |
| 77 | + "primaryName", NameField.FieldedName.builder().text("Seth R").language(LanguageCode.ENGLISH).build(), |
| 78 | + "dob", DateField.FieldedDate.builder().date("1993-04-16").build() |
| 79 | + ), |
| 80 | + Map.of( |
| 81 | + "primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(), |
| 82 | + "dob", DateField.FieldedDate.builder().date("1993-04-16").build(), |
| 83 | + "dob2", DateField.FieldedDate.builder().date("1993/04/16").build(), |
| 84 | + "addr", AddressField.FieldedAddress.builder().houseNumber("123").road("Roadlane Ave").build() |
| 85 | + ) |
| 86 | + ) |
| 87 | + ).build() |
| 88 | + ).build(); |
| 89 | + |
| 90 | + private static final RecordSimilarityRequest EXPECTED_REQUEST_WITH_PARAMS = RecordSimilarityRequest.builder() |
| 91 | + .fields(Map.of( |
| 92 | + "dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.1).build(), |
49 | 93 | "primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_NAME).weight(0.5).build(), |
50 | 94 | "dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.2).build(), |
| 95 | + "addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_ADDRESS).weight(0.5).build())) |
| 96 | + .properties(RecordSimilarityProperties.builder() |
| 97 | + .threshold(0.7) |
| 98 | + .includeExplainInfo(true) |
| 99 | + .parameters( |
| 100 | + Map.of( |
| 101 | + "timeDistanceWeight", "0.8", |
| 102 | + "stringDistanceWeight", "0.1" |
| 103 | + ) |
| 104 | + ) |
| 105 | + .build()) |
| 106 | + .records(RecordSimilarityRecords.builder() |
| 107 | + .left( |
| 108 | + List.of( |
| 109 | + Map.of( |
| 110 | + "primaryName", NameField.FieldedName.builder() |
| 111 | + .text("Ethan R").entityType("PERSON") |
| 112 | + .language(LanguageCode.ENGLISH) |
| 113 | + .languageOfOrigin(LanguageCode.ENGLISH) |
| 114 | + .script(ISO15924.Latn) |
| 115 | + .build(), |
| 116 | + "dob", DateField.UnfieldedDate.builder().date("1993-04-16").build(), |
| 117 | + "dob2", DateField.FieldedDate.builder().date("1993/04/16").build(), |
| 118 | + "addr", AddressField.UnfieldedAddress.builder().address("123 Roadlane Ave").build() |
| 119 | + ), |
| 120 | + Map.of( |
| 121 | + "primaryName", NameField.FieldedName.builder().text("Evan R").build(), |
| 122 | + "dob", DateField.FieldedDate.builder().date("1993-04-16").build() |
| 123 | + ) |
| 124 | + ) |
| 125 | + ).right( |
| 126 | + List.of( |
| 127 | + Map.of( |
| 128 | + "primaryName", NameField.FieldedName.builder().text("Seth R").language(LanguageCode.ENGLISH).build(), |
| 129 | + "dob", DateField.FieldedDate.builder().date("1993-04-16").build() |
| 130 | + ), |
| 131 | + Map.of( |
| 132 | + "primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(), |
| 133 | + "dob", DateField.FieldedDate.builder().date("1993-04-16").build(), |
| 134 | + "dob2", DateField.FieldedDate.builder().date("1993/04/16").build(), |
| 135 | + "addr", AddressField.FieldedAddress.builder().houseNumber("123").road("Roadlane Ave").build() |
| 136 | + ) |
| 137 | + ) |
| 138 | + ).build() |
| 139 | + ).build(); |
| 140 | + |
| 141 | + private static final RecordSimilarityRequest EXPECTED_REQUEST_WITH_UNIVERSE = RecordSimilarityRequest.builder() |
| 142 | + .fields(Map.of( |
| 143 | + "dob", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.2).build(), |
| 144 | + "primaryName", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_NAME).weight(0.5).build(), |
51 | 145 | "dob2", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_DATE).weight(0.1).build(), |
52 | 146 | "addr", RecordSimilarityFieldInfo.builder().type(RecordFieldType.RNI_ADDRESS).weight(0.5).build())) |
53 | | - .properties(RecordSimilarityProperties.builder().threshold(0.7).includeExplainInfo(true).build()) |
| 147 | + .properties(RecordSimilarityProperties.builder() |
| 148 | + .threshold(0.7) |
| 149 | + .includeExplainInfo(true) |
| 150 | + .parameterUniverse("myParameterUniverse") |
| 151 | + .build()) |
54 | 152 | .records(RecordSimilarityRecords.builder() |
55 | 153 | .left( |
56 | 154 | List.of( |
@@ -80,26 +178,37 @@ class RecordSimilarityRequestTest { |
80 | 178 | "primaryName", NameField.UnfieldedName.builder().text("Ivan R").build(), |
81 | 179 | "dob", DateField.FieldedDate.builder().date("1993-04-16").build(), |
82 | 180 | "dob2", DateField.FieldedDate.builder().date("1993/04/16").build(), |
83 | | - "addr", AddressField.FieldedAddress.builder().address("123 Roadlane Ave").build() |
| 181 | + "addr", AddressField.FieldedAddress.builder().houseNumber("123").road("Roadlane Ave").build() |
84 | 182 | ) |
85 | 183 | ) |
86 | 184 | ).build() |
87 | 185 | ).build(); |
88 | 186 |
|
89 | 187 | @Test |
90 | 188 | void testDeserialization() throws JsonProcessingException { |
91 | | - MAPPER.enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY); |
92 | | - MAPPER.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS); |
93 | 189 | final RecordSimilarityRequest request = MAPPER.readValue(EXPECTED_JSON, new TypeReference<>() { }); |
94 | 190 | assertEquals(EXPECTED_REQUEST, request); |
| 191 | + |
| 192 | + final RecordSimilarityRequest requestParams = MAPPER.readValue(EXPECTED_JSON_WITH_PARAMS, new TypeReference<>() { }); |
| 193 | + assertEquals(EXPECTED_REQUEST_WITH_PARAMS, requestParams); |
| 194 | + |
| 195 | + final RecordSimilarityRequest requestUniverse = MAPPER.readValue(EXPECTED_JSON_WITH_UNIVERSE, new TypeReference<>() { }); |
| 196 | + assertEquals(EXPECTED_REQUEST_WITH_UNIVERSE, requestUniverse); |
95 | 197 | } |
96 | 198 |
|
97 | 199 | @Test |
98 | 200 | void testSerialization() throws JsonProcessingException { |
99 | | - // For testing, force ordering |
100 | | - MAPPER.enable(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY); |
101 | | - MAPPER.enable(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS); |
102 | | - assertEquals(EXPECTED_JSON, MAPPER.writeValueAsString(EXPECTED_REQUEST)); |
| 201 | + final JsonNode expectedJson = MAPPER.readTree(EXPECTED_JSON); |
| 202 | + final JsonNode actualJson = MAPPER.valueToTree(EXPECTED_REQUEST); |
| 203 | + assertEquals(expectedJson, actualJson); |
| 204 | + |
| 205 | + final JsonNode expectedParamJson = MAPPER.readTree(EXPECTED_JSON_WITH_PARAMS); |
| 206 | + final JsonNode actualParamJson = MAPPER.valueToTree(EXPECTED_REQUEST_WITH_PARAMS); |
| 207 | + assertEquals(expectedParamJson, actualParamJson); |
| 208 | + |
| 209 | + final JsonNode expectedUniverseJson = MAPPER.readTree(EXPECTED_JSON_WITH_UNIVERSE); |
| 210 | + final JsonNode actualUniverseJson = MAPPER.valueToTree(EXPECTED_REQUEST_WITH_UNIVERSE); |
| 211 | + assertEquals(expectedUniverseJson, actualUniverseJson); |
103 | 212 | } |
104 | 213 |
|
105 | 214 | } |
0 commit comments