diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto index b1c4bad8c989562a34bd0f821ed472b28a0cebcf..5f9efe1e4c9399cf8eecada3d7a23b1e89909f02 100644 --- a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto +++ b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto @@ -63,6 +63,13 @@ message GrpcVorgangWithEingang { message GrpcVorgangHead { GrpcServiceKonto serviceKonto = 1; + GrpcLock lock = 2; +} + +message GrpcLock { + string clientName = 1; + string lockedSince = 2; + string reason = 3; } message GrpcEingang { diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHeadMapper.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHeadMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..2c3e40b1a4bc0b79a609f87a6a6bdf6b7f09b111 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangHeadMapper.java @@ -0,0 +1,39 @@ +/* + * Copyright (C) 2024 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; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValuePropertyMappingStrategy; + +import de.ozgcloud.vorgang.servicekonto.ServiceKontoMapper; + +@Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // + nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // + uses = { ServiceKontoMapper.class }) +public interface VorgangHeadMapper { + + GrpcVorgangHead toGrpc(VorgangHead vorgangHead); + +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapper.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapper.java index d75ab5873cd6342996cdc7fe98c57032362ac079..c9a1b30ac65afc4108f946c1b21130349746df6f 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapper.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapper.java @@ -33,11 +33,10 @@ import org.mapstruct.NullValuePropertyMappingStrategy; import org.springframework.beans.factory.annotation.Autowired; import de.ozgcloud.vorgang.clientattribute.ClientAttributeMapper; -import de.ozgcloud.vorgang.servicekonto.ServiceKontoMapper; @Mapper(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE, // nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, // - uses = { EingangMapper.class, ClientAttributeMapper.class, ServiceKontoMapper.class }) + uses = { EingangMapper.class, ClientAttributeMapper.class, VorgangHeadMapper.class }) public abstract class VorgangWithEingangMapper { @Autowired diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java index c311293e45ec074b4b851c360079d8af4604f295..784f0e26762198dfac1d195b47e7e5ed64512648 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/command/GrpcCommandServiceITCase.java @@ -39,7 +39,6 @@ import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommand; import de.ozgcloud.vorgang.grpc.command.GrpcCreateCommandRequest; import de.ozgcloud.vorgang.grpc.command.GrpcFindCommandsRequest; import de.ozgcloud.vorgang.grpc.command.GrpcRevokeCommandRequest; -import de.ozgcloud.vorgang.vorgang.LockTestFactory; import de.ozgcloud.vorgang.vorgang.Vorgang; import de.ozgcloud.vorgang.vorgang.VorgangHeadTestFactory; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; @@ -125,9 +124,7 @@ class GrpcCommandServiceITCase { } Vorgang buildLockedVorgang() { - return VorgangTestFactory.createBuilder().id(null).version(0) - .header(VorgangHeadTestFactory.createBuilder().lock(LockTestFactory.create()).build()) - .build(); + return VorgangTestFactory.createBuilder().id(null).version(0).header(VorgangHeadTestFactory.create()).build(); } } @@ -236,7 +233,7 @@ class GrpcCommandServiceITCase { @Test void shouldFailOnLockedVorgang() { - mongoOperations.save(vorgang.toBuilder().header(VorgangHeadTestFactory.createBuilder().lock(LockTestFactory.create()).build()).build()); + mongoOperations.save(vorgang.toBuilder().header(VorgangHeadTestFactory.create()).build()); var request = buildAddSubCommandsRequest(parentCommand.getId(), buildCreateCommand()); Assertions.assertThrows(StatusRuntimeException.class, () -> serviceBlockingStub.addSubCommands(request)); diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcLockTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcLockTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..4d1a76fea6b05042afa532bf250c5beee236666e --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcLockTestFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2024 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; + +public class GrpcLockTestFactory { + + public static GrpcLock create() { + return createBuilder().build(); + } + + public static GrpcLock.Builder createBuilder() { + return GrpcLock.newBuilder() + .setClientName(LockTestFactory.CLIENT_NAME) + .setLockedSince(LockTestFactory.LOCKED_SINCE_STR) + .setReason(LockTestFactory.REASON); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangHeadTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangHeadTestFactory.java index 2dad17c7bcb3ef89ddb5c8a1aea0f39d5af7bd8b..9cf5020e2d1cbbf5f9bd105e3887d4ac45c4ca14 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangHeadTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangHeadTestFactory.java @@ -4,12 +4,15 @@ import de.ozgcloud.vorgang.servicekonto.GrpcServiceKontoTestFactory; public class GrpcVorgangHeadTestFactory { + public static final GrpcLock LOCK = GrpcLockTestFactory.create(); + public static GrpcVorgangHead create() { return createBuilder().build(); } public static GrpcVorgangHead.Builder createBuilder() { return GrpcVorgangHead.newBuilder() - .setServiceKonto(GrpcServiceKontoTestFactory.create()); + .setServiceKonto(GrpcServiceKontoTestFactory.create()) + .setLock(LOCK); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangHeadMapperTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangHeadMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..7020a6a957d154a73ea39b3d9b89a06d62e89c04 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangHeadMapperTest.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2024 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; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.vorgang.servicekonto.GrpcServiceKontoTestFactory; +import de.ozgcloud.vorgang.servicekonto.ServiceKontoMapper; + +class VorgangHeadMapperTest { + + @InjectMocks + private VorgangHeadMapper mapper = Mappers.getMapper(VorgangHeadMapper.class); + + @Mock + private ServiceKontoMapper serviceKontoMapper; + + @BeforeEach + void init() { + when(serviceKontoMapper.toServiceKonto(any())).thenReturn(GrpcServiceKontoTestFactory.create()); + } + + @Test + void shouldCallToServiceKonto() { + mapper.toGrpc(VorgangHeadTestFactory.create()); + + verify(serviceKontoMapper).toServiceKonto(VorgangHeadTestFactory.SERVICE_KONTO); + } + + @Test + void shouldMap() { + var result = mapper.toGrpc(VorgangHeadTestFactory.create()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcVorgangHeadTestFactory.create()); + } +} \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangHeadTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangHeadTestFactory.java index 3df7b94939e7c79fcf36323a02036948d29340d3..fa00c709994f056c37eab9475c82472ff88dee49 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangHeadTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangHeadTestFactory.java @@ -1,15 +1,20 @@ package de.ozgcloud.vorgang.vorgang; +import de.ozgcloud.vorgang.servicekonto.ServiceKonto; import de.ozgcloud.vorgang.servicekonto.ServiceKontoTestFactory; public class VorgangHeadTestFactory { + public static final Lock LOCK = LockTestFactory.create(); + public static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create(); + public static VorgangHead create() { return createBuilder().build(); } public static VorgangHead.VorgangHeadBuilder createBuilder() { return VorgangHead.builder() - .serviceKonto(ServiceKontoTestFactory.create()); + .serviceKonto(SERVICE_KONTO) + .lock(LOCK); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangRepositoryITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangRepositoryITCase.java index 5c19d5706ef924567ad20210af95d4b731adef51..9d19e8a701453ad636c4458f45d9de1f30b2927b 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangRepositoryITCase.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangRepositoryITCase.java @@ -366,9 +366,8 @@ class VorgangRepositoryITCase { @Test void shouldReturnTrue() { - var vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0) - .header(VorgangHeadTestFactory.createBuilder().lock(LockTestFactory.create()).build()) - .build()); + var vorgang = mongoOperations.save( + VorgangTestFactory.createBuilder().id(null).version(0).header(VorgangHeadTestFactory.create()).build()); var isLocked = repository.isVorgangLocked(vorgang.getId()); diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangTestFactory.java index ab5b9993fd21163e0584405f38972ca7b1970675..f3631378b23be339f5be8a007839fb39cf730e76 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangTestFactory.java @@ -75,7 +75,7 @@ public class VorgangTestFactory { .nummer(VORGANG_NUMMER) .status(STATUS) .createdAt(CREATED_AT) - .header(VorgangHeadTestFactory.create()) + .header(VorgangHeadTestFactory.createBuilder().lock(null).build()) .eingang(EINGANG) .version(VERSION) .assignedTo(UserTestFactory.ID) diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapperTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapperTest.java index fb2835b2c69b35167c8a9c5d5a50a8d1a0fa70df..6dc2cd029d86caec2456487167c31f85fd3fda05 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapperTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangWithEingangMapperTest.java @@ -35,8 +35,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import de.ozgcloud.vorgang.clientattribute.ClientAttributeMapper; -import de.ozgcloud.vorgang.servicekonto.GrpcServiceKontoTestFactory; -import de.ozgcloud.vorgang.servicekonto.ServiceKontoMapper; class VorgangWithEingangMapperTest { @@ -47,7 +45,7 @@ class VorgangWithEingangMapperTest { @Mock private ClientAttributeMapper clientAttributeMapper; @Mock - private ServiceKontoMapper serviceKontoMapper; + private VorgangHeadMapper vorgangHeadMapper; @Nested class TestToVorgangWithEingang { @@ -55,7 +53,7 @@ class VorgangWithEingangMapperTest { @BeforeEach void mockEingangMapper() { when(eingangMapper.toGrpc(any(Eingang.class))).thenReturn(GrpcEingangTestFactory.create()); - when(serviceKontoMapper.toServiceKonto(any())).thenReturn(GrpcServiceKontoTestFactory.create()); + when(vorgangHeadMapper.toGrpc(any())).thenReturn(GrpcVorgangHeadTestFactory.createBuilder().setLock(GrpcLockTestFactory.create()).build()); } @Test @@ -70,7 +68,7 @@ class VorgangWithEingangMapperTest { var vorgangWithEingang = callMapper(); assertThat(vorgangWithEingang).usingRecursiveComparison() - .ignoringFields("eingang_", "clientAttributes_", "memoizedHashCode", "header_") + .ignoringFields("eingang_", "clientAttributes_", "memoizedHashCode") .isEqualTo(GrpcVorgangWithEingangTestFactory.create()); }