diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java index 52365312ec979e24d37560740ce9fca8c02db523..3c5da83ff3f9907a58d51bbae4f70614dcac721c 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapper.java @@ -92,55 +92,66 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { return (String) formDataMap.get(POSTFACH_ID); } - private Optional<Map<String, Object>> getAntragstellerMap(Map<String, Object> formDataMap) { + private Optional<Map<String, String>> getAntragstellerMap(Map<String, Object> formDataMap) { return Optional.ofNullable(formDataMap.get(ANTRAGSTELLER)) .or(() -> Optional.ofNullable(formDataMap.get(ANTRAGSTELLER_UPPERCASE))) .map(Map.class::cast) - .map(LinkedHashMap<String, Object>::new); + .map(this::mapValuesToString) + .map(LinkedHashMap::new); + } + + private Map<String, String> mapValuesToString(Map<String, Object> map) { + return map.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> Optional.ofNullable(entry.getValue()) + .map(Object::toString) + .orElse("") + )); } private Antragsteller.AntragstellerBuilder addAntragstellerData(Antragsteller.AntragstellerBuilder builder, - Map<String, Object> antragstellerMap) { + Map<String, String> antragstellerMap) { return isNull(antragstellerMap.get(FIELD_FIRMA_NAME)) ? addPrivateAntragstellerData(builder, antragstellerMap) : addFirmAntragstellerData(builder, antragstellerMap); } private Antragsteller.AntragstellerBuilder addPrivateAntragstellerData(Antragsteller.AntragstellerBuilder builder, - Map<String, Object> antragstellerMap) { - return builder // - .anrede((String) antragstellerMap.get(ANREDE)) // - .vorname((String) antragstellerMap.get(VORNAME)) // - .nachname((String) antragstellerMap.get(NACHNAME)) // - .geburtsname((String) antragstellerMap.get(GEBURTSNAME)) // - .geburtsdatum((String) antragstellerMap.get(GEBURTSDATUM)) // - .geburtsort((String) antragstellerMap.get(GEBURTSORT)) // - .email((String) antragstellerMap.get(EMAIL)) // - .telefon((String) antragstellerMap.get(TELEFON)) // - .strasse((String) antragstellerMap.get(STRASSE)) // - .hausnummer((String) antragstellerMap.get(HAUSNUMMER)) // - .plz((String) antragstellerMap.get(PLZ)) // - .ort((String) antragstellerMap.get(ORT)) // + Map<String, String> antragstellerMap) { + return builder + .anrede(antragstellerMap.get(ANREDE)) + .vorname(antragstellerMap.get(VORNAME)) + .nachname(antragstellerMap.get(NACHNAME)) + .geburtsname(antragstellerMap.get(GEBURTSNAME)) + .geburtsdatum(antragstellerMap.get(GEBURTSDATUM)) + .geburtsort(antragstellerMap.get(GEBURTSORT)) + .email(antragstellerMap.get(EMAIL)) + .telefon(antragstellerMap.get(TELEFON)) + .strasse(antragstellerMap.get(STRASSE)) + .hausnummer(antragstellerMap.get(HAUSNUMMER)) + .plz(antragstellerMap.get(PLZ)) + .ort(MapUtils.getString(antragstellerMap, ORT)) .data(getNotMappedData(antragstellerMap, getPrivateFields())); } Antragsteller.AntragstellerBuilder addFirmAntragstellerData(Antragsteller.AntragstellerBuilder builder, - Map<String, Object> antragstellerMap) { + Map<String, String> antragstellerMap) { return builder - .firmaName(MapUtils.getString(antragstellerMap, FIELD_FIRMA_NAME)) - .strasse(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STRASSE)) - .hausnummer(MapUtils.getString(antragstellerMap, FIELD_FIRMA_HAUSNUMMER)) - .plz(MapUtils.getString(antragstellerMap, FIELD_FIRMA_PLZ)) - .ort(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STADT)) - .anrede(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_ANREDE)) - .vorname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_VORNAME)) - .nachname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_NACHNAME)) - .telefon(MapUtils.getString(antragstellerMap, TELEFON)) - .email(MapUtils.getString(antragstellerMap, EMAIL)) + .firmaName(antragstellerMap.get(FIELD_FIRMA_NAME)) + .strasse(antragstellerMap.get(FIELD_FIRMA_STRASSE)) + .hausnummer(antragstellerMap.get(FIELD_FIRMA_HAUSNUMMER)) + .plz(antragstellerMap.get(FIELD_FIRMA_PLZ)) + .ort(antragstellerMap.get(FIELD_FIRMA_STADT)) + .anrede(antragstellerMap.get(FIELD_ANSPRECHPARTNER_ANREDE)) + .vorname(antragstellerMap.get(FIELD_ANSPRECHPARTNER_VORNAME)) + .nachname(antragstellerMap.get(FIELD_ANSPRECHPARTNER_NACHNAME)) + .telefon(antragstellerMap.get(TELEFON)) + .email(antragstellerMap.get(EMAIL)) .data(getNotMappedData(antragstellerMap, getFirmaFields())); } - private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap, Set<String> mappedFields) { + private Map<String, Object> getNotMappedData(Map<String, String> antragstellerMap, Set<String> mappedFields) { return antragstellerMap.entrySet().stream().filter(entry -> !mappedFields.contains(entry.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (key1, key2) -> key1, LinkedHashMap::new)); } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java index f68df9df3da7a3905ef9a4dc0fdd9a96c112c890..9d3e0a47f8c595905cf0496896c765e2902a0332 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerMapperTest.java @@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.util.HashMap; +import java.util.List; import java.util.UUID; import org.assertj.core.data.MapEntry; @@ -118,6 +119,7 @@ class AfmAntragstellerMapperTest { return FormData.builder().formData(formDataMap).build(); } + @DisplayName("map private antragsteller data") @Nested class TestMapPrivateAntragstellerData { @@ -129,6 +131,46 @@ class AfmAntragstellerMapperTest { assertThat(parsedFormData.getAntragsteller().getPostfachId()).isEqualTo(AfmAntragstellerTestFactory.POSTFACH_ID); } + @DisplayName("with invalid data types") + @Nested + class TestWithInvalidDataTypes { + + @DisplayName("should map invalid type to string") + @Test + void shouldMapInvalidTypeToString() { + var formData = createFormDataWithOrt(List.of("listort1", "listort2")); + + var parsedFormData = parseFormData(formData); + + assertThat(parsedFormData.getAntragsteller().getOrt()).isEqualTo("[listort1, listort2]"); + } + } + + @DisplayName("with missing data types") + @Nested + class TestWithMissingDataTypes { + + @DisplayName("should map missing type to empty string") + @Test + void shouldMapMissingTypeToEmptyString() { + var formData = createFormDataWithOrt(null); + + var parsedFormData = parseFormData(formData); + + assertThat(parsedFormData.getAntragsteller().getOrt()).isEmpty(); + } + } + + private FormData createFormDataWithOrt(Object ort) { + var antragstellerMap = AfmAntragstellerTestFactory.createPrivateAntragstelleMap( + MapEntry.entry(AfmAntragstellerMapper.ORT, ort)); + + var formDataMap = new HashMap<String, Object>(); + formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, antragstellerMap); + + return FormData.builder().formData(formDataMap).build(); + } + @DisplayName("with mapped and not mapped value") @Nested class TestWithMappedAndNotMappedValue {