From 19a0206d007ae4218c493ac9deaddcdee500ca84 Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Wed, 26 Mar 2025 15:14:03 +0100 Subject: [PATCH] OZG-6831 servicekonto: Catch runtime-exception in getPostfachAddressType --- .../semantik/common/ServiceKontoFactory.java | 20 ++--- .../common/ServiceKontoFactoryTest.java | 78 +++++++++++++++---- 2 files changed, 73 insertions(+), 25 deletions(-) diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java index f41a76e44..6d6eba4ac 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java @@ -23,15 +23,6 @@ */ package de.ozgcloud.eingang.semantik.common; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import org.apache.commons.collections.MapUtils; -import org.springframework.stereotype.Component; - import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.PostfachAddressIdentifier; import de.ozgcloud.eingang.common.formdata.ServiceKonto; @@ -39,6 +30,10 @@ import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; import de.ozgcloud.eingang.common.formdata.ServiceKonto.TrustLevel; import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; import lombok.extern.log4j.Log4j2; +import org.apache.commons.collections.MapUtils; +import org.springframework.stereotype.Component; + +import java.util.*; @Component @Log4j2 @@ -102,7 +97,12 @@ public class ServiceKontoFactory { } int getPostfachAddressType(Map<String, Object> restResponseName) { - return getMailboxType(restResponseName); + try { + return getMailboxType(restResponseName); + } catch (RuntimeException e) { + LOG.error("Error while getting mailbox type from rest response name", e); + return POSTFACH_ADDRESS_DEFAULT; + } } private Integer getMailboxType(Map<String, Object> restResponseName) { diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactoryTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactoryTest.java index 5f9fba08b..a1a30252a 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactoryTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactoryTest.java @@ -23,28 +23,26 @@ */ package de.ozgcloud.eingang.semantik.common; -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.Map; - +import de.ozgcloud.eingang.common.formdata.*; +import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import de.ozgcloud.eingang.common.formdata.ServiceKonto.TrustLevel; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.InjectMocks; import org.mockito.Spy; -import de.ozgcloud.eingang.common.formdata.FormData; -import de.ozgcloud.eingang.common.formdata.FormDataUtils; -import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory; -import de.ozgcloud.eingang.common.formdata.ServiceKonto; -import de.ozgcloud.eingang.common.formdata.ServiceKonto.TrustLevel; -import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; -import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; -import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import java.util.List; +import java.util.Map; + +import static de.ozgcloud.eingang.semantik.common.ServiceKontoFactory.POSTFACH_ADDRESS_DEFAULT; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.*; class ServiceKontoFactoryTest { @@ -123,11 +121,61 @@ class ServiceKontoFactoryTest { assertThat(addresses.get(0).getType()).isEqualTo(PostfachAddressTestFactory.POSTFACH_ADDRESS_TYPE); } + @DisplayName("should return with postfach address type") + @ParameterizedTest + @ValueSource(ints = {1, 2, 3}) + void shouldReturnWithPostfachAddressType(int postfachAddressType) { + var formDataWithPostfachAddressType = FormDataUtils.from(FORM_DATA) + .put(ServiceKontoFactory.REST_RESPONSE_NAME, List.of(Map.of( + ServiceKontoFactory.REST_RESPONSE_NAME_MEMBER_SCOPE, + List.of(Map.of(ServiceKontoFactory.REST_RESPONSE_NAME_MEMBER_SCOPE_MAILBOX_TYPE, + postfachAddressType)))) + ) + .build(); + + var addresses = buildServiceKonto(formDataWithPostfachAddressType); + + var types = addresses.getPostfachAddresses() + .stream() + .map(PostfachAddress::getType) + .toList(); + assertThat(types).containsExactly(postfachAddressType); + } + private List<PostfachAddress> getPostfachAddresses() { return buildServiceKonto(FORM_DATA).getPostfachAddresses(); } } + @DisplayName("with bad rest_response_name") + @Nested + class TestWithBadRestResponseName { + + private final FormData formDataWithBadRestResponseName = FormDataUtils.from(FORM_DATA) + .put(ServiceKontoFactory.REST_RESPONSE_NAME, List.of(Map.of())).build(); + + @Test + void shouldCallBuildAddresses() { + getPostfachAddresses(); + + verify(factory).buildOsiPostfachV1Address(any(), anyInt()); + } + + @DisplayName("should return postfach address with default type") + @Test + void shouldReturnPostfachAddressWithDefaultType() { + var addresses = getPostfachAddresses(); + + assertThat(addresses) + .extracting("type") + .containsExactly(POSTFACH_ADDRESS_DEFAULT); + } + + private List<PostfachAddress> getPostfachAddresses() { + return buildServiceKonto(formDataWithBadRestResponseName).getPostfachAddresses(); + } + } + @DisplayName("without rest_response_name") @Nested class TestWithoutRestResponseName { -- GitLab