diff --git a/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java b/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java index d5f6c9ef528895e290290279889cb2fbb464c3e0..81826cff9dccf04d8b16040f00f1d8c4f967e8a0 100644 --- a/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java +++ b/common/src/main/java/de/ozgcloud/eingang/common/formdata/Antragsteller.java @@ -33,6 +33,7 @@ import lombok.Getter; public class Antragsteller { private String anrede; + private String firmaName; private String vorname; private String nachname; private String geburtsname; diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java index e4a8eef66057c9131e5250dc8c723c88cb68288d..b14de31089f4ccebf47c253821ce0a67856e84eb 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/AntragstellerTestFactory.java @@ -30,6 +30,7 @@ public class AntragstellerTestFactory { public static final String ANREDE = "Herr"; + public static final String FIRMA_NAME = "Firma X"; public static final String GEBIET_BEZEICHNUNG_KEY = "GebietBEZEICHNUNG"; public static final String GEBIET_BEZEICHNUNG_VALUE = "Schleswig"; @@ -54,6 +55,18 @@ public class AntragstellerTestFactory { return createBuilder().build(); } + public static Antragsteller createFirm() { + return createFirmBuilder().build(); + } + + public static Antragsteller.AntragstellerBuilder createFirmBuilder() { + return createBuilder() + .firmaName(FIRMA_NAME) + .geburtsname(null) + .geburtsdatum(null) + .geburtsort(null); + } + public static Antragsteller.AntragstellerBuilder createBuilder() { return Antragsteller.builder() .anrede(ANREDE) diff --git a/pom.xml b/pom.xml index 8db513a1133cb989ce56cc64a10d04355165acc7..98b1ecff1c0d8418ad4c151bfe8f68edf624549c 100644 --- a/pom.xml +++ b/pom.xml @@ -54,7 +54,7 @@ </modules> <properties> - <vorgang-manager.version>2.6.0</vorgang-manager.version> + <vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version> <jsoup.version>1.14.3</jsoup.version> <xmlschema.version>2.3.0</xmlschema.version> diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java index b0348cc39fa405d1b7ea467d6d99e2a5ee5db4f0..3909125566b6f297d16633590aa4dcc05644611b 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java @@ -69,6 +69,13 @@ class GrpcEingangMapperTest { } + @Test + void shouldMapFirmaName() { + var mapped = mapper.toAntragsteller(AntragstellerTestFactory.createFirm()); + + assertThat(mapped.getFirmaName()).isEqualTo(AntragstellerTestFactory.FIRMA_NAME); + } + private GrpcAntragsteller toAntragsteller() { return mapper.toAntragsteller(AntragstellerTestFactory.create()); } 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 9486e4838258234346c22e7165179c5641943919..52365312ec979e24d37560740ce9fca8c02db523 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 @@ -27,10 +27,12 @@ import static java.util.Objects.*; import java.util.Collections; import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -57,6 +59,15 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { static final String PLZ = "sh_plz"; static final String ORT = "ort"; + static final String FIELD_FIRMA_NAME = "firma_name"; + static final String FIELD_FIRMA_STRASSE = "firma_strasse"; + static final String FIELD_FIRMA_HAUSNUMMER = "firma_hausnummer"; + static final String FIELD_FIRMA_PLZ = "firma_plz"; + static final String FIELD_FIRMA_STADT = "firma_stadt"; + static final String FIELD_ANSPRECHPARTNER_ANREDE = "firma_ansprechpartner_anrede"; + static final String FIELD_ANSPRECHPARTNER_VORNAME = "firma_ansprechpartner_vorname"; + static final String FIELD_ANSPRECHPARTNER_NACHNAME = "firma_ansprechpartner_nachname"; + @Autowired private AfmAntragstellerHeaderMapper antragstellerHeaderMapper; @@ -90,6 +101,13 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { private Antragsteller.AntragstellerBuilder addAntragstellerData(Antragsteller.AntragstellerBuilder builder, Map<String, Object> 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)) // @@ -103,17 +121,37 @@ class AfmAntragstellerMapper implements AfmEngineBasedMapper { .hausnummer((String) antragstellerMap.get(HAUSNUMMER)) // .plz((String) antragstellerMap.get(PLZ)) // .ort((String) antragstellerMap.get(ORT)) // - .data(getNotMappedData(antragstellerMap)); + .data(getNotMappedData(antragstellerMap, getPrivateFields())); + } + + Antragsteller.AntragstellerBuilder addFirmAntragstellerData(Antragsteller.AntragstellerBuilder builder, + Map<String, Object> 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)) + .data(getNotMappedData(antragstellerMap, getFirmaFields())); + } + + private Map<String, Object> getNotMappedData(Map<String, Object> 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)); } - private Map<String, Object> getNotMappedData(Map<String, Object> antragstellerMap) { - var map = new LinkedHashMap<>(antragstellerMap); - getFields().forEach(map::remove); - return map; + private Set<String> getPrivateFields() { + return Set.of(ANREDE, VORNAME, NACHNAME, GEBURTSNAME, GEBURTSDATUM, GEBURTSORT, EMAIL, TELEFON, STRASSE, HAUSNUMMER, PLZ, ORT); } - private List<String> getFields() { - return List.of(ANREDE, VORNAME, NACHNAME, GEBURTSNAME, GEBURTSDATUM, GEBURTSORT, EMAIL, TELEFON, STRASSE, HAUSNUMMER, PLZ, ORT); + private Set<String> getFirmaFields() { + return Set.of(FIELD_FIRMA_NAME, FIELD_FIRMA_STRASSE, FIELD_FIRMA_HAUSNUMMER, FIELD_FIRMA_PLZ, FIELD_FIRMA_STADT, + FIELD_ANSPRECHPARTNER_ANREDE, FIELD_ANSPRECHPARTNER_VORNAME, FIELD_ANSPRECHPARTNER_NACHNAME, TELEFON, EMAIL); } private Map<String, Object> removeMappedData(Map<String, Object> formDataMap) { diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java index a8d133be63359eca9db5d610c01f4bfd144f1a96..ab351eb8f849b811373de9c7e4f2b95e0d080086 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapper.java @@ -1,5 +1,7 @@ package de.ozgcloud.eingang.semantik.enginebased.formcycle; +import static org.apache.commons.lang3.StringUtils.*; + import java.util.Map; import java.util.Optional; @@ -25,6 +27,7 @@ public class FormcycleAntragstellerMapper implements FormcycleEngineBasedMapper static final String KEY_ADDRESS = "tfAntragstellerAdresse"; static final String KEY_PLZ = "tfAntragstellerPLZ"; static final String KEY_ORT = "tfAntragstellerOrt"; + static final String KEY_FIRMA_NAME = "tfOrgName"; @Override public FormData parseFormData(final FormData formData) { @@ -41,19 +44,26 @@ public class FormcycleAntragstellerMapper implements FormcycleEngineBasedMapper } Antragsteller buildAntragsteller(Map<String, Object> antragstellerData) { - return Antragsteller.builder() + var firmaName = getValue(antragstellerData, KEY_FIRMA_NAME); + var antragstellerBuilder = Antragsteller.builder() + .firmaName(firmaName) .anrede(getValue(antragstellerData, KEY_ANREDE)) .vorname(getValue(antragstellerData, KEY_VORNAME)) .nachname(getValue(antragstellerData, KEY_NACHNAME)) - .geburtsname(getValue(antragstellerData, KEY_GEBURTSNAME)) - .geburtsdatum(getValue(antragstellerData, KEY_GEBURTSDATUM)) - .geburtsort(getValue(antragstellerData, KEY_GEBURTSORT)) .email(getValue(antragstellerData, KEY_EMAIL)) .telefon(getValue(antragstellerData, KEY_TELEFON)) .strasse(getValue(antragstellerData, KEY_ADDRESS)) .plz(getValue(antragstellerData, KEY_PLZ)) - .ort(getValue(antragstellerData, KEY_ORT)) - .build(); + .ort(getValue(antragstellerData, KEY_ORT)); + if (isBlank(firmaName)) { + antragstellerBuilder + .geburtsname(getValue(antragstellerData, KEY_GEBURTSNAME)) + .geburtsdatum(getValue(antragstellerData, KEY_GEBURTSDATUM)) + .geburtsort(getValue(antragstellerData, KEY_GEBURTSORT)); + }else { + antragstellerBuilder.firmaName(firmaName); + } + return antragstellerBuilder.build(); } String getValue(Map<String, Object> formDataMap, String key) { 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 e40b13db45356729cd68b0fec172931b999c4c17..f68df9df3da7a3905ef9a4dc0fdd9a96c112c890 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 @@ -37,11 +37,9 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import de.ozgcloud.eingang.common.formdata.Antragsteller; import de.ozgcloud.eingang.common.formdata.FormData; -import de.ozgcloud.eingang.semantik.enginebased.afm.AfmAntragstellerMapper; class AfmAntragstellerMapperTest { @@ -52,7 +50,7 @@ class AfmAntragstellerMapperTest { private AfmAntragstellerHeaderMapper antragstellerHeaderMapper; private FormData formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap()).build(); - + @DisplayName("Parse form data") @Nested class TestParseFormData { @@ -88,7 +86,8 @@ class AfmAntragstellerMapperTest { @Test @DisplayName("should map antragsteller when key starts with an uppercase letter") void shouldMapAntragstellerUppercase() { - formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE)).build(); + formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE)) + .build(); var parsedFormData = parseFormData(formData); @@ -99,7 +98,8 @@ class AfmAntragstellerMapperTest { @Test @DisplayName("should map only antragsteller key when both present") void shouldMapOnlyOneKey() { - var expectedAntragsteller = AfmAntragstellerTestFactory.createBuilder().anrede("anrede").vorname("firstName").nachname("lastName").build(); + var expectedAntragsteller = AfmAntragstellerTestFactory.createBuilder().anrede("anrede").vorname("firstName").nachname("lastName") + .build(); var parsedFormData = parseFormData(createFormData(expectedAntragsteller)); @@ -109,7 +109,7 @@ class AfmAntragstellerMapperTest { private FormData createFormData(Antragsteller antragsteller) { var formDataMap = AfmAntragstellerTestFactory.createMutableFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE); - var antragstelleMap = AfmAntragstellerTestFactory.createAntragstelleMap( + var antragstelleMap = AfmAntragstellerTestFactory.createPrivateAntragstelleMap( MapEntry.entry(AfmAntragstellerMapper.ANREDE, antragsteller.getAnrede()), MapEntry.entry(AfmAntragstellerMapper.VORNAME, antragsteller.getVorname()), MapEntry.entry(AfmAntragstellerMapper.NACHNAME, antragsteller.getNachname()) @@ -118,9 +118,9 @@ class AfmAntragstellerMapperTest { return FormData.builder().formData(formDataMap).build(); } - @DisplayName("map antragsteller data") + @DisplayName("map private antragsteller data") @Nested - class TestMapAntragstellerData { + class TestMapPrivateAntragstellerData { @Test void shouldMapPostfachId() { @@ -140,7 +140,8 @@ class AfmAntragstellerMapperTest { @BeforeEach void buildFormData() { - var antragstellerMap = AfmAntragstellerTestFactory.createAntragstelleMap(MapEntry.entry(NOT_MAPPED_FIELD, NOT_MAPPED_VALUE)); + var antragstellerMap = AfmAntragstellerTestFactory.createPrivateAntragstelleMap( + MapEntry.entry(NOT_MAPPED_FIELD, NOT_MAPPED_VALUE)); var formDataMap = new HashMap<String, Object>(); formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, antragstellerMap); @@ -176,9 +177,9 @@ class AfmAntragstellerMapperTest { } } - @DisplayName("remove fields") + @DisplayName("remove private fields") @Nested - class TestRemoveFields { + class TestRemovePrivateFields { @Test void shouldRemoveAntragsteller() { @@ -190,7 +191,8 @@ class AfmAntragstellerMapperTest { @Test @DisplayName("should remove Antragsteller when key starts with an uppercase latter") void shouldRemoveAntragstellerUppercase() { - formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE)).build(); + formData = FormData.builder().formData(AfmAntragstellerTestFactory.createFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE)) + .build(); var parsedFormData = parseFormData(formData); @@ -207,12 +209,31 @@ class AfmAntragstellerMapperTest { private FormData createFormData() { var formDataMap = AfmAntragstellerTestFactory.createMutableFormDataMap(AfmAntragstellerMapper.ANTRAGSTELLER_UPPERCASE); - formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, AfmAntragstellerTestFactory.createAntragstelleMap()); + formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, AfmAntragstellerTestFactory.createPrivateAntragstelleMap()); return FormData.builder().formData(formDataMap).build(); } } } + @Nested + class TestMapFirmAntragstellerData { + + @Test + void shouldMapFirmAntragstellerData() { + var parsedFormData = parseFormData(createFormData()); + + assertThat(parsedFormData.getAntragsteller()).usingRecursiveComparison() + .ignoringFields("data") + .isEqualTo(AfmAntragstellerTestFactory.createFirm()); + } + + private FormData createFormData() { + var formDataMap = AfmAntragstellerTestFactory.createFormDataMap(); + formDataMap.put(AfmAntragstellerMapper.ANTRAGSTELLER, AfmAntragstellerTestFactory.createFirmAntragstelleMap()); + return FormData.builder().formData(formDataMap).build(); + } + } + private FormData parseFormData(FormData formData) { return mapper.parseFormData(formData); } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java index b127c5a0d30be66e723c7b1744378b5b613e3043..bcdf3985f30f88c7fe5d1a0d47f669aca86942b6 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAntragstellerTestFactory.java @@ -32,11 +32,11 @@ import java.util.UUID; import org.assertj.core.data.MapEntry; import de.ozgcloud.eingang.common.formdata.Antragsteller; -import de.ozgcloud.eingang.semantik.enginebased.afm.AfmAntragstellerMapper; public class AfmAntragstellerTestFactory { public static final String ANREDE = "Herr"; + public static final String FIRMA_NAME = "Firma X"; public static final String VORNAME = "Max"; public static final String NACHNAME = "Mustermann"; public static final String GEBURTSNAME = "Maxi"; @@ -55,6 +55,15 @@ public class AfmAntragstellerTestFactory { return createBuilder().build(); } + public static Antragsteller createFirm() { + return createBuilder() + .firmaName(FIRMA_NAME) + .geburtsname(null) + .geburtsdatum(null) + .geburtsort(null) + .build(); + } + public static Antragsteller.AntragstellerBuilder createBuilder() { return Antragsteller.builder() .anrede(ANREDE) @@ -77,18 +86,18 @@ public class AfmAntragstellerTestFactory { } public static Map<String, Object> createFormDataMap(String antragstellerKey) { - return Collections.unmodifiableMap(createMutableFormDataMap(antragstellerKey)); + return createMutableFormDataMap(antragstellerKey); } public static Map<String, Object> createMutableFormDataMap(String antragstellerKey) { var map = new HashMap<String, Object>(); - map.put(antragstellerKey, createAntragstelleMap()); + map.put(antragstellerKey, createPrivateAntragstelleMap()); map.put(AfmAntragstellerMapper.POSTFACH_ID, POSTFACH_ID); return map; } @SafeVarargs - public static Map<String, Object> createAntragstelleMap(MapEntry<String, Object>... additionalEntries) { + public static Map<String, Object> createPrivateAntragstelleMap(MapEntry<String, Object>... additionalEntries) { var map = new HashMap<String, Object>(); map.put(AfmAntragstellerMapper.ANREDE, ANREDE); map.put(AfmAntragstellerMapper.VORNAME, VORNAME); @@ -107,4 +116,23 @@ public class AfmAntragstellerTestFactory { return Collections.unmodifiableMap(map); } + + @SafeVarargs + public static Map<String, Object> createFirmAntragstelleMap(MapEntry<String, Object>... additionalEntries) { + var map = new HashMap<String, Object>(); + map.put(AfmAntragstellerMapper.FIELD_FIRMA_NAME, FIRMA_NAME); + map.put(AfmAntragstellerMapper.FIELD_ANSPRECHPARTNER_ANREDE, ANREDE); + map.put(AfmAntragstellerMapper.FIELD_ANSPRECHPARTNER_VORNAME, VORNAME); + map.put(AfmAntragstellerMapper.FIELD_ANSPRECHPARTNER_NACHNAME, NACHNAME); + map.put(AfmAntragstellerMapper.EMAIL, EMAIL); + map.put(AfmAntragstellerMapper.TELEFON, TELEFON); + map.put(AfmAntragstellerMapper.FIELD_FIRMA_STRASSE, STRASSE); + map.put(AfmAntragstellerMapper.FIELD_FIRMA_HAUSNUMMER, HAUSNUMMER); + map.put(AfmAntragstellerMapper.FIELD_FIRMA_PLZ, PLZ); + map.put(AfmAntragstellerMapper.FIELD_FIRMA_STADT, ORT); + + Arrays.stream(additionalEntries).forEach(entry -> map.put(entry.getKey(), entry.getValue())); + + return Collections.unmodifiableMap(map); + } } \ No newline at end of file diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java index ecce809dfc165ebda375212fcc659021b9f8ea76..4bcbc1cba5239aeffb34b319eb5d0d81b54bc5a7 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formcycle/FormcycleAntragstellerMapperTest.java @@ -7,8 +7,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -28,23 +27,9 @@ class FormcycleAntragstellerMapperTest { private static final String VALUE_KEY = "value"; private static final String LABEL_KEY = "label"; - private static final Map<String, Object> ANTRAGSTELLER_DATA = new HashMap<>(); - private static final Map<String, Object> ANTRAGSTELLER_MAP = Map.of("fsBKAllDaten", Map.of(VALUE_KEY, ANTRAGSTELLER_DATA)); - - @BeforeAll - static void fillAntragstellerData() { - ANTRAGSTELLER_DATA.put("tfAntragstellerAnrede", Map.of(VALUE_KEY, AntragstellerTestFactory.ANREDE, LABEL_KEY, "Anrede")); - ANTRAGSTELLER_DATA.put("tfAntragstellerVorname", Map.of(LABEL_KEY, "Vorname", VALUE_KEY, AntragstellerTestFactory.VORNAME)); - ANTRAGSTELLER_DATA.put("tfAntragstellerName", Map.of(VALUE_KEY, AntragstellerTestFactory.NACHNAME, LABEL_KEY, "Nachname")); - ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsname", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSNAME, LABEL_KEY, "Geburtsname")); - ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsdatum", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSDATUM, LABEL_KEY, "Geburtsdatum")); - ANTRAGSTELLER_DATA.put("tfAntragstellerGeburtsort", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSORT, LABEL_KEY, "Geburtsort")); - ANTRAGSTELLER_DATA.put("tfAntragstellerEmail", Map.of(VALUE_KEY, AntragstellerTestFactory.EMAIL, LABEL_KEY, "E-Mail")); - ANTRAGSTELLER_DATA.put("tfAntragstellerTelefon", Map.of(VALUE_KEY, AntragstellerTestFactory.TELEFON, LABEL_KEY, "Telefon")); - ANTRAGSTELLER_DATA.put("tfAntragstellerAdresse", Map.of(LABEL_KEY, "Adresse", VALUE_KEY, AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER)); - ANTRAGSTELLER_DATA.put("tfAntragstellerPLZ", Map.of(LABEL_KEY, "PLZ", VALUE_KEY, AntragstellerTestFactory.PLZ)); - ANTRAGSTELLER_DATA.put("tfAntragstellerOrt", Map.of(LABEL_KEY, "Ort", VALUE_KEY, AntragstellerTestFactory.ORT)); - } + + private Map<String, Object> antragstellerData = new HashMap<>(); + private Map<String, Object> antragstellerMap = Map.of("fsBKAllDaten", Map.of(VALUE_KEY, antragstellerData)); @Nested class TestParseFormData { @@ -56,16 +41,16 @@ class FormcycleAntragstellerMapperTest { void shouldCallGetAntragsteller() { mapper.parseFormData(buildFormData()); - verify(mapper).getAntragstellerData(ANTRAGSTELLER_MAP); + verify(mapper).getAntragstellerData(antragstellerMap); } @Test void shouldCallBuildAntragsteller() { - doReturn(Optional.of(ANTRAGSTELLER_DATA)).when(mapper).getAntragstellerData(anyMap()); + doReturn(Optional.of(antragstellerData)).when(mapper).getAntragstellerData(anyMap()); mapper.parseFormData(buildFormData()); - verify(mapper).buildAntragsteller(ANTRAGSTELLER_DATA); + verify(mapper).buildAntragsteller(antragstellerData); } @Test @@ -87,7 +72,7 @@ class FormcycleAntragstellerMapperTest { } FormData buildFormData() { - return FormData.builder().formData(ANTRAGSTELLER_MAP).build(); + return FormData.builder().formData(antragstellerMap).build(); } } @@ -105,9 +90,9 @@ class FormcycleAntragstellerMapperTest { @Test void shouldReturnAntragstellerData() { - var result = mapper.getAntragstellerData(ANTRAGSTELLER_MAP); + var result = mapper.getAntragstellerData(antragstellerMap); - assertThat(result).contains(ANTRAGSTELLER_DATA); + assertThat(result).contains(antragstellerData); } } @@ -116,6 +101,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetAnrede() { + antragstellerData.put("tfAntragstellerAnrede", Map.of(VALUE_KEY, AntragstellerTestFactory.ANREDE, LABEL_KEY, "Anrede")); + var result = buildAntragsteller(); assertThat(result.getAnrede()).isEqualTo(AntragstellerTestFactory.ANREDE); @@ -123,6 +110,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetVorname() { + antragstellerData.put("tfAntragstellerVorname", Map.of(LABEL_KEY, "Vorname", VALUE_KEY, AntragstellerTestFactory.VORNAME)); + var result = buildAntragsteller(); assertThat(result.getVorname()).isEqualTo(AntragstellerTestFactory.VORNAME); @@ -130,6 +119,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetNachname() { + antragstellerData.put("tfAntragstellerName", Map.of(VALUE_KEY, AntragstellerTestFactory.NACHNAME, LABEL_KEY, "Nachname")); + var result = buildAntragsteller(); assertThat(result.getNachname()).isEqualTo(AntragstellerTestFactory.NACHNAME); @@ -137,6 +128,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetGeburtsname() { + antragstellerData.put("tfAntragstellerGeburtsname", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSNAME, LABEL_KEY, "Geburtsname")); + var result = buildAntragsteller(); assertThat(result.getGeburtsname()).isEqualTo(AntragstellerTestFactory.GEBURTSNAME); @@ -144,6 +137,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetGeburtsdatum() { + antragstellerData.put("tfAntragstellerGeburtsdatum", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSDATUM, LABEL_KEY, "Geburtsdatum")); + var result = buildAntragsteller(); assertThat(result.getGeburtsdatum()).isEqualTo(AntragstellerTestFactory.GEBURTSDATUM); @@ -151,6 +146,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetGeburtsort() { + antragstellerData.put("tfAntragstellerGeburtsort", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSORT, LABEL_KEY, "Geburtsort")); + var result = buildAntragsteller(); assertThat(result.getGeburtsort()).isEqualTo(AntragstellerTestFactory.GEBURTSORT); @@ -158,6 +155,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetEmail() { + antragstellerData.put("tfAntragstellerEmail", Map.of(VALUE_KEY, AntragstellerTestFactory.EMAIL, LABEL_KEY, "E-Mail")); + var result = buildAntragsteller(); assertThat(result.getEmail()).isEqualTo(AntragstellerTestFactory.EMAIL); @@ -165,6 +164,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetTelefon() { + antragstellerData.put("tfAntragstellerTelefon", Map.of(VALUE_KEY, AntragstellerTestFactory.TELEFON, LABEL_KEY, "Telefon")); + var result = buildAntragsteller(); assertThat(result.getTelefon()).isEqualTo(AntragstellerTestFactory.TELEFON); @@ -172,6 +173,9 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetAdresse() { + antragstellerData.put("tfAntragstellerAdresse", + Map.of(LABEL_KEY, "Adresse", VALUE_KEY, AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER)); + var result = buildAntragsteller(); assertThat(result.getStrasse()).isEqualTo(AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER); @@ -179,6 +183,8 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetPlz() { + antragstellerData.put("tfAntragstellerPLZ", Map.of(LABEL_KEY, "PLZ", VALUE_KEY, AntragstellerTestFactory.PLZ)); + var result = buildAntragsteller(); assertThat(result.getPlz()).isEqualTo(AntragstellerTestFactory.PLZ); @@ -186,13 +192,48 @@ class FormcycleAntragstellerMapperTest { @Test void shouldSetOrt() { + antragstellerData.put("tfAntragstellerOrt", Map.of(LABEL_KEY, "Ort", VALUE_KEY, AntragstellerTestFactory.ORT)); + var result = buildAntragsteller(); assertThat(result.getOrt()).isEqualTo(AntragstellerTestFactory.ORT); } Antragsteller buildAntragsteller() { - return mapper.buildAntragsteller(ANTRAGSTELLER_DATA); + return mapper.buildAntragsteller(antragstellerData); + } + } + + @Nested + class TestBuildFirmaAntragsteller { + + @BeforeEach + void fillAntragstellerData() { + antragstellerData.put("tfOrgName", Map.of(VALUE_KEY, AntragstellerTestFactory.FIRMA_NAME, LABEL_KEY, "Firmenname")); + antragstellerData.put("tfAntragstellerAnrede", Map.of(VALUE_KEY, AntragstellerTestFactory.ANREDE, LABEL_KEY, "Anrede")); + antragstellerData.put("tfAntragstellerVorname", Map.of(LABEL_KEY, "Vorname", VALUE_KEY, AntragstellerTestFactory.VORNAME)); + antragstellerData.put("tfAntragstellerName", Map.of(VALUE_KEY, AntragstellerTestFactory.NACHNAME, LABEL_KEY, "Nachname")); + antragstellerData.put("tfAntragstellerGeburtsname", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSNAME, LABEL_KEY, "Geburtsname")); + antragstellerData.put("tfAntragstellerGeburtsdatum", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSDATUM, LABEL_KEY, "Geburtsdatum")); + antragstellerData.put("tfAntragstellerGeburtsort", Map.of(VALUE_KEY, AntragstellerTestFactory.GEBURTSORT, LABEL_KEY, "Geburtsort")); + antragstellerData.put("tfAntragstellerEmail", Map.of(VALUE_KEY, AntragstellerTestFactory.EMAIL, LABEL_KEY, "E-Mail")); + antragstellerData.put("tfAntragstellerTelefon", Map.of(VALUE_KEY, AntragstellerTestFactory.TELEFON, LABEL_KEY, "Telefon")); + antragstellerData.put("tfAntragstellerAdresse", + Map.of(LABEL_KEY, "Adresse", VALUE_KEY, AntragstellerTestFactory.STRASSE + " " + AntragstellerTestFactory.HAUSNUMMER)); + antragstellerData.put("tfAntragstellerPLZ", Map.of(LABEL_KEY, "PLZ", VALUE_KEY, AntragstellerTestFactory.PLZ)); + antragstellerData.put("tfAntragstellerOrt", Map.of(LABEL_KEY, "Ort", VALUE_KEY, AntragstellerTestFactory.ORT)); } + + @Test + void shouldMapFirmaData() { + var expectedAntragsteller = AntragstellerTestFactory.createFirmBuilder() + .strasse("%s %s".formatted(AntragstellerTestFactory.STRASSE, AntragstellerTestFactory.HAUSNUMMER)) + .hausnummer(null).postfachId(null).data(null).build(); + + var result = mapper.buildAntragsteller(antragstellerData); + + assertThat(result).usingRecursiveComparison().isEqualTo(expectedAntragsteller); + } + } } \ No newline at end of file diff --git a/src/main/helm/README.md b/src/main/helm/README.md index a7d492581da2e82281cec70ff9843a7dd10c84d5..2de2b441e29ccb265bc1114b5e12dfcc4efa825f 100644 --- a/src/main/helm/README.md +++ b/src/main/helm/README.md @@ -91,3 +91,10 @@ env: - name: ... value: ... ``` + +```yaml +env: + customList: + key_1: value_1 + key_2: value_2 +``` \ No newline at end of file diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl index e0ff7ea44b451f802f623ad7b1f1e3cd47f829ce..a66961e50f3068d6dbd68be3bc801d1860195c3a 100644 --- a/src/main/helm/templates/_helpers.tpl +++ b/src/main/helm/templates/_helpers.tpl @@ -88,4 +88,22 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{- else if eq (.Values.image).name "enterprise-adapter" }} {{- printf "enterprise-adapter-service-account" }} {{- end }} +{{- end -}} + +{{- define "app.getCustomList" -}} +{{- with (.Values.env).customList -}} +{{- if kindIs "map" . -}} +{{ include "app.dictToList" . }} +{{- else if kindIs "slice" . -}} +{{ . | toYaml }} +{{- end -}} +{{- end -}} +{{- end -}} + +{{- define "app.dictToList" -}} +{{- $customList := list -}} +{{- range $key, $value := . -}} +{{- $customList = append $customList (dict "name" $key "value" $value) }} +{{- end -}} +{{- $customList | toYaml -}} {{- end -}} \ No newline at end of file diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index 89c0a9277df86d7042b64ea75e4c2213e8a21331..c7e9bcd8833a52f0e9f1bd7d747ccaadcaf971f3 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -81,8 +81,8 @@ spec: - name: grpc_client_vorgang-manager-{{ (.Values.routing).targetVorgangManagerName}}_negotiationType value: {{ (.Values.routing).negotiationType | default "PLAINTEXT" }} {{- end }} - {{- with (.Values.env).customList }} -{{ toYaml . | indent 8 }} + {{- with include "app.getCustomList" . }} +{{ . | indent 8 }} {{- end }} image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}" imagePullPolicy: Always diff --git a/src/main/helm/values.yaml b/src/main/helm/values.yaml index 11fdeb4ae386e81f51da0db2f35833333c0079f8..118009532b1262af86efb421e2108e41dae7775c 100644 --- a/src/main/helm/values.yaml +++ b/src/main/helm/values.yaml @@ -29,18 +29,6 @@ image: name: intelliform-adapter # [default: intelliform-adapter] tag: latest # [default: latest] -# env: -# overrideSpringProfiles: "oc,prod" - # customList: # add name value pair for additional environments - # - name: Dinge - # value: true -#resources: -# limits: -# cpu: 1 # [default: 1] -# memory: 1200Mi # [default: 1200Mi] -# requests: -# cpu: 100m # [default: 100m] -# memory: 250Mi # [default: 250Mi] ingress: enabled: true diff --git a/src/test/helm/deployment_env_customList_test.yaml b/src/test/helm/deployment_env_customList_test.yaml index 16022898f61af3474411ceff275c470d1feed81a..32e81b53357cbab961e85421719a7cb5b274e5e0 100644 --- a/src/test/helm/deployment_env_customList_test.yaml +++ b/src/test/helm/deployment_env_customList_test.yaml @@ -29,17 +29,40 @@ set: ozgcloud.environment: test imagePullSecret: image-pull-secret tests: - - it: check customList + - it: check customList as list set: env.customList: - name: my_test_environment_name value: "A test value" + - name: test_environment + value: "B test value" asserts: - contains: path: spec.template.spec.containers[0].env content: name: my_test_environment_name value: "A test value" + - contains: + path: spec.template.spec.containers[0].env + content: + name: test_environment + value: "B test value" + - it: check customList as dict + set: + env.customList: + my_test_environment_name: "A test value" + test_environment: "B test value" + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: my_test_environment_name + value: "A test value" + - contains: + path: spec.template.spec.containers[0].env + content: + name: test_environment + value: "B test value" - it: check customList test value is not set by default asserts: - notContains: diff --git a/xta-adapter/src/main/helm/templates/network_policy.yaml b/xta-adapter/src/main/helm/templates/network_policy.yaml index f8261b0885fd73688689a3f6fb873025e1ba0bde..b65e30f07ac0bc4277370f0879bc71c2c9c8adb5 100644 --- a/xta-adapter/src/main/helm/templates/network_policy.yaml +++ b/xta-adapter/src/main/helm/templates/network_policy.yaml @@ -66,7 +66,10 @@ spec: protocol: TCP - port: 9000 protocol: TCP -{{- with (.Values.networkPolicy).additionalEgressConfig }} +{{- with (.Values.networkPolicy).additionalEgressConfigLocal }} +{{ toYaml . | indent 2 }} +{{- end }} +{{- with (.Values.networkPolicy).additionalEgressConfigGlobal }} {{ toYaml . | indent 2 }} {{- end }} diff --git a/xta-adapter/src/test/helm/network_policy_test.yaml b/xta-adapter/src/test/helm/network_policy_test.yaml index 62eac6b1ad08aca179db7207cfd4071d92bc219e..7e725ee8a94e63b8a7156aa15cfad027b7d45575 100644 --- a/xta-adapter/src/test/helm/network_policy_test.yaml +++ b/xta-adapter/src/test/helm/network_policy_test.yaml @@ -89,12 +89,28 @@ tests: - port: 9000 protocol: TCP - - it: add egress rules by values + - it: add egress rules by values local set: networkPolicy: ssoPublicIp: 51.89.117.53/32 dnsServerNamespace: test-dns-namespace - additionalEgressConfig: + additionalEgressConfigLocal: + - to: + - ipBlock: + cidr: 1.2.3.4/32 + asserts: + - contains: + path: spec.egress + content: + to: + - ipBlock: + cidr: 1.2.3.4/32 + - it: add egress rules by values global + set: + networkPolicy: + ssoPublicIp: 51.89.117.53/32 + dnsServerNamespace: test-dns-namespace + additionalEgressConfigGlobal: - to: - ipBlock: cidr: 1.2.3.4/32