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 27440d18d53c6dcda34512d1ddbfdfab8f433a86..3e0ed8c3336fe365c2f8779cf1d6ecf98d37719f 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,8 +40,6 @@ 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; @@ -69,11 +67,15 @@ public class MantelantragZustaendigeStelleMapper implements FormBasedMapper { try { return adaptFormDataWithPossibleException(formData); } catch (TechnicalException exception) { - logWarning("%s: %s".formatted(FAILURE_MESSAGE, exception.getMessage())); + logWarningForFailure(exception); return formData; } } + void logWarningForFailure(Exception exception) { + LOG.warn("Failed mapping Zustaendigestelle of Mantelantrag: %s".formatted(exception.getMessage())); + } + FormData adaptFormDataWithPossibleException(FormData formData) { var fieldMap = formData.getFormData(); var slotIndex = findSlotIndex(fieldMap); @@ -115,18 +117,22 @@ public class MantelantragZustaendigeStelleMapper implements FormBasedMapper { private void verifyOneMatchingIdentifier(List<Integer> matchingSlots) { if (matchingSlots.size() != 1) { - var message = "Found %d matching nachrichtenbroker addresses! Expected one of '%s'." - .formatted(matchingSlots.size(), Strings.join(xtaIdentifiers, ',')); + var message = getMultipleSlotsMessage(matchingSlots); if (matchingSlots.isEmpty()) { throw new TechnicalException(message); } else { - logWarning("Unexpected Zustaendigestelle in Mantelantrag: %s".formatted(message)); + logWarningForUnexpected(message); } } } - void logWarning(String message) { - LOG.warn(message); + void logWarningForUnexpected(String message) { + LOG.warn("Unexpected Zustaendigestelle in Mantelantrag: %s".formatted(message)); + } + + String getMultipleSlotsMessage(List<Integer> matchingSlots) { + return "Found %d matching nachrichtenbroker addresses! Expected one of '%s'.".formatted(matchingSlots.size(), + Strings.join(xtaIdentifiers, ',')); } private List<Integer> getMatchingSlots(Map<String, Object> fieldMap) { 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 0562249bab85de7991940357772246cf1c4fcc9f..2cad108d2ae30f76782b0c9ddfdd934becb9be37 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 @@ -18,6 +18,8 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; @@ -137,13 +139,12 @@ class MantelantragZustaendigeStelleMapperTest { @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()); + var exception = new TechnicalException("some error"); + doThrow(exception).when(mapper).adaptFormDataWithPossibleException(formData); mapper.parseFormData(formData); - verify(mapper).logWarning("%s: %s".formatted(FAILURE_MESSAGE, errorMessage)); + verify(mapper).logWarningForFailure(exception); } } @@ -292,6 +293,9 @@ class MantelantragZustaendigeStelleMapperTest { private Map<String, Object> fieldMap; + @Captor + private ArgumentCaptor<String> warningCaptor; + @BeforeEach void mock() { fieldMap = new HashMap<>(Map.of( @@ -324,15 +328,14 @@ class MantelantragZustaendigeStelleMapperTest { @DisplayName("should log warning if multiple slots match") @Test - void shouldThrowIfMultipleSlotsMatch() { + void shouldLogWarningIfMultipleSlotsMatch() { fieldMap.put(getZustaendigeStelleName(0), IDENTIFIER2); fieldMap.put(getZustaendigeStelleName(2), IDENTIFIER); - doNothing().when(mapper).logWarning(anyString()); mapper.findSlotIndex(fieldMap); - verify(mapper).logWarning(anyString()); - + verify(mapper).logWarningForUnexpected(warningCaptor.capture()); + assertThat(warningCaptor.getValue()).isEqualTo(mapper.getMultipleSlotsMessage(List.of(0, 2))); } }