From 7dad571b0e970c9eec75fdbd1144610d52d0d662 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Fri, 13 Dec 2024 16:32:22 +0100 Subject: [PATCH] OZG-7350 implement GrpcCreateCollaborationRequestData with Fachstelle --- .../src/main/protobuf/vorgang.model.proto | 14 ++++++++- .../collaboration/CollaborationService.java | 2 +- .../CreateCollaborationVorgangRequest.java | 2 +- ...eateCollaborationVorgangRequestMapper.java | 2 +- .../vorgang/collaboration/Fachstelle.java | 19 ++++++++++++ .../collaboration/FachstelleMapper.java | 15 ++++++++++ .../CollaborationServiceTest.java | 13 +++++---- ...CollaborationVorgangRequestMapperTest.java | 29 ++++++++++++++++--- ...ollaborationVorgangRequestTestFactory.java | 4 +-- .../collaboration/FachstelleMapperTest.java | 23 +++++++++++++++ .../collaboration/FachstelleTestFactory.java | 24 +++++++++++++++ ...teCollaborationRequestDataTestFactory.java | 6 ++-- .../GrpcFachstelleTestFactory.java | 22 ++++++++++++++ 13 files changed, 157 insertions(+), 18 deletions(-) create mode 100644 vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/Fachstelle.java create mode 100644 vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/FachstelleMapper.java create mode 100644 vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleMapperTest.java create mode 100644 vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleTestFactory.java create mode 100644 vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcFachstelleTestFactory.java diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto index 5f9efe1e4..9b3cfb17e 100644 --- a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto +++ b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto @@ -213,7 +213,19 @@ message GrpcCreateCollaborationVorgangRequest { message GrpcCreateCollaborationRequestData { string vorgangId = 1; int32 collaborationLevel = 2; - string zustaendigeStelle = 3; + reserved 3; + GrpcFachstelle zustaendigeStelle = 4; +} + +message GrpcFachstelle { + string technicalId = 1; + string subjectId = 2; + GrpcFachstelleType type = 3; +} + +enum GrpcFachstelleType{ + ORGANISATIONS_EINHEIT = 0; + EXTERNE_FACHSTELLE = 1; } message GrpcCreateCollaborationVorgangResponse { diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java index 763856b36..1a3e8b76d 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CollaborationService.java @@ -59,7 +59,7 @@ public class CollaborationService { VorgangHead getHeader(CreateCollaborationVorgangRequest request) { return request.getVorgang().getHeader().toBuilder() .collaborationLevel(request.getCollaborationLevel()) - .organisationsEinheitId(request.getZustaendigeStelle()) + .organisationsEinheitId(request.getZustaendigeStelle().getSubjectId()) .build(); } } diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequest.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequest.java index 44f61fed6..ed2b46751 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequest.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequest.java @@ -33,5 +33,5 @@ public class CreateCollaborationVorgangRequest { private Vorgang vorgang; private int collaborationLevel; - private String zustaendigeStelle; + private Fachstelle zustaendigeStelle; } diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapper.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapper.java index e7d98214f..e5674aa21 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapper.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapper.java @@ -29,7 +29,7 @@ import org.mapstruct.ReportingPolicy; import de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationRequestData; -@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN, uses = FachstelleMapper.class) public interface CreateCollaborationVorgangRequestMapper { @Mapping(target = "vorgang", ignore = true) diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/Fachstelle.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/Fachstelle.java new file mode 100644 index 000000000..d472a536e --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/Fachstelle.java @@ -0,0 +1,19 @@ +package de.ozgcloud.vorgang.collaboration; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Builder +@Getter +@EqualsAndHashCode +public class Fachstelle { + + private String technicalId; + private String subjectId; + private FachstelleType type; + + public enum FachstelleType { + EXTERNE_FACHSTELLE, ORGANISATIONS_EINHEIT; + } +} \ No newline at end of file diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/FachstelleMapper.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/FachstelleMapper.java new file mode 100644 index 000000000..b6d38bce4 --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/FachstelleMapper.java @@ -0,0 +1,15 @@ +package de.ozgcloud.vorgang.collaboration; + +import org.mapstruct.Mapper; +import org.mapstruct.MappingConstants; +import org.mapstruct.ReportingPolicy; +import org.mapstruct.ValueMapping; + +import de.ozgcloud.vorgang.vorgang.GrpcFachstelle; + +@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN) +interface FachstelleMapper { + + @ValueMapping(source = MappingConstants.ANY_REMAINING, target = MappingConstants.THROW_EXCEPTION) + Fachstelle fromGrpc(GrpcFachstelle fachstelle); +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java index 01e063f2c..1f21a7720 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationServiceTest.java @@ -24,6 +24,7 @@ package de.ozgcloud.vorgang.collaboration; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.time.ZonedDateTime; @@ -46,7 +47,6 @@ import de.ozgcloud.vorgang.vorgang.Vorgang; import de.ozgcloud.vorgang.vorgang.VorgangHead; import de.ozgcloud.vorgang.vorgang.VorgangHeadTestFactory; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; -import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; class CollaborationServiceTest { @@ -62,7 +62,8 @@ class CollaborationServiceTest { @Nested class TestCreateCollaborationVorgang { - private static final CreateCollaborationVorgangRequest CREATE_COLLABORATION_VORGANG_REQUEST = CreateCollaborationVorgangRequestTestFactory.create(); + private static final CreateCollaborationVorgangRequest CREATE_COLLABORATION_VORGANG_REQUEST = CreateCollaborationVorgangRequestTestFactory + .create(); private static final String COLLABORATION_VORGANG_ID = "collaboration-vorgang-id"; private static final Vorgang SAVED_VORGANG = VorgangTestFactory.createBuilder().id(COLLABORATION_VORGANG_ID).build(); @@ -97,8 +98,8 @@ class CollaborationServiceTest { verifyNoInteractions(publisher); // TODO: aktiviere, wenn VorgangCreatedEvent veröffentlicht wird - // verify(publisher).publishEvent(eventCaptor.capture()); - // assertThat(eventCaptor.getValue().getSource()).isEqualTo(COLLABORATION_VORGANG_ID); + // verify(publisher).publishEvent(eventCaptor.capture()); + // assertThat(eventCaptor.getValue().getSource()).isEqualTo(COLLABORATION_VORGANG_ID); } @Test @@ -228,10 +229,10 @@ class CollaborationServiceTest { private static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create(); @Test - void shouldSetZustaendigeStelle() { + void shouldSetOrganisationsEinheitId() { var result = getHeader(); - assertThat(result.getOrganisationsEinheitId()).isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); + assertThat(result.getOrganisationsEinheitId()).isEqualTo(FachstelleTestFactory.SUBJECT_ID); } @Test diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapperTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapperTest.java index 813820f57..208327dbd 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapperTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestMapperTest.java @@ -24,18 +24,39 @@ package de.ozgcloud.vorgang.collaboration; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; +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; class CreateCollaborationVorgangRequestMapperTest { + @InjectMocks private final CreateCollaborationVorgangRequestMapper mapper = Mappers.getMapper(CreateCollaborationVorgangRequestMapper.class); - @Test - void shouldMapFromGrpc() { - var result = mapper.mapFrom(GrpcCreateCollaborationRequestDataTestFactory.create()); + @Mock + private FachstelleMapper fachstelleMapper; - assertThat(result).usingRecursiveComparison().ignoringFields("vorgang").isEqualTo(CreateCollaborationVorgangRequestTestFactory.create()); + @Nested + class TestMapFrom { + @Test + void shouldCallFachstelleMapper() { + mapper.mapFrom(GrpcCreateCollaborationRequestDataTestFactory.create()); + + verify(fachstelleMapper).fromGrpc(GrpcCreateCollaborationRequestDataTestFactory.FACHSTELLE); + } + + @Test + void shouldMapFromGrpc() { + when(fachstelleMapper.fromGrpc(any())).thenReturn(FachstelleTestFactory.create()); + + var result = mapper.mapFrom(GrpcCreateCollaborationRequestDataTestFactory.create()); + + assertThat(result).usingRecursiveComparison().ignoringFields("vorgang").isEqualTo(CreateCollaborationVorgangRequestTestFactory.create()); + } } } \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestTestFactory.java index 642dd5385..e6c8f11d5 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangRequestTestFactory.java @@ -25,10 +25,10 @@ package de.ozgcloud.vorgang.collaboration; import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequest.CreateCollaborationVorgangRequestBuilder; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; -import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; public class CreateCollaborationVorgangRequestTestFactory { + public static final Fachstelle ZUSTAENDIGE_STELLE = FachstelleTestFactory.create(); public static final int COLLABORATION_LEVEL = 1; public static CreateCollaborationVorgangRequest create() { @@ -38,7 +38,7 @@ public class CreateCollaborationVorgangRequestTestFactory { public static CreateCollaborationVorgangRequestBuilder createBuilder() { return CreateCollaborationVorgangRequest.builder() .vorgang(VorgangTestFactory.create()) - .zustaendigeStelle(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID) + .zustaendigeStelle(ZUSTAENDIGE_STELLE) .collaborationLevel(COLLABORATION_LEVEL); } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleMapperTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleMapperTest.java new file mode 100644 index 000000000..553ea10dd --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleMapperTest.java @@ -0,0 +1,23 @@ +package de.ozgcloud.vorgang.collaboration; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +class FachstelleMapperTest { + + private final FachstelleMapper mapper = Mappers.getMapper(FachstelleMapper.class); + + @Nested + class TestFromGrpc { + + @Test + void shouldMap() { + var fachstelle = mapper.fromGrpc(GrpcFachstelleTestFactory.create()); + + assertThat(fachstelle).isEqualTo(FachstelleTestFactory.create()); + } + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleTestFactory.java new file mode 100644 index 000000000..d1ffaa975 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/FachstelleTestFactory.java @@ -0,0 +1,24 @@ +package de.ozgcloud.vorgang.collaboration; + +import java.util.UUID; + +import de.ozgcloud.vorgang.collaboration.Fachstelle.FachstelleBuilder; +import de.ozgcloud.vorgang.collaboration.Fachstelle.FachstelleType; + +public class FachstelleTestFactory { + + public static final FachstelleType TYPE = FachstelleType.ORGANISATIONS_EINHEIT; + public static final String SUBJECT_ID = UUID.randomUUID().toString(); + public static final String TECHNICAL_ID = UUID.randomUUID().toString(); + + public static Fachstelle create() { + return createBuilder().build(); + } + + public static FachstelleBuilder createBuilder() { + return Fachstelle.builder() + .subjectId(SUBJECT_ID) + .technicalId(TECHNICAL_ID) + .type(TYPE); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationRequestDataTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationRequestDataTestFactory.java index 139b28a5c..367e272d4 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationRequestDataTestFactory.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationRequestDataTestFactory.java @@ -24,11 +24,13 @@ package de.ozgcloud.vorgang.collaboration; import de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationRequestData; +import de.ozgcloud.vorgang.vorgang.GrpcFachstelle; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; -import de.ozgcloud.vorgang.vorgang.ZustaendigeStelleTestFactory; public class GrpcCreateCollaborationRequestDataTestFactory { + public static final GrpcFachstelle FACHSTELLE = GrpcFachstelleTestFactory.create(); + public static GrpcCreateCollaborationRequestData create() { return createBuilder().build(); } @@ -36,7 +38,7 @@ public class GrpcCreateCollaborationRequestDataTestFactory { public static GrpcCreateCollaborationRequestData.Builder createBuilder() { return GrpcCreateCollaborationRequestData.newBuilder() .setVorgangId(VorgangTestFactory.ID) - .setZustaendigeStelle(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID) + .setZustaendigeStelle(FACHSTELLE) .setCollaborationLevel(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcFachstelleTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcFachstelleTestFactory.java new file mode 100644 index 000000000..4759c8c83 --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcFachstelleTestFactory.java @@ -0,0 +1,22 @@ +package de.ozgcloud.vorgang.collaboration; + +import de.ozgcloud.vorgang.vorgang.GrpcFachstelle; +import de.ozgcloud.vorgang.vorgang.GrpcFachstelleType; + +public class GrpcFachstelleTestFactory { + + public static final GrpcFachstelleType TYPE = GrpcFachstelleType.valueOf(FachstelleTestFactory.TYPE.name()); + public static final String SUBJECT_ID = FachstelleTestFactory.SUBJECT_ID; + public static final String TECHNICAL_ID = FachstelleTestFactory.TECHNICAL_ID; + + public static GrpcFachstelle create() { + return createBuilder().build(); + } + + public static GrpcFachstelle.Builder createBuilder() { + return GrpcFachstelle.newBuilder() + .setSubjectId(SUBJECT_ID) + .setTechnicalId(TECHNICAL_ID) + .setType(TYPE); + } +} -- GitLab