From 5e86a7370dd3d41ad037dceb793bf6bc585b6bc0 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Fri, 7 Mar 2025 14:10:51 +0100
Subject: [PATCH 1/7] OZG-7501 OZG-7874 Create
 ForwardByVorgangCommandController

---
 .../alfa/collaboration/Anschrift.java         |   2 +-
 .../collaboration/OrganisationsEinheit.java   |   2 +-
 .../OrganisationsEinheitController.java       |   2 +-
 .../OrganisationsEinheitHeader.java           |   2 +-
 .../alfa/common/command/CommandBody.java      |   4 +-
 .../alfa/common/command/CommandOrder.java     |   2 +
 .../ForwardByVorgangCommandController.java    |  78 +++++++++
 .../forwarding/ForwardVorgangCommandBody.java |  47 +++++
 ...reateForwardVorgangCommandTestFactory.java |  44 +++++
 ...ForwardByVorgangCommandControllerTest.java | 163 ++++++++++++++++++
 .../ForwardVorgangCommandBodyTestFactory.java |  41 +++++
 11 files changed, 382 insertions(+), 5 deletions(-)
 create mode 100644 alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
 create mode 100644 alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
 create mode 100644 alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/CreateForwardVorgangCommandTestFactory.java
 create mode 100644 alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
 create mode 100644 alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java

diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Anschrift.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Anschrift.java
index 231090b96c..96b2d58709 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Anschrift.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/Anschrift.java
@@ -28,7 +28,7 @@ import lombok.Getter;
 
 @Builder
 @Getter
