From 612c054c9b64d9bb2f61c7c933090e6a75b308ed Mon Sep 17 00:00:00 2001 From: OZG-Cloud Team <noreply@ozg-sh.de> Date: Fri, 28 Jun 2024 13:37:07 +0200 Subject: [PATCH] OZG-6054 mantelantrag: Continue mapping with multiple matching slots --- .../MantelantragZustaendigeStelleMapper.java | 18 ++++++++++++---- ...ntelantragZustaendigeStelleMapperTest.java | 21 ++++++++++++++++--- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapper.java index 84074075..27440d18 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapper.java @@ -40,6 +40,8 @@ public class MantelantragZustaendigeStelleMapper implements FormBasedMapper { static final String HAUSANSCHRIFT_ORT_FIELD = "zust_ort"; static final String TELEFON_FIELD = "telefon"; + static final String FAILURE_MESSAGE = "Failed mapping Zustaendigestelle of Mantelantrag"; + private final Environment environment; private Set<String> xtaIdentifiers; @@ -67,7 +69,7 @@ public class MantelantragZustaendigeStelleMapper implements FormBasedMapper { try { return adaptFormDataWithPossibleException(formData); } catch (TechnicalException exception) { - LOG.warn("Mantelantrag is invalid: %s".formatted(exception.getMessage())); + logWarning("%s: %s".formatted(FAILURE_MESSAGE, exception.getMessage())); return formData; } } @@ -113,12 +115,20 @@ public class MantelantragZustaendigeStelleMapper implements FormBasedMapper { private void verifyOneMatchingIdentifier(List<Integer> matchingSlots) { if (matchingSlots.size() != 1) { - throw new TechnicalException( - "Found %d matching nachrichtenbroker addresses! Expected one of '%s'." - .formatted(matchingSlots.size(), Strings.join(xtaIdentifiers, ','))); + var message = "Found %d matching nachrichtenbroker addresses! Expected one of '%s'." + .formatted(matchingSlots.size(), Strings.join(xtaIdentifiers, ',')); + if (matchingSlots.isEmpty()) { + throw new TechnicalException(message); + } else { + logWarning("Unexpected Zustaendigestelle in Mantelantrag: %s".formatted(message)); + } } } + void logWarning(String message) { + LOG.warn(message); + } + private List<Integer> getMatchingSlots(Map<String, Object> fieldMap) { return IntStream.range(0, 3) .filter(slotIndex -> xtaIdentifiers.contains(getXtaIdentifierOfSlot(fieldMap, slotIndex))) diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java index e7b9d800..0562249b 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java @@ -133,6 +133,18 @@ class MantelantragZustaendigeStelleMapperTest { assertThat(resultFormData).isEqualTo(formData); } + + @DisplayName("should log warning with exception") + @Test + void shouldLogWarningWithException() { + var errorMessage = "some error"; + doThrow(new TechnicalException(errorMessage)).when(mapper).adaptFormDataWithPossibleException(formData); + doNothing().when(mapper).logWarning(anyString()); + + mapper.parseFormData(formData); + + verify(mapper).logWarning("%s: %s".formatted(FAILURE_MESSAGE, errorMessage)); + } } @DisplayName("adapt form data with possible exception") @@ -310,14 +322,17 @@ class MantelantragZustaendigeStelleMapperTest { .isInstanceOf(TechnicalException.class); } - @DisplayName("should throw if multiple slots match") + @DisplayName("should log warning if multiple slots match") @Test void shouldThrowIfMultipleSlotsMatch() { fieldMap.put(getZustaendigeStelleName(0), IDENTIFIER2); fieldMap.put(getZustaendigeStelleName(2), IDENTIFIER); + doNothing().when(mapper).logWarning(anyString()); + + mapper.findSlotIndex(fieldMap); + + verify(mapper).logWarning(anyString()); - assertThatThrownBy(() -> mapper.findSlotIndex(fieldMap)) - .isInstanceOf(TechnicalException.class); } } -- GitLab