diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/EingangMapper.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/EingangMapper.java index f072e0ec6d69a38eba82bad30737494c3c465095..0c5dcaafc4d2791f2855df3ee0611a9c7707f0da 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/EingangMapper.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/EingangMapper.java @@ -36,7 +36,7 @@ import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) -interface EingangMapper { +public interface EingangMapper { @Mapping(source = "attachmentsList", target = "attachments") @Mapping(source = "representationsList", target = "representations") diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapper.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapper.java index e47ae180e85e18dc7466278b994f02f1886ce28b..2e32110106d1b8b4a0a39e6fd3506768152fbf95 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapper.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapper.java @@ -26,12 +26,24 @@ package de.ozgcloud.vorgang.vorgang.redirect; import java.util.Map; import org.apache.commons.collections4.MapUtils; +import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValuePropertyMappingStrategy; import de.ozgcloud.command.Command; +import de.ozgcloud.eingang.forwarding.GrpcEingangStub; +import de.ozgcloud.eingang.forwarding.GrpcRouteCriteria; +import de.ozgcloud.eingang.forwarding.GrpcRouteForwarding; +import de.ozgcloud.vorgang.vorgang.Eingang; +import de.ozgcloud.vorgang.vorgang.EingangMapper; +import de.ozgcloud.vorgang.vorgang.GrpcEingang; -@Mapper(imports = MapUtils.class) +@Mapper(imports = MapUtils.class, uses = EingangMapper.class, // + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // + collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED) interface ForwardingRequestMapper { interface CommandBodyFields { @@ -42,7 +54,7 @@ interface ForwardingRequestMapper { String PLZ = "plz"; String ORT = "ort"; } - + @Mapping(target = "version", source = "relationVersion") @Mapping(target = "organisationEinheit", source = "bodyObject") ForwardingRequest fromCommand(Command command); @@ -57,4 +69,17 @@ interface ForwardingRequestMapper { @Mapping(target = "zipCode", expression = "java(MapUtils.getString(body, CommandBodyFields.PLZ))") @Mapping(target = "city", expression = "java(MapUtils.getString(body, CommandBodyFields.ORT))") Address toAddress(Map<String, Object> body); + + @Mapping(target = "routeCriteria", source = "request") + @Mapping(target = "eingangStub", source = "eingang") + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcRouteForwarding toGrpcRouteForwarding(ForwardingRequest request, Eingang eingang); + + @Mapping(target = "organisationEinheitId", source = "organisationEinheit.id") + GrpcRouteCriteria toGrpcRouteCriteria(ForwardingRequest request); + + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "allFields", ignore = true) + GrpcEingangStub toGrpcEingangStub(GrpcEingang eingang); } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcEingangTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcEingangTestFactory.java index 79acc665d6b1e91a113c120c9c4f3b4455499b6b..e149cbf5b3a682ae4628b2862a8d34c25fb6dd6f 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcEingangTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcEingangTestFactory.java @@ -25,12 +25,11 @@ package de.ozgcloud.vorgang.vorgang; import java.util.UUID; -import de.ozgcloud.vorgang.common.grpc.GrpcSubFormTestFactory; +import de.ozgcloud.vorgang.common.grpc.GrpcFormDataTestFactory; public class GrpcEingangTestFactory { public static final String ID = UUID.randomUUID().toString(); - public static final GrpcSubForm SUB_FORM = GrpcSubFormTestFactory.create(); public static GrpcEingang create() { return createBuilder().build(); @@ -42,7 +41,7 @@ public class GrpcEingangTestFactory { .setHeader(GrpcEingangHeaderTestFactory.create()) .setAntragsteller(GrpcAntragstellerTestFactory.create()) .setZustaendigeStelle(GrpcZustaendigeStelleTestFactory.create()) - .setFormData(GrpcFormData.newBuilder().addForm(GrpcSubFormTestFactory.create()).build()) + .setFormData(GrpcFormDataTestFactory.create()) .addAttachments(GrpcIncomingFileGroupTestFactory.create()) .setNumberOfAttachments(4) .addRepresentations(GrpcIncomingFileTestFactory.create()) diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapperTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapperTest.java index 715529e268ded4133f6e9962fada6f8ce2c8ca35..ffa5197108a4c22c78753140c2f2dd3da9d74be5 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapperTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/ForwardingRequestMapperTest.java @@ -32,14 +32,26 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.eingang.forwarding.GrpcRouteCriteria; +import de.ozgcloud.eingang.forwarding.GrpcRouteForwarding; import de.ozgcloud.vorgang.command.CommandTestFactory; +import de.ozgcloud.vorgang.vorgang.Eingang; +import de.ozgcloud.vorgang.vorgang.EingangMapper; +import de.ozgcloud.vorgang.vorgang.EingangTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcEingang; +import de.ozgcloud.vorgang.vorgang.GrpcEingangTestFactory; import de.ozgcloud.vorgang.vorgang.redirect.ForwardingRequestMapper.CommandBodyFields; class ForwardingRequestMapperTest { + @Mock + private EingangMapper eingangMapper; @Spy + @InjectMocks private ForwardingRequestMapper mapper = Mappers.getMapper(ForwardingRequestMapper.class); private final Map<String, Object> bodyObject = Map.of( CommandBodyFields.ORGANISATION_EINHEIT_ID, OrganisationEinheitTestFactory.ID, @@ -118,4 +130,65 @@ class ForwardingRequestMapperTest { return mapper.toAddress(bodyObject); } } + + @Nested + class TestToGrpcRouteForwarding { + + private final ForwardingRequest request = ForwardingRequestTestFactory.create(); + private final Eingang eingang = EingangTestFactory.create(); + private final GrpcEingang grpcEingang = GrpcEingangTestFactory.create(); + + @BeforeEach + void init() { + doReturn(GrpcRouteCriteriaTestFactory.create()).when(mapper).toGrpcRouteCriteria(any()); + when(eingangMapper.toGrpc(any())).thenReturn(grpcEingang); + } + + @Test + void shouldCallEingangMapper() { + map(); + + verify(eingangMapper).toGrpc(eingang); + } + + @Test + void shouldMapToGrpcRouteCriteria() { + map(); + + verify(mapper).toGrpcRouteCriteria(request); + } + + @Test + void shouldMapToGrpcEingangStub() { + map(); + + verify(mapper).toGrpcEingangStub(grpcEingang); + } + + @Test + void shouldMapToGrpcRouteForwarding() { + var mapped = map(); + + assertThat(mapped).isEqualTo(GrpcRouteForwardingTestFactory.create()); + } + + private GrpcRouteForwarding map() { + return mapper.toGrpcRouteForwarding(request, eingang); + } + } + + @Nested + class TestToGrpcRouteCriteria { + + @Test + void shouldMap() { + var mapped = map(); + + assertThat(mapped).isEqualTo(GrpcRouteCriteriaTestFactory.create()); + } + + private GrpcRouteCriteria map() { + return mapper.toGrpcRouteCriteria(ForwardingRequestTestFactory.create()); + } + } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcEingangStubTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcEingangStubTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..6cdd06a4a1b2ad6af5d26bd3265c76ce2890cba6 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcEingangStubTestFactory.java @@ -0,0 +1,43 @@ +/* + * 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.vorgang.vorgang.redirect; + +import de.ozgcloud.eingang.forwarding.GrpcEingangStub; +import de.ozgcloud.vorgang.common.grpc.GrpcFormDataTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcAntragstellerTestFactory; +import de.ozgcloud.vorgang.vorgang.GrpcEingangHeaderTestFactory; + +class GrpcEingangStubTestFactory { + + public static GrpcEingangStub create() { + return createBuilder().build(); + } + + public static GrpcEingangStub.Builder createBuilder() { + return GrpcEingangStub.newBuilder() + .setHeader(GrpcEingangHeaderTestFactory.create()) + .setAntragsteller(GrpcAntragstellerTestFactory.create()) + .setFormData(GrpcFormDataTestFactory.create()); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcRouteCriteriaTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcRouteCriteriaTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..e28c74034003854c9467922062a80a86f24185f8 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcRouteCriteriaTestFactory.java @@ -0,0 +1,38 @@ +/* + * 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.vorgang.vorgang.redirect; + +import de.ozgcloud.eingang.forwarding.GrpcRouteCriteria; + +class GrpcRouteCriteriaTestFactory { + + public static GrpcRouteCriteria create() { + return createBuilder().build(); + } + + public static GrpcRouteCriteria.Builder createBuilder() { + return GrpcRouteCriteria.newBuilder() + .setOrganisationEinheitId(OrganisationEinheitTestFactory.ID); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcRouteForwardingTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcRouteForwardingTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..badf9c7b5c9aa3536c559cf51d09540ab2696c45 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/GrpcRouteForwardingTestFactory.java @@ -0,0 +1,39 @@ +/* + * 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.vorgang.vorgang.redirect; + +import de.ozgcloud.eingang.forwarding.GrpcRouteForwarding; + +class GrpcRouteForwardingTestFactory { + + public static GrpcRouteForwarding create() { + return createBuilder().build(); + } + + public static GrpcRouteForwarding.Builder createBuilder() { + return GrpcRouteForwarding.newBuilder() + .setRouteCriteria(GrpcRouteCriteriaTestFactory.create()) + .setEingangStub(GrpcEingangStubTestFactory.create()); + } +} diff --git a/vorgang-manager-utils/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcFormDataTestFactory.java b/vorgang-manager-utils/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcFormDataTestFactory.java index b715c9098e9cc4134bcd1281a403563c4641dce5..b2ece13fb2d6da2eb81877c35beba4e3112ac060 100644 --- a/vorgang-manager-utils/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcFormDataTestFactory.java +++ b/vorgang-manager-utils/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcFormDataTestFactory.java @@ -34,6 +34,6 @@ public class GrpcFormDataTestFactory { public static Builder createBuilder() { return GrpcFormData.newBuilder() - .addField(GrpcFormFieldTestFactory.create()); + .addForm(GrpcSubFormTestFactory.create()); } }