-class Anschrift {
+public class Anschrift {
 
 	private String strasse;
 	private String hausnummer;
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheit.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheit.java
index aeccb1786c..56e5510b8a 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheit.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheit.java
@@ -30,7 +30,7 @@ import lombok.extern.jackson.Jacksonized;
 @Builder
 @Getter
 @Jacksonized
-class OrganisationsEinheit {
+public class OrganisationsEinheit {
 
 	private String id;
 	private XzufiId xzufiId;
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java
index 9117179028..bee8310c01 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java
@@ -40,7 +40,7 @@ import lombok.RequiredArgsConstructor;
 @RestController
 @RequestMapping(OrganisationsEinheitController.PATH)
 @RequiredArgsConstructor
-class OrganisationsEinheitController {
+public class OrganisationsEinheitController {
 
 	static final String PATH = "/api/organisationseinheits"; // NOSONAR
 	static final String SEARCH_BY_PARAM = "searchBy";
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeader.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeader.java
index b62a4788a8..ab2b3b4c6a 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeader.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitHeader.java
@@ -30,7 +30,7 @@ import lombok.Getter;
 
 @Builder
 @Getter
-class OrganisationsEinheitHeader {
+public class OrganisationsEinheitHeader {
 
 	@JsonIgnore
 	private String id;
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java
index 46db2e9b65..1f288483dc 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandBody.java
@@ -30,6 +30,7 @@ import de.ozgcloud.alfa.aktenzeichen.AktenzeichenCommandBody;
 import de.ozgcloud.alfa.bescheid.Bescheid;
 import de.ozgcloud.alfa.bescheid.BescheidDocumentFromFileBody;
 import de.ozgcloud.alfa.collaboration.CollaborationCommandBody;
+import de.ozgcloud.alfa.forwarding.ForwardVorgangCommandBody;
 import de.ozgcloud.alfa.forwarding.RedirectRequest;
 import de.ozgcloud.alfa.kommentar.Kommentar;
 import de.ozgcloud.alfa.loeschanforderung.DeleteLoeschAnforderung;
@@ -57,7 +58,8 @@ import de.ozgcloud.alfa.wiedervorlage.Wiedervorlage;
 		@Type(value = AktenzeichenCommandBody.class, name = "SET_AKTENZEICHEN"),
 		@Type(value = BescheidDocumentFromFileBody.class, name = "CREATE_BESCHEID_DOCUMENT_FROM_FILE"),
 		@Type(value = CollaborationCommandBody.class, name = "CREATE_COLLABORATION_REQUEST"),
-		@Type(value = EmptyCommandBody.class, name = "ARCHIVE_VORGANG")
+		@Type(value = EmptyCommandBody.class, name = "ARCHIVE_VORGANG"),
+		@Type(value = ForwardVorgangCommandBody.class, name = "FORWARD_VORGANG")
 })
 public interface CommandBody {
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java
index 5e97b02673..16b13bd448 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java
@@ -73,6 +73,8 @@ public enum CommandOrder {
 
 	PROCESS_VORGANG(false, Type.VORGANG),
 
+	FORWARD_VORGANG(false, Type.VORGANG),
+
 	CREATE_COLLABORATION_REQUEST(false, Type.COLLABORATION),
 
 	UNBEKANNT(false, Type.NONE);
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
new file mode 100644
index 0000000000..c9928a5d9a
--- /dev/null
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.forwarding;
+
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheit;
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheitController;
+import de.ozgcloud.alfa.common.command.CommandController;
+import de.ozgcloud.alfa.common.command.CommandService;
+import de.ozgcloud.alfa.common.command.CreateCommand;
+import de.ozgcloud.common.errorhandling.TechnicalException;
+import lombok.RequiredArgsConstructor;
+
+@RestController
+@RequestMapping(ForwardByVorgangCommandController.PATH)
+@RequiredArgsConstructor
+class ForwardByVorgangCommandController {
+	static final String PATH = "/api/vorgangs/{vorgangId}/{vorgangVersion}/forwarding";
+
+	private final CommandService commandService;
+	private final OrganisationsEinheitController organisationsEinheitController;
+
+	@PostMapping
+	public ResponseEntity<Void> createCommand(@PathVariable String vorgangId, @PathVariable long vorgangVersion, @RequestBody CreateCommand command) {
+		var body = (ForwardVorgangCommandBody) command.getBody();
+		var enrichedCommand = command.toBuilder()
+				.vorgangId(vorgangId)
+				.relationId(vorgangId)
+				.body(addOrganisationsEinheitData(getOrganisationsEinheitById(body.getOrganisationsEinheitId()), body))
+				.build();
+		var created = commandService.createCommand(enrichedCommand, vorgangVersion);
+		return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build();
+	}
+
+	private OrganisationsEinheit getOrganisationsEinheitById(String id) {
+		var response = organisationsEinheitController.getById(id);
+		if (!response.getStatusCode().is2xxSuccessful() || response.getBody() == null) {
+			throw new TechnicalException("Could not get Organisationseinheit by id: " + id);
+		}
+		return response.getBody().getContent();
+	}
+
+	private ForwardVorgangCommandBody addOrganisationsEinheitData(OrganisationsEinheit organisationsEinheit, ForwardVorgangCommandBody body) {
+		return body.toBuilder()
+				.name(organisationsEinheit.getName())
+				.anschrift(organisationsEinheit.getAnschrift())
+				.build();
+	}
+}
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
new file mode 100644
index 0000000000..14c6d31e0e
--- /dev/null
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.forwarding;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+
+import de.ozgcloud.alfa.collaboration.Anschrift;
+import de.ozgcloud.alfa.common.LinkedResourceDeserializer;
+import de.ozgcloud.alfa.common.command.CommandBody;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+@Getter
+@Builder(toBuilder = true)
+@AllArgsConstructor
+@NoArgsConstructor
+public class ForwardVorgangCommandBody implements CommandBody {
+
+	@JsonDeserialize(using = LinkedResourceDeserializer.class)
+	private String organisationsEinheitId;
+
+	private String name;
+	private Anschrift anschrift;
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/CreateForwardVorgangCommandTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/CreateForwardVorgangCommandTestFactory.java
new file mode 100644
index 0000000000..077816660e
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/CreateForwardVorgangCommandTestFactory.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.forwarding;
+
+import de.ozgcloud.alfa.common.command.CommandOrder;
+import de.ozgcloud.alfa.common.command.CreateCommand;
+import de.ozgcloud.alfa.common.command.CreateCommand.CreateCommandBuilder;
+import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
+
+class CreateForwardVorgangCommandTestFactory {
+
+	static CreateCommand create() {
+		return createBuilder().build();
+	}
+
+	static CreateCommandBuilder createBuilder() {
+		return CreateCommand.builder()
+				.order(CommandOrder.FORWARD_VORGANG.name())
+				.vorgangId(VorgangHeaderTestFactory.ID)
+				.relationId(VorgangHeaderTestFactory.ID)
+				.body(ForwardVorgangCommandBodyTestFactory.create());
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
new file mode 100644
index 0000000000..196916013c
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.forwarding;
+
+import static de.ozgcloud.alfa.common.command.CommandController.*;
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.Mockito.*;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.springframework.hateoas.EntityModel;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.ResultActions;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheitController;
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheitTestFactory;
+import de.ozgcloud.alfa.common.command.CommandOrder;
+import de.ozgcloud.alfa.common.command.CommandService;
+import de.ozgcloud.alfa.common.command.CommandTestFactory;
+import de.ozgcloud.alfa.common.command.CreateCommand;
+import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
+import de.ozgcloud.common.errorhandling.TechnicalException;
+import lombok.SneakyThrows;
+
+class ForwardByVorgangCommandControllerTest {
+
+	@Mock
+	private CommandService commandService;
+	@Mock
+	private OrganisationsEinheitController organisationsEinheitController;
+	@Spy
+	@InjectMocks
+	private ForwardByVorgangCommandController controller;
+
+	private MockMvc mockMvc;
+
+	@BeforeEach
+	void init() {
+		mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
+	}
+
+	@Nested
+	class TestCreateCommand {
+
+		@Nested
+		class OnOrganisationsEinheitAvailable {
+
+			@Captor
+			private ArgumentCaptor<CreateCommand> commandCaptor;
+
+			@BeforeEach
+			void init() {
+				when(organisationsEinheitController.getById(any())).thenReturn(
+						new ResponseEntity<>(EntityModel.of(OrganisationsEinheitTestFactory.create()), HttpStatus.OK));
+				when(commandService.createCommand(any(), anyLong())).thenReturn(CommandTestFactory.create());
+			}
+
+			@Test
+			void shouldCallOrganisationsEinheitController() {
+				doRequest();
+
+				verify(organisationsEinheitController).getById(OrganisationsEinheitTestFactory.ID);
+			}
+
+			@Test
+			void shouldCallCommandService() {
+				doRequest();
+
+				verify(commandService).createCommand(commandCaptor.capture(), eq(VorgangHeaderTestFactory.VERSION));
+				assertThat(commandCaptor.getValue()).usingRecursiveComparison().isEqualTo(CreateForwardVorgangCommandTestFactory.create());
+			}
+
+			@SneakyThrows
+			@Test
+			void shouldReturnCreated() {
+				var response = doRequest();
+
+				response.andExpect(status().isCreated());
+			}
+
+			@SneakyThrows
+			@Test
+			void shouldReturnLinkToCreatedCommand() {
+				var response = doRequest();
+
+				response.andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID));
+			}
+		}
+
+		@Nested
+		class OnOrganisationsEinheitMissing {
+
+			@SneakyThrows
+			@Test
+			void shouldThrowExceptionIfNotFound() {
+				when(organisationsEinheitController.getById(OrganisationsEinheitTestFactory.ID))
+						.thenReturn(new ResponseEntity<>(HttpStatus.NOT_FOUND));
+
+				assertTechnicalExceptionThrown();
+			}
+
+			@SneakyThrows
+			@Test
+			void shouldThrowExceptionIfBodyIsEmpty() {
+				when(organisationsEinheitController.getById(OrganisationsEinheitTestFactory.ID))
+						.thenReturn(new ResponseEntity<>(null, HttpStatus.OK));
+
+				assertTechnicalExceptionThrown();
+			}
+
+			private void assertTechnicalExceptionThrown() {
+				assertThatThrownBy(() -> doRequest()).rootCause().isInstanceOf(TechnicalException.class)
+						.hasMessageStartingWith("Could not get Organisationseinheit by id: %s", OrganisationsEinheitTestFactory.ID);
+			}
+		}
+
+		@SneakyThrows
+		private ResultActions doRequest() {
+			return mockMvc.perform(post(ForwardByVorgangCommandController.PATH, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION)
+					.contentType(MediaType.APPLICATION_JSON)
+					.content(createContent()));
+		}
+
+		private String createContent() {
+			return CommandTestFactory.buildCreateCommandWithBodyContent(
+					CommandOrder.FORWARD_VORGANG,
+					"{\"organisationsEinheitId\":\"%s\"}".formatted(OrganisationsEinheitTestFactory.ID));
+		}
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
new file mode 100644
index 0000000000..ac8f4a4d34
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.forwarding;
+
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheitTestFactory;
+import de.ozgcloud.alfa.forwarding.ForwardVorgangCommandBody.ForwardVorgangCommandBodyBuilder;
+
+class ForwardVorgangCommandBodyTestFactory {
+
+	static ForwardVorgangCommandBody create() {
+		return createBuilder().build();
+	}
+
+	static ForwardVorgangCommandBodyBuilder createBuilder() {
+		return ForwardVorgangCommandBody.builder()
+				.organisationsEinheitId(OrganisationsEinheitTestFactory.ID)
+				.name(OrganisationsEinheitTestFactory.NAME)
+				.anschrift(OrganisationsEinheitTestFactory.ANSCHRIFT);
+	}
+}
-- 
GitLab


From 1055b20bef0257b9dca3ddf4494e649f1b763f1e Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Fri, 7 Mar 2025 14:44:33 +0100
Subject: [PATCH 2/7] OZG-7501 OZG-7874 Point the link forwardByOzgCloud to
 ForwardByVorgangCommandController

---
 .../forwarding/ForwardingVorgangWithEingangProcessor.java    | 3 +--
 .../ForwardingVorgangWithEingangProcessorTest.java           | 5 ++---
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessor.java
index 714dc343d3..3aa5eca619 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessor.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessor.java
@@ -34,7 +34,6 @@ import org.springframework.hateoas.server.RepresentationModelProcessor;
 import org.springframework.stereotype.Component;
 
 import de.ozgcloud.alfa.common.FeatureToggleProperties;
-import de.ozgcloud.alfa.common.command.CommandController;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserRole;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
@@ -74,7 +73,7 @@ class ForwardingVorgangWithEingangProcessor implements RepresentationModelProces
 	}
 
 	private Link buildForwardByOzgCloudLink(VorgangWithEingang vorgang) {
-		return linkTo(methodOn(CommandController.CommandByRelationController.class).createCommand(vorgang.getId(), vorgang.getId(),
+		return linkTo(methodOn(ForwardByVorgangCommandController.class).createCommand(vorgang.getId(),
 				vorgang.getVersion(), null)).withRel(REL_FORWARD_BY_OZGCLOUD);
 	}
 
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessorTest.java
index e1da1b36f7..ffa0dbd2fb 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessorTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardingVorgangWithEingangProcessorTest.java
@@ -42,7 +42,6 @@ import org.springframework.hateoas.Link;
 import org.springframework.web.util.UriComponentsBuilder;
 
 import de.ozgcloud.alfa.common.FeatureToggleProperties;
-import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController;
 import de.ozgcloud.alfa.common.user.CurrentUserService;
 import de.ozgcloud.alfa.common.user.UserRole;
 import de.ozgcloud.alfa.vorgang.Vorgang.VorgangStatus;
@@ -122,8 +121,8 @@ class ForwardingVorgangWithEingangProcessorTest {
 
 				@Test
 				void shouldAddForwardByOzgCloudLink() {
-					var expectedHref = UriComponentsBuilder.fromUriString(CommandByRelationController.COMMAND_BY_RELATION_PATH)
-							.buildAndExpand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString();
+					var expectedHref = UriComponentsBuilder.fromUriString(ForwardByVorgangCommandController.PATH)
+							.buildAndExpand(VorgangHeaderTestFactory.ID, VorgangHeaderTestFactory.VERSION).toString();
 
 					var model = processor.process(EntityModel.of(vorgang));
 
-- 
GitLab


From 838ff04706986c32631a3f39a411f3dc424f7243 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Fri, 7 Mar 2025 14:59:07 +0100
Subject: [PATCH 3/7] OZG-7501 OZG-7874 Change type of FORWARD_VORGANG

---
 .../main/java/de/ozgcloud/alfa/common/command/CommandOrder.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java
index 16b13bd448..2abd4dff45 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/command/CommandOrder.java
@@ -73,7 +73,7 @@ public enum CommandOrder {
 
 	PROCESS_VORGANG(false, Type.VORGANG),
 
-	FORWARD_VORGANG(false, Type.VORGANG),
+	FORWARD_VORGANG(false, Type.FORWARDING),
 
 	CREATE_COLLABORATION_REQUEST(false, Type.COLLABORATION),
 
-- 
GitLab


From 8387f5a8f5cb63888a9d9f5229edf2c07a91ba60 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Fri, 7 Mar 2025 16:01:21 +0100
Subject: [PATCH 4/7] OZG-7501 OZG-7874 Fix tests

---
 .../command/CommandModelAssemblerTest.java    |  4 +--
 ...ForwardByVorgangCommandControllerTest.java | 28 +++++++++----------
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandModelAssemblerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandModelAssemblerTest.java
index cdc84e3c2b..bd98a6b027 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandModelAssemblerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/common/command/CommandModelAssemblerTest.java
@@ -226,7 +226,7 @@ class CommandModelAssemblerTest {
 					"UPDATE_ATTACHED_ITEM", "PATCH_ATTACHED_ITEM", "RECEIVE_POSTFACH_NACHRICHT", "VORGANG_LOESCHEN", "DELETE_ATTACHED_ITEM",
 					"VORGANG_ZUM_LOESCHEN_MARKIEREN", "LOESCH_ANFORDERUNG_ZURUECKNEHMEN", "CREATE_BESCHEID", "PROCESS_VORGANG", "SET_AKTENZEICHEN",
 					"DELETE_BESCHEID", "UPDATE_BESCHEID", "CREATE_BESCHEID_DOCUMENT_FROM_FILE", "CREATE_BESCHEID_DOCUMENT", "SEND_BESCHEID",
-					"UNBEKANNT", "CREATE_COLLABORATION_REQUEST" })
+					"UNBEKANNT", "CREATE_COLLABORATION_REQUEST", "FORWARD_VORGANG" })
 			void shouldBePresentOnOrder(CommandOrder order) {
 				var model = toModelWithOrder(order.name());
 
@@ -250,7 +250,7 @@ class CommandModelAssemblerTest {
 		@ParameterizedTest
 		@EnumSource(mode = Mode.EXCLUDE, names = { "VORGANG_ANNEHMEN", "VORGANG_VERWERFEN", "VORGANG_ZURUECKHOLEN", "VORGANG_BEARBEITEN",
 				"VORGANG_BESCHEIDEN", "VORGANG_ZURUECKSTELLEN", "VORGANG_ABSCHLIESSEN", "VORGANG_WIEDEREROEFFNEN", "VORGANG_ZUM_LOESCHEN_MARKIEREN",
-				"LOESCH_ANFORDERUNG_ZURUECKNEHMEN" })
+				"LOESCH_ANFORDERUNG_ZURUECKNEHMEN", "FORWARD_VORGANG" })
 		void shouldNOTBePresentOnOrder(CommandOrder order) {
 			var model = toModelWithOrder(order.name());
 
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
index 196916013c..d048bea2da 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
@@ -51,8 +51,9 @@ import de.ozgcloud.alfa.common.command.CommandOrder;
 import de.ozgcloud.alfa.common.command.CommandService;
 import de.ozgcloud.alfa.common.command.CommandTestFactory;
 import de.ozgcloud.alfa.common.command.CreateCommand;
+import de.ozgcloud.alfa.common.errorhandling.ExceptionController;
+import de.ozgcloud.alfa.common.errorhandling.ProblemDetailMapper;
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
-import de.ozgcloud.common.errorhandling.TechnicalException;
 import lombok.SneakyThrows;
 
 class ForwardByVorgangCommandControllerTest {
@@ -61,6 +62,8 @@ class ForwardByVorgangCommandControllerTest {
 	private CommandService commandService;
 	@Mock
 	private OrganisationsEinheitController organisationsEinheitController;
+	@Mock
+	private ProblemDetailMapper problemDetailMapper;
 	@Spy
 	@InjectMocks
 	private ForwardByVorgangCommandController controller;
@@ -69,7 +72,7 @@ class ForwardByVorgangCommandControllerTest {
 
 	@BeforeEach
 	void init() {
-		mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
+		mockMvc = MockMvcBuilders.standaloneSetup(controller).setControllerAdvice(new ExceptionController(problemDetailMapper)).build();
 	}
 
 	@Nested
@@ -125,25 +128,22 @@ class ForwardByVorgangCommandControllerTest {
 
 			@SneakyThrows
 			@Test
-			void shouldThrowExceptionIfNotFound() {
-				when(organisationsEinheitController.getById(OrganisationsEinheitTestFactory.ID))
-						.thenReturn(new ResponseEntity<>(HttpStatus.NOT_FOUND));
+			void shouldReturnInternalServerErrorIfNotFound() {
+				when(organisationsEinheitController.getById(any())).thenReturn(new ResponseEntity<>(HttpStatus.NOT_FOUND));
+
+				var response = doRequest();
 
-				assertTechnicalExceptionThrown();
+				response.andExpect(status().isInternalServerError());
 			}
 
 			@SneakyThrows
 			@Test
-			void shouldThrowExceptionIfBodyIsEmpty() {
-				when(organisationsEinheitController.getById(OrganisationsEinheitTestFactory.ID))
-						.thenReturn(new ResponseEntity<>(null, HttpStatus.OK));
+			void shouldReturnInternalServerErrorIfBodyIsEmpty() {
+				when(organisationsEinheitController.getById(any())).thenReturn(new ResponseEntity<>(null, HttpStatus.OK));
 
-				assertTechnicalExceptionThrown();
-			}
+				var response = doRequest();
 
-			private void assertTechnicalExceptionThrown() {
-				assertThatThrownBy(() -> doRequest()).rootCause().isInstanceOf(TechnicalException.class)
-						.hasMessageStartingWith("Could not get Organisationseinheit by id: %s", OrganisationsEinheitTestFactory.ID);
+				response.andExpect(status().isInternalServerError());
 			}
 		}
 
-- 
GitLab


From 0dd2701cdc51dda01e679e1651e0daaf0d10ba82 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Mon, 10 Mar 2025 13:31:54 +0100
Subject: [PATCH 5/7] OZG-7501 OZG-7874 Fix serialization issue

---
 .../ForwardByVorgangCommandController.java    |  6 +-
 .../forwarding/ForwardVorgangCommandBody.java |  8 ++-
 .../ForwardVorgangCommandBodyMapper.java      | 41 ++++++++++++
 ...ForwardByVorgangCommandControllerTest.java | 18 +++++-
 .../ForwardVorgangCommandBodyMapperTest.java  | 63 +++++++++++++++++++
 .../ForwardVorgangCommandBodyTestFactory.java |  6 +-
 6 files changed, 134 insertions(+), 8 deletions(-)
 create mode 100644 alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
 create mode 100644 alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java

diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
index c9928a5d9a..fb5224959e 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
@@ -48,6 +48,7 @@ class ForwardByVorgangCommandController {
 
 	private final CommandService commandService;
 	private final OrganisationsEinheitController organisationsEinheitController;
+	private final ForwardVorgangCommandBodyMapper bodyMapper;
 
 	@PostMapping
 	public ResponseEntity<Void> createCommand(@PathVariable String vorgangId, @PathVariable long vorgangVersion, @RequestBody CreateCommand command) {
@@ -70,9 +71,6 @@ class ForwardByVorgangCommandController {
 	}
 
 	private ForwardVorgangCommandBody addOrganisationsEinheitData(OrganisationsEinheit organisationsEinheit, ForwardVorgangCommandBody body) {
-		return body.toBuilder()
-				.name(organisationsEinheit.getName())
-				.anschrift(organisationsEinheit.getAnschrift())
-				.build();
+		return bodyMapper.updateFromOrganisationsEinheit(organisationsEinheit, body);
 	}
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
index 14c6d31e0e..db96ddecb3 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
@@ -25,15 +25,16 @@ package de.ozgcloud.alfa.forwarding;
 
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 
-import de.ozgcloud.alfa.collaboration.Anschrift;
 import de.ozgcloud.alfa.common.LinkedResourceDeserializer;
 import de.ozgcloud.alfa.common.command.CommandBody;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
+import lombok.Setter;
 
 @Getter
+@Setter
 @Builder(toBuilder = true)
 @AllArgsConstructor
 @NoArgsConstructor
@@ -43,5 +44,8 @@ public class ForwardVorgangCommandBody implements CommandBody {
 	private String organisationsEinheitId;
 
 	private String name;
-	private Anschrift anschrift;
+	private String strasse;
+	private String hausnummer;
+	private String plz;
+	private String ort;
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
new file mode 100644
index 0000000000..f766f9e94b
--- /dev/null
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.forwarding;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.MappingTarget;
+
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheit;
+
+@Mapper
+interface ForwardVorgangCommandBodyMapper {
+
+	@Mapping(target = "organisationsEinheitId", ignore = true)
+	@Mapping(target = "strasse", source = "anschrift.strasse")
+	@Mapping(target = "hausnummer", source = "anschrift.hausnummer")
+	@Mapping(target = "plz", source = "anschrift.plz")
+	@Mapping(target = "ort", source = "anschrift.ort")
+	ForwardVorgangCommandBody updateFromOrganisationsEinheit(OrganisationsEinheit organisationsEinheit, @MappingTarget ForwardVorgangCommandBody commandBody);
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
index d048bea2da..908bf70e6b 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
@@ -45,6 +45,7 @@ import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.ResultActions;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheit;
 import de.ozgcloud.alfa.collaboration.OrganisationsEinheitController;
 import de.ozgcloud.alfa.collaboration.OrganisationsEinheitTestFactory;
 import de.ozgcloud.alfa.common.command.CommandOrder;
@@ -63,6 +64,8 @@ class ForwardByVorgangCommandControllerTest {
 	@Mock
 	private OrganisationsEinheitController organisationsEinheitController;
 	@Mock
+	private ForwardVorgangCommandBodyMapper bodyMapper;
+	@Mock
 	private ProblemDetailMapper problemDetailMapper;
 	@Spy
 	@InjectMocks
@@ -78,17 +81,22 @@ class ForwardByVorgangCommandControllerTest {
 	@Nested
 	class TestCreateCommand {
 
+		@Captor
+		private ArgumentCaptor<ForwardVorgangCommandBody> bodyCaptor;
+
 		@Nested
 		class OnOrganisationsEinheitAvailable {
 
+			private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create();
 			@Captor
 			private ArgumentCaptor<CreateCommand> commandCaptor;
 
 			@BeforeEach
 			void init() {
 				when(organisationsEinheitController.getById(any())).thenReturn(
-						new ResponseEntity<>(EntityModel.of(OrganisationsEinheitTestFactory.create()), HttpStatus.OK));
+						new ResponseEntity<>(EntityModel.of(organisationsEinheit), HttpStatus.OK));
 				when(commandService.createCommand(any(), anyLong())).thenReturn(CommandTestFactory.create());
+				when(bodyMapper.updateFromOrganisationsEinheit(any(), any())).thenReturn(ForwardVorgangCommandBodyTestFactory.create());
 			}
 
 			@Test
@@ -98,6 +106,14 @@ class ForwardByVorgangCommandControllerTest {
 				verify(organisationsEinheitController).getById(OrganisationsEinheitTestFactory.ID);
 			}
 
+			@Test
+			void shouldAddOrganisationsEinheitData() {
+				doRequest();
+
+				verify(controller).createCommand(any(), anyLong(), commandCaptor.capture());
+				verify(bodyMapper).updateFromOrganisationsEinheit(organisationsEinheit, (ForwardVorgangCommandBody) commandCaptor.getValue().getBody());
+			}
+
 			@Test
 			void shouldCallCommandService() {
 				doRequest();
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java
new file mode 100644
index 0000000000..a0359b4484
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.alfa.forwarding;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.UUID;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import de.ozgcloud.alfa.collaboration.OrganisationsEinheitTestFactory;
+
+class ForwardVorgangCommandBodyMapperTest {
+
+	private final ForwardVorgangCommandBodyMapper mapper = Mappers.getMapper(ForwardVorgangCommandBodyMapper.class);
+
+	@Nested
+	class TestUpdateFromOrganisationsEinheit {
+
+		private static final String ORGANISATIONS_EINHEIT_ID = UUID.randomUUID().toString();
+
+		private final ForwardVorgangCommandBody body = ForwardVorgangCommandBody.builder()
+				.organisationsEinheitId(ORGANISATIONS_EINHEIT_ID).build();
+
+		@Test
+		void shouldUpdateFromOrganisationsEinheit() {
+			mapper.updateFromOrganisationsEinheit(OrganisationsEinheitTestFactory.create(), body);
+
+			assertThat(body).usingRecursiveComparison().ignoringFields("organisationsEinheitId")
+					.isEqualTo(ForwardVorgangCommandBodyTestFactory.create());
+		}
+
+		@Test
+		void shouldPreserveId() {
+			mapper.updateFromOrganisationsEinheit(OrganisationsEinheitTestFactory.create(), body);
+
+			assertThat(body.getOrganisationsEinheitId()).isEqualTo(ORGANISATIONS_EINHEIT_ID);
+		}
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
index ac8f4a4d34..3f36de6314 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
@@ -23,6 +23,7 @@
  */
 package de.ozgcloud.alfa.forwarding;
 
+import de.ozgcloud.alfa.collaboration.AnschriftTestFactory;
 import de.ozgcloud.alfa.collaboration.OrganisationsEinheitTestFactory;
 import de.ozgcloud.alfa.forwarding.ForwardVorgangCommandBody.ForwardVorgangCommandBodyBuilder;
 
@@ -36,6 +37,9 @@ class ForwardVorgangCommandBodyTestFactory {
 		return ForwardVorgangCommandBody.builder()
 				.organisationsEinheitId(OrganisationsEinheitTestFactory.ID)
 				.name(OrganisationsEinheitTestFactory.NAME)
-				.anschrift(OrganisationsEinheitTestFactory.ANSCHRIFT);
+				.strasse(AnschriftTestFactory.STRASSE)
+				.ort(AnschriftTestFactory.ORT)
+				.hausnummer(AnschriftTestFactory.HAUSNUMMER)
+				.plz(AnschriftTestFactory.PLZ);
 	}
 }
-- 
GitLab


From 7dc714eb7b7bb4d74a823f2147ddf1a0cd019549 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Mon, 10 Mar 2025 16:03:04 +0100
Subject: [PATCH 6/7] OZG-7501 OZG-7874 Simplify mapper

---
 .../alfa/forwarding/ForwardVorgangCommandBodyMapper.java     | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
index f766f9e94b..3026ef0557 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
@@ -33,9 +33,6 @@ import de.ozgcloud.alfa.collaboration.OrganisationsEinheit;
 interface ForwardVorgangCommandBodyMapper {
 
 	@Mapping(target = "organisationsEinheitId", ignore = true)
-	@Mapping(target = "strasse", source = "anschrift.strasse")
-	@Mapping(target = "hausnummer", source = "anschrift.hausnummer")
-	@Mapping(target = "plz", source = "anschrift.plz")
-	@Mapping(target = "ort", source = "anschrift.ort")
+	@Mapping(target = ".", source = "anschrift")
 	ForwardVorgangCommandBody updateFromOrganisationsEinheit(OrganisationsEinheit organisationsEinheit, @MappingTarget ForwardVorgangCommandBody commandBody);
 }
-- 
GitLab


From 0e3d53cca6749398e8744dc7fc4cc1407f8d8b58 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Thu, 13 Mar 2025 14:07:25 +0100
Subject: [PATCH 7/7] OZG-7501 OZG-7874 Small refactorings

---
 .../OrganisationsEinheitController.java       |   4 +
 .../ForwardByVorgangCommandController.java    |  18 +--
 .../forwarding/ForwardVorgangCommandBody.java |   2 +-
 .../ForwardVorgangCommandBodyMapper.java      |   4 +-
 .../OrganisationsEinheitControllerTest.java   |  21 ++++
 ...ForwardByVorgangCommandControllerTest.java | 110 +++++++-----------
 .../ForwardVorgangCommandBodyMapperTest.java  |  14 +--
 .../ForwardVorgangCommandBodyTestFactory.java |   2 +-
 8 files changed, 80 insertions(+), 95 deletions(-)

diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java
index bee8310c01..a67353b79b 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitController.java
@@ -59,4 +59,8 @@ public class OrganisationsEinheitController {
 	public CollectionModel<EntityModel<OrganisationsEinheitHeader>> search(@RequestParam String searchBy) {
 		return headerModelAssembler.toCollectionModel(service.searchOrganisationsEinheiten(searchBy).toList());
 	}
+
+	public OrganisationsEinheit getOrganisationEinheit(String organisationEinheitId) {
+		return service.getById(organisationEinheitId);
+	}
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
index fb5224959e..046d5308e0 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandController.java
@@ -32,12 +32,10 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import de.ozgcloud.alfa.collaboration.OrganisationsEinheit;
 import de.ozgcloud.alfa.collaboration.OrganisationsEinheitController;
 import de.ozgcloud.alfa.common.command.CommandController;
 import de.ozgcloud.alfa.common.command.CommandService;
 import de.ozgcloud.alfa.common.command.CreateCommand;
-import de.ozgcloud.common.errorhandling.TechnicalException;
 import lombok.RequiredArgsConstructor;
 
 @RestController
@@ -52,25 +50,19 @@ class ForwardByVorgangCommandController {
 
 	@PostMapping
 	public ResponseEntity<Void> createCommand(@PathVariable String vorgangId, @PathVariable long vorgangVersion, @RequestBody CreateCommand command) {
-		var body = (ForwardVorgangCommandBody) command.getBody();
+		var completeBody = addOrganisationEinheitData((ForwardVorgangCommandBody) command.getBody());
 		var enrichedCommand = command.toBuilder()
 				.vorgangId(vorgangId)
 				.relationId(vorgangId)
-				.body(addOrganisationsEinheitData(getOrganisationsEinheitById(body.getOrganisationsEinheitId()), body))
+				.body(completeBody)
 				.build();
 		var created = commandService.createCommand(enrichedCommand, vorgangVersion);
 		return ResponseEntity.created(linkTo(CommandController.class).slash(created.getId()).toUri()).build();
 	}
 
-	private OrganisationsEinheit getOrganisationsEinheitById(String id) {
-		var response = organisationsEinheitController.getById(id);
-		if (!response.getStatusCode().is2xxSuccessful() || response.getBody() == null) {
-			throw new TechnicalException("Could not get Organisationseinheit by id: " + id);
-		}
-		return response.getBody().getContent();
-	}
 
-	private ForwardVorgangCommandBody addOrganisationsEinheitData(OrganisationsEinheit organisationsEinheit, ForwardVorgangCommandBody body) {
-		return bodyMapper.updateFromOrganisationsEinheit(organisationsEinheit, body);
+	private ForwardVorgangCommandBody addOrganisationEinheitData(ForwardVorgangCommandBody body) {
+		var organisationEinheit = organisationsEinheitController.getOrganisationEinheit(body.getOrganisationEinheitId());
+		return bodyMapper.updateFromOrganisationEinheit(organisationEinheit, body);
 	}
 }
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
index db96ddecb3..7770b4333d 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBody.java
@@ -41,7 +41,7 @@ import lombok.Setter;
 public class ForwardVorgangCommandBody implements CommandBody {
 
 	@JsonDeserialize(using = LinkedResourceDeserializer.class)
-	private String organisationsEinheitId;
+	private String organisationEinheitId;
 
 	private String name;
 	private String strasse;
diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
index 3026ef0557..bd36a44d24 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapper.java
@@ -32,7 +32,7 @@ import de.ozgcloud.alfa.collaboration.OrganisationsEinheit;
 @Mapper
 interface ForwardVorgangCommandBodyMapper {
 
-	@Mapping(target = "organisationsEinheitId", ignore = true)
+	@Mapping(target = "organisationEinheitId", ignore = true)
 	@Mapping(target = ".", source = "anschrift")
-	ForwardVorgangCommandBody updateFromOrganisationsEinheit(OrganisationsEinheit organisationsEinheit, @MappingTarget ForwardVorgangCommandBody commandBody);
+	ForwardVorgangCommandBody updateFromOrganisationEinheit(OrganisationsEinheit organisationsEinheit, @MappingTarget ForwardVorgangCommandBody commandBody);
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitControllerTest.java
index 8f1efd6b99..32662710a9 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitControllerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/collaboration/OrganisationsEinheitControllerTest.java
@@ -23,6 +23,7 @@
  */
 package de.ozgcloud.alfa.collaboration;
 
+import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@@ -256,4 +257,24 @@ class OrganisationsEinheitControllerTest {
 		}
 	}
 
+	@Nested
+	class TestGetOrganisationEinheit {
+
+		@Test
+		void shouldCallService() {
+			controller.getOrganisationEinheit(OrganisationsEinheitTestFactory.ID);
+
+			verify(service).getById(OrganisationsEinheitTestFactory.ID);
+		}
+
+		@Test
+		void shouldReturnOrganisationEinheit() {
+			var organisationEinheitFromService = OrganisationsEinheitTestFactory.create();
+			when(service.getById(any())).thenReturn(organisationEinheitFromService);
+
+			var organisationsEinheit = controller.getOrganisationEinheit(OrganisationsEinheitTestFactory.ID);
+
+			assertThat(organisationsEinheit).isSameAs(organisationEinheitFromService);
+		}
+	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
index 908bf70e6b..09eb98b0ab 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardByVorgangCommandControllerTest.java
@@ -37,10 +37,7 @@ import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
-import org.springframework.hateoas.EntityModel;
-import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.ResultActions;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@@ -81,86 +78,57 @@ class ForwardByVorgangCommandControllerTest {
 	@Nested
 	class TestCreateCommand {
 
+		private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create();
 		@Captor
-		private ArgumentCaptor<ForwardVorgangCommandBody> bodyCaptor;
-
-		@Nested
-		class OnOrganisationsEinheitAvailable {
-
-			private final OrganisationsEinheit organisationsEinheit = OrganisationsEinheitTestFactory.create();
-			@Captor
-			private ArgumentCaptor<CreateCommand> commandCaptor;
-
-			@BeforeEach
-			void init() {
-				when(organisationsEinheitController.getById(any())).thenReturn(
-						new ResponseEntity<>(EntityModel.of(organisationsEinheit), HttpStatus.OK));
-				when(commandService.createCommand(any(), anyLong())).thenReturn(CommandTestFactory.create());
-				when(bodyMapper.updateFromOrganisationsEinheit(any(), any())).thenReturn(ForwardVorgangCommandBodyTestFactory.create());
-			}
-
-			@Test
-			void shouldCallOrganisationsEinheitController() {
-				doRequest();
-
-				verify(organisationsEinheitController).getById(OrganisationsEinheitTestFactory.ID);
-			}
-
-			@Test
-			void shouldAddOrganisationsEinheitData() {
-				doRequest();
-
-				verify(controller).createCommand(any(), anyLong(), commandCaptor.capture());
-				verify(bodyMapper).updateFromOrganisationsEinheit(organisationsEinheit, (ForwardVorgangCommandBody) commandCaptor.getValue().getBody());
-			}
-
-			@Test
-			void shouldCallCommandService() {
-				doRequest();
+		private ArgumentCaptor<CreateCommand> commandCaptor;
+		@Captor
+		private ArgumentCaptor<ForwardVorgangCommandBody> commandBodyCaptor;
 
-				verify(commandService).createCommand(commandCaptor.capture(), eq(VorgangHeaderTestFactory.VERSION));
-				assertThat(commandCaptor.getValue()).usingRecursiveComparison().isEqualTo(CreateForwardVorgangCommandTestFactory.create());
-			}
+		@BeforeEach
+		void init() {
+			when(organisationsEinheitController.getOrganisationEinheit(any())).thenReturn(organisationsEinheit);
+			when(commandService.createCommand(any(), anyLong())).thenReturn(CommandTestFactory.create());
+			when(bodyMapper.updateFromOrganisationEinheit(any(), any())).thenReturn(ForwardVorgangCommandBodyTestFactory.create());
+		}
 
-			@SneakyThrows
-			@Test
-			void shouldReturnCreated() {
-				var response = doRequest();
+		@Test
+		void shouldCallOrganisationsEinheitController() {
+			doRequest();
 
-				response.andExpect(status().isCreated());
-			}
+			verify(organisationsEinheitController).getOrganisationEinheit(OrganisationsEinheitTestFactory.ID);
+		}
 
-			@SneakyThrows
-			@Test
-			void shouldReturnLinkToCreatedCommand() {
-				var response = doRequest();
+		@Test
+		void shouldAddOrganisationsEinheitData() {
+			doRequest();
 
-				response.andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID));
-			}
+			verify(bodyMapper).updateFromOrganisationEinheit(same(organisationsEinheit), commandBodyCaptor.capture());
+			assertThat(commandBodyCaptor.getValue()).usingRecursiveComparison()
+					.isEqualTo(ForwardVorgangCommandBody.builder().organisationEinheitId(OrganisationsEinheitTestFactory.ID).build());
 		}
 
-		@Nested
-		class OnOrganisationsEinheitMissing {
-
-			@SneakyThrows
-			@Test
-			void shouldReturnInternalServerErrorIfNotFound() {
-				when(organisationsEinheitController.getById(any())).thenReturn(new ResponseEntity<>(HttpStatus.NOT_FOUND));
+		@Test
+		void shouldCallCommandService() {
+			doRequest();
 
-				var response = doRequest();
+			verify(commandService).createCommand(commandCaptor.capture(), eq(VorgangHeaderTestFactory.VERSION));
+			assertThat(commandCaptor.getValue()).usingRecursiveComparison().isEqualTo(CreateForwardVorgangCommandTestFactory.create());
+		}
 
-				response.andExpect(status().isInternalServerError());
-			}
+		@SneakyThrows
+		@Test
+		void shouldReturnCreated() {
+			var response = doRequest();
 
-			@SneakyThrows
-			@Test
-			void shouldReturnInternalServerErrorIfBodyIsEmpty() {
-				when(organisationsEinheitController.getById(any())).thenReturn(new ResponseEntity<>(null, HttpStatus.OK));
+			response.andExpect(status().isCreated());
+		}
 
-				var response = doRequest();
+		@SneakyThrows
+		@Test
+		void shouldReturnLinkToCreatedCommand() {
+			var response = doRequest();
 
-				response.andExpect(status().isInternalServerError());
-			}
+			response.andExpect(header().stringValues("location", "http://localhost" + COMMANDS_PATH + "/" + CommandTestFactory.ID));
 		}
 
 		@SneakyThrows
@@ -173,7 +141,7 @@ class ForwardByVorgangCommandControllerTest {
 		private String createContent() {
 			return CommandTestFactory.buildCreateCommandWithBodyContent(
 					CommandOrder.FORWARD_VORGANG,
-					"{\"organisationsEinheitId\":\"%s\"}".formatted(OrganisationsEinheitTestFactory.ID));
+					"{\"organisationEinheitId\":\"%s\"}".formatted(OrganisationsEinheitTestFactory.ID));
 		}
 	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java
index a0359b4484..084a164b9d 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyMapperTest.java
@@ -38,26 +38,26 @@ class ForwardVorgangCommandBodyMapperTest {
 	private final ForwardVorgangCommandBodyMapper mapper = Mappers.getMapper(ForwardVorgangCommandBodyMapper.class);
 
 	@Nested
-	class TestUpdateFromOrganisationsEinheit {
+	class TestUpdateFromOrganisationEinheit {
 
 		private static final String ORGANISATIONS_EINHEIT_ID = UUID.randomUUID().toString();
 
 		private final ForwardVorgangCommandBody body = ForwardVorgangCommandBody.builder()
-				.organisationsEinheitId(ORGANISATIONS_EINHEIT_ID).build();
+				.organisationEinheitId(ORGANISATIONS_EINHEIT_ID).build();
 
 		@Test
-		void shouldUpdateFromOrganisationsEinheit() {
-			mapper.updateFromOrganisationsEinheit(OrganisationsEinheitTestFactory.create(), body);
+		void shouldUpdateFromOrganisationEinheit() {
+			mapper.updateFromOrganisationEinheit(OrganisationsEinheitTestFactory.create(), body);
 
-			assertThat(body).usingRecursiveComparison().ignoringFields("organisationsEinheitId")
+			assertThat(body).usingRecursiveComparison().ignoringFields("organisationEinheitId")
 					.isEqualTo(ForwardVorgangCommandBodyTestFactory.create());
 		}
 
 		@Test
 		void shouldPreserveId() {
-			mapper.updateFromOrganisationsEinheit(OrganisationsEinheitTestFactory.create(), body);
+			mapper.updateFromOrganisationEinheit(OrganisationsEinheitTestFactory.create(), body);
 
-			assertThat(body.getOrganisationsEinheitId()).isEqualTo(ORGANISATIONS_EINHEIT_ID);
+			assertThat(body.getOrganisationEinheitId()).isEqualTo(ORGANISATIONS_EINHEIT_ID);
 		}
 	}
 }
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
index 3f36de6314..abf89a2543 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/forwarding/ForwardVorgangCommandBodyTestFactory.java
@@ -35,7 +35,7 @@ class ForwardVorgangCommandBodyTestFactory {
 
 	static ForwardVorgangCommandBodyBuilder createBuilder() {
 		return ForwardVorgangCommandBody.builder()
-				.organisationsEinheitId(OrganisationsEinheitTestFactory.ID)
+				.organisationEinheitId(OrganisationsEinheitTestFactory.ID)
 				.name(OrganisationsEinheitTestFactory.NAME)
 				.strasse(AnschriftTestFactory.STRASSE)
 				.ort(AnschriftTestFactory.ORT)
-- 
GitLab