Skip to content
Snippets Groups Projects
Commit 0c2e7d75 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-5808 afm: Map all antragsteller values to string values

Fixes a ClassCastException for antransteller values
parent 0cf52400
No related branches found
No related tags found
No related merge requests found
...@@ -92,55 +92,66 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { ...@@ -92,55 +92,66 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper {
return (String) formDataMap.get(POSTFACH_ID); 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)) return Optional.ofNullable(formDataMap.get(ANTRAGSTELLER))
.or(() -> Optional.ofNullable(formDataMap.get(ANTRAGSTELLER_UPPERCASE))) .or(() -> Optional.ofNullable(formDataMap.get(ANTRAGSTELLER_UPPERCASE)))
.map(Map.class::cast) .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, private Antragsteller.AntragstellerBuilder addAntragstellerData(Antragsteller.AntragstellerBuilder builder,
Map<String, Object> antragstellerMap) { Map<String, String> antragstellerMap) {
return isNull(antragstellerMap.get(FIELD_FIRMA_NAME)) return isNull(antragstellerMap.get(FIELD_FIRMA_NAME))
? addPrivateAntragstellerData(builder, antragstellerMap) ? addPrivateAntragstellerData(builder, antragstellerMap)
: addFirmAntragstellerData(builder, antragstellerMap); : addFirmAntragstellerData(builder, antragstellerMap);
} }
private Antragsteller.AntragstellerBuilder addPrivateAntragstellerData(Antragsteller.AntragstellerBuilder builder, private Antragsteller.AntragstellerBuilder addPrivateAntragstellerData(Antragsteller.AntragstellerBuilder builder,
Map<String, Object> antragstellerMap) { Map<String, String> antragstellerMap) {
return builder // return builder
.anrede((String) antragstellerMap.get(ANREDE)) // .anrede(antragstellerMap.get(ANREDE))
.vorname((String) antragstellerMap.get(VORNAME)) // .vorname(antragstellerMap.get(VORNAME))
.nachname((String) antragstellerMap.get(NACHNAME)) // .nachname(antragstellerMap.get(NACHNAME))
.geburtsname((String) antragstellerMap.get(GEBURTSNAME)) // .geburtsname(antragstellerMap.get(GEBURTSNAME))
.geburtsdatum((String) antragstellerMap.get(GEBURTSDATUM)) // .geburtsdatum(antragstellerMap.get(GEBURTSDATUM))
.geburtsort((String) antragstellerMap.get(GEBURTSORT)) // .geburtsort(antragstellerMap.get(GEBURTSORT))
.email((String) antragstellerMap.get(EMAIL)) // .email(antragstellerMap.get(EMAIL))
.telefon((String) antragstellerMap.get(TELEFON)) // .telefon(antragstellerMap.get(TELEFON))
.strasse((String) antragstellerMap.get(STRASSE)) // .strasse(antragstellerMap.get(STRASSE))
.hausnummer((String) antragstellerMap.get(HAUSNUMMER)) // .hausnummer(antragstellerMap.get(HAUSNUMMER))
.plz((String) antragstellerMap.get(PLZ)) // .plz(antragstellerMap.get(PLZ))
.ort((String) antragstellerMap.get(ORT)) // .ort(MapUtils.getString(antragstellerMap, ORT))
.data(getNotMappedData(antragstellerMap, getPrivateFields())); .data(getNotMappedData(antragstellerMap, getPrivateFields()));
} }
Antragsteller.AntragstellerBuilder addFirmAntragstellerData(Antragsteller.AntragstellerBuilder builder, Antragsteller.AntragstellerBuilder addFirmAntragstellerData(Antragsteller.AntragstellerBuilder builder,
Map<String, Object> antragstellerMap) { Map<String, String> antragstellerMap) {
return builder return builder
.firmaName(MapUtils.getString(antragstellerMap, FIELD_FIRMA_NAME)) .firmaName(antragstellerMap.get(FIELD_FIRMA_NAME))
.strasse(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STRASSE)) .strasse(antragstellerMap.get(FIELD_FIRMA_STRASSE))
.hausnummer(MapUtils.getString(antragstellerMap, FIELD_FIRMA_HAUSNUMMER)) .hausnummer(antragstellerMap.get(FIELD_FIRMA_HAUSNUMMER))
.plz(MapUtils.getString(antragstellerMap, FIELD_FIRMA_PLZ)) .plz(antragstellerMap.get(FIELD_FIRMA_PLZ))
.ort(MapUtils.getString(antragstellerMap, FIELD_FIRMA_STADT)) .ort(antragstellerMap.get(FIELD_FIRMA_STADT))
.anrede(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_ANREDE)) .anrede(antragstellerMap.get(FIELD_ANSPRECHPARTNER_ANREDE))
.vorname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_VORNAME)) .vorname(antragstellerMap.get(FIELD_ANSPRECHPARTNER_VORNAME))
.nachname(MapUtils.getString(antragstellerMap, FIELD_ANSPRECHPARTNER_NACHNAME)) .nachname(antragstellerMap.get(FIELD_ANSPRECHPARTNER_NACHNAME))
.telefon(MapUtils.getString(antragstellerMap, TELEFON)) .telefon(antragstellerMap.get(TELEFON))
.email(MapUtils.getString(antragstellerMap, EMAIL)) .email(antragstellerMap.get(EMAIL))
.data(getNotMappedData(antragstellerMap, getFirmaFields())); .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())) return antragstellerMap.entrySet().stream().filter(entry -> !mappedFields.contains(entry.getKey()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (key1, key2) -> key1, LinkedHashMap::new)); .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (key1, key2) -> key1, LinkedHashMap::new));
} }
......
...@@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.*; ...@@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.UUID; import java.util.UUID;
import org.assertj.core.data.MapEntry; import org.assertj.core.data.MapEntry;
...@@ -118,6 +119,7 @@ class AfmAntragstellerMapperTest { ...@@ -118,6 +119,7 @@ class AfmAntragstellerMapperTest {
return FormData.builder().formData(formDataMap).build(); return FormData.builder().formData(formDataMap).build();
} }
@DisplayName("map private antragsteller data") @DisplayName("map private antragsteller data")
@Nested @Nested
class TestMapPrivateAntragstellerData { class TestMapPrivateAntragstellerData {
...@@ -129,6 +131,46 @@ class AfmAntragstellerMapperTest { ...@@ -129,6 +131,46 @@ class AfmAntragstellerMapperTest {
assertThat(parsedFormData.getAntragsteller().getPostfachId()).isEqualTo(AfmAntragstellerTestFactory.POSTFACH_ID); 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") @DisplayName("with mapped and not mapped value")
@Nested @Nested
class TestWithMappedAndNotMappedValue { class TestWithMappedAndNotMappedValue {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment