diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..755692329b83d31074fbdbebbfcfbf50f24e120b --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/AntragstellerMapper.java @@ -0,0 +1,47 @@ +package de.ozgcloud.eingang.fim; + +import java.util.Map; + +import org.springframework.stereotype.Component; + +import de.ozgcloud.eingang.common.formdata.Antragsteller; +import de.ozgcloud.eingang.common.formdata.FormData; + +@Component +class AntragstellerMapper { + + static final String ANTRAGSTELLER_KEY = "G17002112"; + + static final String ANSCHRIFT_KEY = "G60000086"; + + static final String VORNAME_KEY = "F60000228"; + static final String NACHNAME_KEY = "F60000227"; + static final String EMAIL_KEY = "F60000242"; + static final String STRASSE_KEY = "F60000243"; + static final String HAUSNUMMER_KEY = "F60000244"; + static final String PLZ_KEY = "F60000246"; + static final String ORT_KEY = "F60000247"; + + public Antragsteller map(FormData formData) { + var antragsteller = getAntragsteller(formData); + var anschrift = getAnschrift(antragsteller); + + return Antragsteller.builder() + .vorname(FimDataUtil.getValue(antragsteller, VORNAME_KEY).orElse(null)) + .nachname(FimDataUtil.getValue(antragsteller, NACHNAME_KEY).orElse(null)) + .email(FimDataUtil.getValue(antragsteller, EMAIL_KEY).orElse(null)) + .strasse(FimDataUtil.getValue(anschrift, STRASSE_KEY).orElse(null)) + .hausnummer(FimDataUtil.getValue(anschrift, HAUSNUMMER_KEY).orElse(null)) + .plz(FimDataUtil.getValue(anschrift, PLZ_KEY).orElse(null)) + .ort(FimDataUtil.getValue(anschrift, ORT_KEY).orElse(null)) + .build(); + } + + private Map<String, Object> getAntragsteller(FormData formData) { + return FimDataUtil.getSubmap(formData.getFormData(), ANTRAGSTELLER_KEY); + } + + private Map<String, Object> getAnschrift(Map<String, Object> antragsteller) { + return FimDataUtil.getSubmap(antragsteller, ANSCHRIFT_KEY); + } +} \ No newline at end of file diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java index 6a6a8ce22f230439482be03567c495388c3a8915..6af43c73ff3f545deb00f7624d90d7a49a113d17 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimBasedAdapter.java @@ -5,7 +5,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; -import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -18,6 +17,7 @@ import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormData.FormDataControl; import de.ozgcloud.eingang.common.formdata.FormData.Representations; import de.ozgcloud.eingang.common.formdata.IncomingFile; +import de.ozgcloud.eingang.fim.common.errorhandling.FimException; import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter; import lombok.NonNull; import lombok.extern.log4j.Log4j2; @@ -88,9 +88,7 @@ public class FimBasedAdapter implements EngineBasedSemantikAdapter { }); } - private Document loadDocument(final IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException { - final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - return builder.parse(incomingFile.getContentStream()); + private Document loadDocument(IncomingFile incomingFile) throws ParserConfigurationException, IOException, SAXException { + return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(incomingFile.getContentStream()); } - } diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java index ca6e3716e8bd54ab9676c7aed71205e0fd294bc1..06bbb98cec5de6c6bf94c13720693059a42ec76f 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimDataUtil.java @@ -1,8 +1,10 @@ package de.ozgcloud.eingang.fim; import java.util.Map; +import java.util.Objects; import java.util.Optional; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.ArrayUtils; import lombok.AccessLevel; @@ -11,30 +13,42 @@ import lombok.NoArgsConstructor; @NoArgsConstructor(access = AccessLevel.PRIVATE) class FimDataUtil { + static final String VALUE_KEY = "value"; + + public static Optional<String> getValue(Map<String, Object> data, String... path) { + var current = FimDataUtil.getSubmap(data, ArrayUtils.subarray(path, 0, path.length - 1)); + if (Objects.isNull(current)) { + return Optional.empty(); + } + var map = FimDataUtil.castToMap(MapUtils.getMap(current, path[path.length - 1])); + return Optional.ofNullable(FimDataUtil.getValueAsString(map)); + } + public static Map<String, Object> getSubmap(Map<String, Object> data, String... path) { var current = data; - for (final String step : path) { - current = map(current, step); + for (var step : path) { + current = FimDataUtil.getValueMapByKey(current, step); } return current; } - public static Optional<String> getValue(final Map<String, Object> data, String... path) { - var current = getSubmap(data, ArrayUtils.subarray(path, 0, path.length - 1)); - if (current == null) { - return Optional.empty(); - } - return Optional.ofNullable((String) ((Map<String, Object>) current.get(path[path.length - 1])).get("value")); + static Map<String, Object> getValueMapByKey(Map<String, Object> obj, String key) { + return Optional.ofNullable(MapUtils.getMap(obj, key)) + .map(FimDataUtil::castToMap) + .map(FimDataUtil::getValueAsMap) + .orElse(null); } - private static Map<String, Object> map(Map<String, Object> obj, String key) { - if (obj == null) { - return null; - } - var data = obj.get(key); - if (!(data instanceof Map)) { - return null; - } - return (Map<String, Object>) ((Map<String, Object>) data).get("value"); + @SuppressWarnings("unchecked") + private static Map<String, Object> castToMap(Map<?, ?> obj) { + return (Map<String, Object>) obj; + } + + private static Map<String, Object> getValueAsMap(Map<String, Object> map) { + return FimDataUtil.castToMap(MapUtils.getMap(map, VALUE_KEY)); + } + + private static String getValueAsString(Map<String, Object> map) { + return (String) map.get(VALUE_KEY); } -} +} \ No newline at end of file diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java index f01ac99cc7eebb80f297041f7edba27bf91b2c23..e754c6eddc5f6c8eea1b5389f6f93861605a2c73 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimEngineBasedMapper.java @@ -2,6 +2,5 @@ package de.ozgcloud.eingang.fim; import de.ozgcloud.eingang.semantik.enginebased.EngineBasedMapper; -public interface FimEngineBasedMapper extends EngineBasedMapper { - -} +interface FimEngineBasedMapper extends EngineBasedMapper { +} \ No newline at end of file diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java deleted file mode 100644 index ec25fcb3101f859b275fc917516449e1a422e95c..0000000000000000000000000000000000000000 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimException.java +++ /dev/null @@ -1,9 +0,0 @@ -package de.ozgcloud.eingang.fim; - -import de.ozgcloud.eingang.common.errorhandling.TechnicalException; - -public class FimException extends TechnicalException { - public FimException(final String ex) { - super(ex); - } -} diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java index 934f3f8af3c717e76bbf894362316ad6b13cc2df..f33502b8735eb94f5cfb06906c3707381620fe78 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeAdapterCatalogue.java @@ -1,5 +1,8 @@ package de.ozgcloud.eingang.fim; import java.util.LinkedHashMap; + class FimSchemeAdapterCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimSchemeAdapter> { + + private static final long serialVersionUID = 1L; } diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java index 5c53c1ae7ce88a6389ad60bff758df73a9ddd8ce..e6dab27a01114ec9e70d4bff1bd9d3e7037da9c9 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeCatalogue.java @@ -3,4 +3,6 @@ package de.ozgcloud.eingang.fim; import java.util.LinkedHashMap; class FimSchemeCatalogue extends LinkedHashMap<FimSchemeIdentifier, FimScheme> { + + private static final long serialVersionUID = 1L; } diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java index 3f2222a484a57be97508f53d78b6f6bd9c074381..b0c2a5db8f5b5b698aea4f722001f9d504723696 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimSchemeIdentifier.java @@ -3,15 +3,15 @@ package de.ozgcloud.eingang.fim; import lombok.EqualsAndHashCode; @EqualsAndHashCode -public class FimSchemeIdentifier { +class FimSchemeIdentifier { - private final String schemeId; + private final String schemeId; - FimSchemeIdentifier(String schemeId) { - this.schemeId = schemeId; - } + FimSchemeIdentifier(String schemeId) { + this.schemeId = schemeId; + } - public static FimSchemeIdentifier fromString(final String s) { - return new FimSchemeIdentifier(s); - } + public static FimSchemeIdentifier fromString(String schemeId) { + return new FimSchemeIdentifier(schemeId); + } } diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java index fc33e27a48a8438d1674b10d258e169f66e4b998..da5ad07ca9c864efcd3fae2d4a48eef7ac354482 100644 --- a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/FimService.java @@ -1,9 +1,10 @@ package de.ozgcloud.eingang.fim; +import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Map; +import java.util.Objects; import java.util.Optional; import javax.xml.parsers.DocumentBuilder; @@ -18,9 +19,9 @@ import org.springframework.stereotype.Service; import org.w3c.dom.Document; import org.xml.sax.SAXException; -import de.ozgcloud.eingang.common.formdata.Antragsteller; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormHeader; +import de.ozgcloud.eingang.fim.common.errorhandling.FimException; import io.micrometer.common.util.StringUtils; import lombok.extern.log4j.Log4j2; @@ -37,6 +38,8 @@ public class FimService { @Autowired private ResourceLoader resourceLoader; + @Autowired + private AntragstellerMapper antragstellerMapper; @Autowired private final List<FimSchemeAdapter> fimSchemeAdapters = new ArrayList<>(); @@ -53,84 +56,91 @@ public class FimService { @PostConstruct private void postConstruct() throws ParserConfigurationException, IOException, SAXException { - for (final FimSchemeAdapter fimSchemeAdapter : fimSchemeAdapters) { - fimSchemeAdapterCatalogue.put(fimSchemeAdapter.getIdentifier(), fimSchemeAdapter); - } - for (final String fimSchemaLocation : fimProperties.getSchemeLocations()) { - final FimScheme fimScheme = loadFimScheme(fimSchemaLocation.trim()); + initFimSchemeAdapterCatalogue(); + initFimSchemeCatalogue(); + + initUnknownScheme(); + } + + private void initFimSchemeAdapterCatalogue() { + fimSchemeAdapters.forEach(adapter -> fimSchemeAdapterCatalogue.put(adapter.getIdentifier(), adapter)); + } + + private void initFimSchemeCatalogue() throws ParserConfigurationException, IOException, SAXException { + for (var fimSchemaLocation : fimProperties.getSchemeLocations()) { + var fimScheme = loadFimScheme(fimSchemaLocation.trim()); fimSchemeCatalogue.put(fimScheme.getIdentifier(), fimScheme); } - final FimScheme unknownScheme = buildUnknownScheme(); + } + + private void initUnknownScheme() throws ParserConfigurationException { + var unknownScheme = createScheme(createDocumentBuilder().newDocument(), UNKNOWN_SCHEME_NAME); fimSchemeCatalogue.put(unknownScheme.getIdentifier(), unknownScheme); } private FimScheme loadFimScheme(final String path) throws ParserConfigurationException, IOException, SAXException { LOG.debug("Load FIM schema: " + path); - final DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - final Document doc = builder.parse(resourceLoader.getResource("classpath:" + path).getFile()); - final String targetNamespace = doc.getDocumentElement().getAttribute("targetNamespace"); - final FimSchemeIdentifier fimSchemeIdentifier = FimSchemeIdentifier.fromString(targetNamespace); - final FimSchemeAdapter fimSchemeAdapter = fimSchemeAdapterCatalogue.getOrDefault(fimSchemeIdentifier, DEFAULT_FIM_SCHEME_ADAPTER); - return new FimScheme(doc, fimSchemeIdentifier, fimSchemeAdapter); + var doc = createDocumentBuilder().parse(getFile(path)); + return createScheme(doc, getTargetNamespace(doc)); + } + + private DocumentBuilder createDocumentBuilder() throws ParserConfigurationException { + return DocumentBuilderFactory.newInstance().newDocumentBuilder(); + } + + private File getFile(String path) throws IOException { + return resourceLoader.getResource("classpath:" + path).getFile(); } - private FimScheme buildUnknownScheme() throws ParserConfigurationException { - final Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); - final FimSchemeIdentifier unknownFimSchemeIdentifier = FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME); - final FimSchemeAdapter fimSchemeAdapter = fimSchemeAdapterCatalogue.get(unknownFimSchemeIdentifier); - return new FimScheme(doc, unknownFimSchemeIdentifier, fimSchemeAdapter); + private String getTargetNamespace(Document doc) { + return doc.getDocumentElement().getAttribute("targetNamespace"); + } + + private FimScheme createScheme(Document doc, String identifierName) { + var identifier = getIdentifierFromString(identifierName); + var adapter = getFimSchemeAdapter(identifier); + return new FimScheme(doc, identifier, adapter); + } + + private FimSchemeIdentifier getIdentifierFromString(String name) { + return FimSchemeIdentifier.fromString(name); } public FormData transformDocument(final Document document, final FormData initialFormData) { - final String[] tagParts = document.getDocumentElement().getTagName().split(":"); - final String namespacePrefix = tagParts.length < 2 ? "" : (":" + tagParts[0]); - final String schemeName = document.getDocumentElement().getAttribute("xmlns" + namespacePrefix); + var schemeName = getSchemeName(document); if (StringUtils.isEmpty(schemeName)) { throw new FimException("XML Document does not provide a scheme"); } - final FimScheme scheme = getSchemeForIdentifier(schemeName); - var formData = fimDataMapper.apply(document, scheme, initialFormData); - + var formData = fimDataMapper.apply(document, getSchemeForIdentifier(schemeName), initialFormData); return formData.toBuilder() .header(initialFormData.getHeader()) - .antragsteller(buildAntragsteller(formData)) + .antragsteller(antragstellerMapper.map(formData)) .header(buildFormHeader(formData)) .build(); } + private String getSchemeName(Document doc) { + var tagParts = doc.getDocumentElement().getTagName().split(":"); + var namespacePrefix = tagParts.length < 2 ? "" : (":" + tagParts[0]); + return doc.getDocumentElement().getAttribute("xmlns" + namespacePrefix); + } + FimScheme getSchemeForIdentifier(String fimSchemaName) { - final FimSchemeIdentifier fimSchemeIdentifier = FimSchemeIdentifier.fromString(fimSchemaName); - final FimScheme fimScheme = fimSchemeCatalogue.get(fimSchemeIdentifier); - if (fimScheme == null) { + var fimScheme = getFimScheme(FimSchemeIdentifier.fromString(fimSchemaName)); + + if (Objects.isNull(fimScheme)) { LOG.error("Cannot find schema for: " + fimSchemaName); - return fimSchemeCatalogue.get(FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME)); + return getFimScheme(FimSchemeIdentifier.fromString(UNKNOWN_SCHEME_NAME)); } return fimScheme; } - // THINKME In Mapper auslagern - private Antragsteller buildAntragsteller(FormData formData) { - var anzeigenErsteller = getAnzeigenErsteller(formData); - var anschrift = getAnschrift(anzeigenErsteller); - - return Antragsteller.builder() - .vorname(FimDataUtil.getValue(anzeigenErsteller, "F60000228").orElse(null)) - .nachname(FimDataUtil.getValue(anzeigenErsteller, "F60000227").orElse(null)) - .email(FimDataUtil.getValue(anzeigenErsteller, "F60000242").orElse(null)) - .strasse(FimDataUtil.getValue(anschrift, "F60000243").orElse(null)) - .hausnummer(FimDataUtil.getValue(anschrift, "F60000244").orElse(null)) - .plz(FimDataUtil.getValue(anschrift, "F60000246").orElse(null)) - .ort(FimDataUtil.getValue(anschrift, "F60000247").orElse(null)) - .build(); - } - - // ASKME AnzeigenErsteller ?! - private Map<String, Object> getAnzeigenErsteller(FormData formData) { - return FimDataUtil.getSubmap(formData.getFormData(), "G17002112"); + private FimScheme getFimScheme(FimSchemeIdentifier identifier) { + return fimSchemeCatalogue.get(identifier); } - private Map<String, Object> getAnschrift(Map<String, Object> anzeigenErsteller) { - return FimDataUtil.getSubmap(anzeigenErsteller, "G60000086"); + private FimSchemeAdapter getFimSchemeAdapter(FimSchemeIdentifier identifier) { + return fimSchemeAdapterCatalogue.getOrDefault(identifier, DEFAULT_FIM_SCHEME_ADAPTER); } private FormHeader buildFormHeader(FormData formData) { diff --git a/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/errorhandling/FimException.java b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/errorhandling/FimException.java new file mode 100644 index 0000000000000000000000000000000000000000..56b6c09343ebdd2783ab7854745a77a87746e1ba --- /dev/null +++ b/fim-adapter/src/main/java/de/ozgcloud/eingang/fim/common/errorhandling/FimException.java @@ -0,0 +1,12 @@ +package de.ozgcloud.eingang.fim.common.errorhandling; + +import de.ozgcloud.eingang.common.errorhandling.TechnicalException; + +public class FimException extends TechnicalException { + + private static final long serialVersionUID = 1L; + + public FimException(final String ex) { + super(ex); + } +} diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..80a4c0b6bb4f59a072b29dcff7375e3ceb252e8f --- /dev/null +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerMapperTest.java @@ -0,0 +1,44 @@ +package de.ozgcloud.eingang.fim; + +import static org.assertj.core.api.Assertions.*; + +import java.util.Collections; +import java.util.Map; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; + +import de.ozgcloud.eingang.common.formdata.Antragsteller; +import de.ozgcloud.eingang.common.formdata.FormData; + +class AntragstellerMapperTest { + + @InjectMocks + private AntragstellerMapper mapper; + + @DisplayName("Map") + @Nested + class TestMap { + + @Test + void shouldMap() { + var antragstellerMap = AntragstellerTestFactory.createAntragstellerAsFimMap(); + var formData = FormData.builder().formData(Map.of(AntragstellerMapper.ANTRAGSTELLER_KEY, antragstellerMap)).build(); + + var antragsteller = mapper.map(formData); + + assertThat(antragsteller).usingRecursiveComparison().isEqualTo(AntragstellerTestFactory.create()); + } + + @Test + void shouldMapEmpty() { + var formData = FormData.builder().formData(Collections.emptyMap()).build(); + + var antragsteller = mapper.map(formData); + + assertThat(antragsteller).usingRecursiveComparison().isEqualTo(Antragsteller.builder().build()); + } + } +} \ No newline at end of file diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..e3e3e8cd45a3eb196ca21e80a4189c8e0ba025dc --- /dev/null +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/AntragstellerTestFactory.java @@ -0,0 +1,54 @@ +package de.ozgcloud.eingang.fim; + +import java.util.HashMap; +import java.util.Map; + +import com.thedeanda.lorem.LoremIpsum; + +import de.ozgcloud.eingang.common.formdata.Antragsteller; + +public class AntragstellerTestFactory { + + public static final String VORNAME = LoremIpsum.getInstance().getWords(1); + public static final String NACHNAME = LoremIpsum.getInstance().getWords(1); + public static final String EMAIL = LoremIpsum.getInstance().getEmail(); + public static final String STRASSE = LoremIpsum.getInstance().getName(); + public static final String HAUSNUMMER = "4a"; + public static final String PLZ = LoremIpsum.getInstance().getZipCode(); + public static final String ORT = LoremIpsum.getInstance().getCity(); + + public static Antragsteller create() { + return createBuilder().build(); + } + + public static Antragsteller.AntragstellerBuilder createBuilder() { + return Antragsteller.builder() + .vorname(VORNAME) + .nachname(NACHNAME) + .email(EMAIL) + .strasse(STRASSE) + .hausnummer(HAUSNUMMER) + .plz(PLZ) + .ort(ORT); + } + + public static Map<String, Object> createAntragstellerAsFimMap() { + var antragsteller = new HashMap<String, Object>(); + antragsteller.put(FimDataUtil.VALUE_KEY, Map.of( + AntragstellerMapper.VORNAME_KEY, Map.of(FimDataUtil.VALUE_KEY, VORNAME), + AntragstellerMapper.NACHNAME_KEY, Map.of(FimDataUtil.VALUE_KEY, NACHNAME), + AntragstellerMapper.EMAIL_KEY, Map.of(FimDataUtil.VALUE_KEY, EMAIL), + AntragstellerMapper.ANSCHRIFT_KEY, createAnschriftAsFimMap())); + return antragsteller; + } + + private static Map<String, Object> createAnschriftAsFimMap() { + var anschrift = new HashMap<String, Object>(); + anschrift.put(FimDataUtil.VALUE_KEY, Map.of( + AntragstellerMapper.STRASSE_KEY, Map.of(FimDataUtil.VALUE_KEY, STRASSE), + AntragstellerMapper.HAUSNUMMER_KEY, Map.of(FimDataUtil.VALUE_KEY, HAUSNUMMER), + AntragstellerMapper.PLZ_KEY, Map.of(FimDataUtil.VALUE_KEY, PLZ), + AntragstellerMapper.ORT_KEY, Map.of(FimDataUtil.VALUE_KEY, ORT))); + return anschrift; + } +} \ No newline at end of file diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataUtilTest.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataUtilTest.java new file mode 100644 index 0000000000000000000000000000000000000000..cb48785bcad73409f81fb3606a8f4e260b745445 --- /dev/null +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimDataUtilTest.java @@ -0,0 +1,45 @@ +package de.ozgcloud.eingang.fim; + +import static org.assertj.core.api.Assertions.*; + +import java.util.Collections; +import java.util.Map; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +class FimDataUtilTest { + + @DisplayName("Get value as key") + @Nested + class TestGetValueAsKey { + + private final String fieldKey = "fieldKey"; + + private final Map<String, Object> valueDataMap = Collections.singletonMap("valueDataKey", "valueDataValue"); + private final Map<String, Object> valueMap = Collections.singletonMap(FimDataUtil.VALUE_KEY, valueDataMap); + private final Map<String, Object> fieldMap = Collections.singletonMap(fieldKey, valueMap); + + @Test + void shouldReturNullOnNullMap() { + var map = FimDataUtil.getValueMapByKey(null, fieldKey); + + assertThat(map).isNull(); + } + + @Test + void shouldReturnNullOnNullKeyValue() { + var map = FimDataUtil.getValueMapByKey(fieldMap, null); + + assertThat(map).isNull(); + } + + @Test + void shouldReturnValueMapEntry() { + var map = FimDataUtil.getValueMapByKey(fieldMap, fieldKey); + + assertThat(map).isEqualTo(valueDataMap); + } + } +} \ No newline at end of file diff --git a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java index 38075e210282b91976041e1365b61603eadc2a3d..80267f923f9517aa620f5d9a93e1f0131394286d 100644 --- a/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java +++ b/fim-adapter/src/test/java/de/ozgcloud/eingang/fim/FimServiceITCase.java @@ -24,12 +24,13 @@ import de.ozgcloud.common.test.ITCase; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.formdata.IncomingFile; +import de.ozgcloud.eingang.fim.common.errorhandling.FimException; @ITCase @ActiveProfiles({ "itcase", "test" }) @ImportAutoConfiguration @SpringBootTest(classes = FimTestConfig.class) -public class FimServiceITCase { +class FimServiceITCase { @Autowired private FimService fimService;