diff --git a/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto b/vorgang-manager-interface/src/main/protobuf/vorgang.model.proto index 5f9efe1e4c9399cf8eecada3d7a23b1e89909f02..9b3cfb17e2a88c0fa29734d8edafe301d4cfa56d 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 763856b36699f916425c90f13b512ffae5982bce..1a3e8b76dd1886a827db306de84b1262d52a2357 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 44f61fed6d4ea63527907176ab79f790fdc534d0..ed2b4675125567c326b8eab32f72ecbf78b973a9 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 e7d98214f47767f8e504319062e735e1f1542162..e5674aa21c03e4f9d0154c3ab650e3a4831054fb 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 0000000000000000000000000000000000000000..d472a536e7e4b1c384bebaac5d9af8ee3d461d58 --- /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 0000000000000000000000000000000000000000..b6d38bce42d6c65b4b65147159af5868931e36b2 --- /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 01e063f2c45e20dcbd8a8fa3bbc4caa589205784..1f21a7720b4e4f94570ad3362332f4e02696f8b2 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 813820f57598e988451867b6f263cf84da1c5d45..208327dbda34ec46c5a054873880206f1587e074 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 642dd5385a37c04998ee35664c908cd91a1866f4..e6c8f11d524a4f27b5e2d5ec55d3233450dfc6f7 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 0000000000000000000000000000000000000000..553ea10ddbff9eeab9669d1d518a66ea77fb0a28 --- /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 0000000000000000000000000000000000000000..d1ffaa975affb8289188982c9af5a84a5db00c88 --- /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 139b28a5ce95adaf82e99e464cc31c36bb67424f..367e272d41cd299caedd42bcf8b262a50495c837 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 0000000000000000000000000000000000000000..4759c8c83e0f0e00283426c76fd203a214665bd6 --- /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); + } +}