From 8db9f47df142165cf532b43cb6364b18686be350 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 10 Sep 2024 16:34:17 +0200
Subject: [PATCH] OZG-6636 set serviceKonto to null if no postfachAddress
 exists

---
 .../formdata/FormHeaderTestFactory.java       |  4 +++-
 .../eingang/router/VorgangService.java        | 13 ++++++++++++-
 .../eingang/router/VorgangServiceTest.java    | 19 +++++++++++++++++++
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java
index c243a8964..0a3719460 100644
--- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java
+++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java
@@ -40,6 +40,8 @@ public class FormHeaderTestFactory {
 	public static final String CREATED_AT_STR = "2024-04-01T01:00:30Z";
 	public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR);
 
+	public static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create();
+
 	public static FormHeader create() {
 		return createBuilder().build();
 	}
@@ -53,7 +55,7 @@ public class FormHeaderTestFactory {
 				.formId(FORM_ID)
 				.formName(FORM_NAME)
 				.sender(SENDER)
-				.serviceKonto(ServiceKontoTestFactory.create());
+				.serviceKonto(SERVICE_KONTO);
 	}
 
 }
diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java
index f93955719..08e4bddd5 100644
--- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java
+++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java
@@ -48,6 +48,17 @@ public class VorgangService {
 	}
 
 	FormData preserveConsistency(FormData formData) {
-		return null;
+		if (hasNoPostfachAddress(formData)) {
+			return clearServiceKonto(formData);
+		}
+		return formData;
+	}
+
+	private boolean hasNoPostfachAddress(FormData formData) {
+		return formData.getHeader().getServiceKonto().getPostfachAddresses().isEmpty();
+	}
+
+	private FormData clearServiceKonto(FormData formData) {
+		return formData.toBuilder().header(formData.getHeader().toBuilder().serviceKonto(null).build()).build();
 	}
 }
\ No newline at end of file
diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java
index 5425c19d6..c5745c2a1 100644
--- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java
+++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java
@@ -23,6 +23,7 @@
  */
 package de.ozgcloud.eingang.router;
 
+import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
 import java.util.Optional;
@@ -37,6 +38,10 @@ import org.mockito.Spy;
 
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
+import de.ozgcloud.eingang.common.formdata.FormHeader;
+import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
+import de.ozgcloud.eingang.common.formdata.ServiceKonto;
+import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory;
 import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory;
 
 class VorgangServiceTest {
@@ -84,10 +89,24 @@ class VorgangServiceTest {
 	@Nested
 	class TestPreserveConsistency {
 
+		private final ServiceKonto serviceKonto = ServiceKontoTestFactory.createBuilder().clearPostfachAddresses().build();
+		private final FormHeader header = FormHeaderTestFactory.createBuilder().serviceKonto(serviceKonto).build();
+		private final FormData formData = FormDataTestFactory.createBuilder().header(header).build();
+
 		@DisplayName("should set serviceKonto to null if no postfachAddress exists")
 		@Test
 		void shouldSetServiceKontoToNull() {
+			var consistentFormData = service.preserveConsistency(formData);
+
+			assertThat(consistentFormData.getHeader().getServiceKonto()).isNull();
+		}
+
+		@DisplayName("should keep serviceKonto if postfachAddress eixsts")
+		@Test
+		void shouldKeepServiceKonto() {
+			var consistentFormData = service.preserveConsistency(FormDataTestFactory.create());
 
+			assertThat(consistentFormData.getHeader().getServiceKonto()).isEqualTo(FormHeaderTestFactory.SERVICE_KONTO);
 		}
 	}
 }
\ No newline at end of file
-- 
GitLab