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 c9928a5d9a9fb5aef10250ac69e87dd849b79685..fb5224959e192909860768e2c846469a9d64033a 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 14c6d31e0e3f116481ad4fcb40dda6adf66c15b7..db96ddecb3ee2614764377c4cd8458dfaaa98ba9 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 0000000000000000000000000000000000000000..f766f9e94b76df0b35729de5bdc89e0d44af1363 --- /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 d048bea2da6737fd5431416bc760977c7de3d093..908bf70e6b5f1c597534a6156b6b157351a904aa 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 0000000000000000000000000000000000000000..a0359b44844236f5db8d218aebeb411f6d198879 --- /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 ac8f4a4d34f56639ace3aa31e26a40eee693d6ab..3f36de63145a0efcf681a5f54a05152c92227863 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); } }