From 1e54f93317cab2ed31ea1aecf27a571efaea1582 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 14 Nov 2024 12:17:55 +0100
Subject: [PATCH] OZG-7126 throw exception on postfachType null and no distinct
 configured postfachRemoteService; ajdust log warn -> error

---
 .../nachrichten/postfach/PostfachService.java |  9 +++++--
 .../postfach/PostfachServiceTest.java         | 26 ++++++++++++++-----
 2 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java
index 6157c7f..b92fead 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachService.java
@@ -42,6 +42,7 @@ import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
+import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.nachrichten.antragraum.AntragraumService;
 import de.ozgcloud.nachrichten.attributes.ClientAttributeService;
 import de.ozgcloud.nachrichten.info.InfoManagerService;
@@ -274,14 +275,18 @@ class PostfachService {
 	}
 
 	Optional<PostfachRemoteService> findPostfachRemoteService(String postfachType) {
-		return getPostfachRemoteServices()
+		var remoteServices = getPostfachRemoteServices().toList();
+		if (Objects.isNull(postfachType) && remoteServices.size() != 1) {
+			throw new TechnicalException("PostfachType is null and no distinct PostfachService is configured.");
+		}
+		return remoteServices.stream()
 				.filter(remoteService -> hasPostfachType(remoteService, postfachType))
 				.findFirst();
 	}
 
 	private boolean hasPostfachType(PostfachRemoteService postfachRemoteService, String postfachType) {
 		if (Objects.isNull(postfachType)) {
-			LOG.warn("PostfachType is null - use existing PostfachService with type %s.".formatted(postfachRemoteService.getPostfachType()));
+			LOG.error("PostfachType is null - use existing PostfachService with type %s.".formatted(postfachRemoteService.getPostfachType()));
 			return true;
 		}
 		return StringUtils.equals(postfachRemoteService.getPostfachType(), postfachType);
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java
index db5aec4..8dcd52f 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachServiceTest.java
@@ -52,6 +52,7 @@ import org.springframework.boot.logging.LogLevel;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.test.util.ReflectionTestUtils;
 
+import de.ozgcloud.common.errorhandling.TechnicalException;
 import de.ozgcloud.nachrichten.antragraum.AntragraumService;
 import de.ozgcloud.nachrichten.attributes.ClientAttributeService;
 import de.ozgcloud.nachrichten.info.InfoManagerService;
@@ -877,14 +878,27 @@ class PostfachServiceTest {
 			assertThat(foundRemoteService).isEmpty();
 		}
 
-		@Test
-		void shouldReturnRemoteServiceOnPostfachTypeNull() {
-			when(remoteService.getPostfachType()).thenReturn("BAYERN_ID");
-			doReturn(Stream.of(remoteService)).when(service).getPostfachRemoteServices();
+		@DisplayName("on postfachType null")
+		@Nested
+		class TestOnPostfachTypeNull {
 
-			var foundRemoteService = service.findPostfachRemoteService(null);
+			@Test
+			void shouldReturnRemoteService() {
+				when(remoteService.getPostfachType()).thenReturn("BAYERN_ID");
+				doReturn(Stream.of(remoteService)).when(service).getPostfachRemoteServices();
 
-			assertThat(foundRemoteService).hasValue(remoteService);
+				var foundRemoteService = service.findPostfachRemoteService(null);
+
+				assertThat(foundRemoteService).hasValue(remoteService);
+			}
+
+			@Test
+			void shouldThrowExceptionMultipleConfiguredRemoteServices() {
+				doReturn(Stream.of(anotherRemoteService, remoteService)).when(service).getPostfachRemoteServices();
+
+				assertThatThrownBy(() -> service.findPostfachRemoteService(null))
+						.isInstanceOf(TechnicalException.class);
+			}
 		}
 	}
 
-- 
GitLab