diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangBadRequestException.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangBadRequestException.java new file mode 100644 index 0000000000000000000000000000000000000000..b2d35ef9553325cc6b97b5be1deb09b0ef315b0d --- /dev/null +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/collaboration/CreateCollaborationVorgangBadRequestException.java @@ -0,0 +1,34 @@ +/* + * 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.collaboration; + +import de.ozgcloud.vorgang.common.errorhandling.FunctionalException; + +public class CreateCollaborationVorgangBadRequestException extends FunctionalException { + + public CreateCollaborationVorgangBadRequestException(String message) { + super(message, () -> "CREATE_COLLABORATION_VORGANG.BAD_REQUEST"); + } + +} diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java index 7236e43b1cc188d06727af667f443baf5e82644d..2702fcfdd2926473b9f938d80eae8f33fee49156 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangService.java @@ -26,6 +26,7 @@ package de.ozgcloud.vorgang.vorgang; import org.springframework.data.domain.Page; import de.ozgcloud.vorgang.collaboration.CollaborationService; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangBadRequestException; import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequest; import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequestMapper; import io.grpc.stub.StreamObserver; @@ -114,17 +115,23 @@ class GrpcVorgangService extends VorgangServiceGrpc.VorgangServiceImplBase { @Override public void createCollaborationVorgang(GrpcCreateCollaborationVorgangRequest request, StreamObserver<GrpcCreateCollaborationVorgangResponse> responseObserver) { + GrpcCreateCollaborationVorgangResponse response; if (request.hasCollaborationRequest()) { - var collaborationVorgangId = collaborationService.createCollaborationVorgang(buildCreateCollaborationVorgangRequest(request)); - responseObserver.onNext(GrpcCreateCollaborationVorgangResponse.newBuilder().setVorgangId(collaborationVorgangId).build()); + response = createCollaborationVorgang(request.getCollaborationRequest()); } else { - responseObserver.onNext(GrpcCreateCollaborationVorgangResponse.newBuilder().build()); + throw new CreateCollaborationVorgangBadRequestException("Cannot create collaboration vorgang. Collaboration request is empty."); } + responseObserver.onNext(response); responseObserver.onCompleted(); } - CreateCollaborationVorgangRequest buildCreateCollaborationVorgangRequest(GrpcCreateCollaborationVorgangRequest request) { - var vorgang = vorgangService.getById(request.getCollaborationRequest().getVorgangId()); - return createCollaborationVorgangRequestMapper.mapFrom(request.getCollaborationRequest()).toBuilder().vorgang(vorgang).build(); + GrpcCreateCollaborationVorgangResponse createCollaborationVorgang(GrpcCollaborationRequest request) { + var collaborationVorgangId = collaborationService.createCollaborationVorgang(buildCreateCollaborationVorgangRequest(request)); + return GrpcCreateCollaborationVorgangResponse.newBuilder().setVorgangId(collaborationVorgangId).build(); + } + + CreateCollaborationVorgangRequest buildCreateCollaborationVorgangRequest(GrpcCollaborationRequest request) { + var vorgang = vorgangService.getById(request.getVorgangId()); + return createCollaborationVorgangRequestMapper.mapFrom(request).toBuilder().vorgang(vorgang).build(); } } \ No newline at end of file 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 ac0aa99d2a8ddef7e38966209faf2e00802f5b08..469ef800742ad7b26d74b2c4ae94cde53fff0a67 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 @@ -103,7 +103,7 @@ class CollaborationServiceTest { class TestUpdateVorgang { private static final VorgangHead HEAD = VorgangHeadTestFactory.create(); - private static final CollaborationRequest COLLABORATION_REQUEST = CollaborationRequestTestFactory.create(); + private static final CreateCollaborationVorgangRequest COLLABORATION_REQUEST = CreateCollaborationVorgangRequestTestFactory.create(); @Mock private VorgangHead updatedHead; @@ -136,18 +136,18 @@ class CollaborationServiceTest { void shouldSetZustaendigeStelle() { var result = updateHeader(); - assertThat(result.getOrganisationsEinheitId()).isEqualTo(CollaborationRequestTestFactory.ZUSTAENDIGE_STELLE); + assertThat(result.getOrganisationsEinheitId()).isEqualTo(CreateCollaborationVorgangRequestTestFactory.ZUSTAENDIGE_STELLE); } @Test void shouldSetCollaborationLevel() { var result = updateHeader(); - assertThat(result.getCollaborationLevel()).isEqualTo(CollaborationRequestTestFactory.COLLABORATION_LEVEL); + assertThat(result.getCollaborationLevel()).isEqualTo(CreateCollaborationVorgangRequestTestFactory.COLLABORATION_LEVEL); } private VorgangHead updateHeader() { - return service.updateHeader(VorgangHeadTestFactory.create(), CollaborationRequestTestFactory.create()); + return service.updateHeader(VorgangHeadTestFactory.create(), CreateCollaborationVorgangRequestTestFactory.create()); } } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationVorgangResponseTestFactory.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationVorgangResponseTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..1851256f15a55aeb97fc63b77399d1e71a41ae6d --- /dev/null +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/GrpcCreateCollaborationVorgangResponseTestFactory.java @@ -0,0 +1,42 @@ +/* + * 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.collaboration; + +import java.util.UUID; + +import de.ozgcloud.vorgang.vorgang.GrpcCreateCollaborationVorgangResponse; + +public class GrpcCreateCollaborationVorgangResponseTestFactory { + + public static final String VORGANG_ID = UUID.randomUUID().toString(); + + public static GrpcCreateCollaborationVorgangResponse create() { + return createBuilder().build(); + } + + public static GrpcCreateCollaborationVorgangResponse.Builder createBuilder() { + return GrpcCreateCollaborationVorgangResponse.newBuilder() + .setVorgangId(VORGANG_ID); + } +} diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java index 11ec08b24c25f767417dc0fa6ba38ffe6ef6527f..7e7b7d99af9f9ce95935eed46f38262f21cd35b8 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/GrpcVorgangServiceTest.java @@ -30,6 +30,7 @@ import static org.mockito.Mockito.*; import java.util.Collections; import java.util.List; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -42,10 +43,12 @@ import org.mockito.Spy; import org.springframework.data.domain.Page; import de.ozgcloud.vorgang.collaboration.CollaborationService; +import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangBadRequestException; import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequest; import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequestMapper; import de.ozgcloud.vorgang.collaboration.CreateCollaborationVorgangRequestTestFactory; import de.ozgcloud.vorgang.collaboration.GrpcCollaborationRequestTestFactory; +import de.ozgcloud.vorgang.collaboration.GrpcCreateCollaborationVorgangResponseTestFactory; import io.grpc.stub.StreamObserver; class GrpcVorgangServiceTest { @@ -341,13 +344,7 @@ class GrpcVorgangServiceTest { } @Nested - class TestCreateCollaborationVorgang { - - @Mock - private StreamObserver<GrpcCreateCollaborationVorgangResponse> responseObserver; - - @Captor - private ArgumentCaptor<GrpcCreateCollaborationVorgangResponse> responseCaptor; + class TestCreateCollaborationVorgangEndpoint { @Nested class TestCollaborationRequest { @@ -355,27 +352,25 @@ class GrpcVorgangServiceTest { private static final GrpcCollaborationRequest GRPC_COLLABORATION_REQUEST = GrpcCollaborationRequestTestFactory.create(); private static final GrpcCreateCollaborationVorgangRequest REQUEST = GrpcCreateCollaborationVorgangRequest.newBuilder() .setCollaborationRequest(GRPC_COLLABORATION_REQUEST).build(); - private static final String COLLABORATION_VORGANG_ID = "collaboration-vorgang-id"; - private static final CreateCollaborationVorgangRequest CREATE_COLLABORATION_VORGANG_REQUEST = CreateCollaborationVorgangRequestTestFactory.create(); + private static final GrpcCreateCollaborationVorgangResponse GRPC_COLLABORATION_RESPONSE = + GrpcCreateCollaborationVorgangResponseTestFactory.create(); - @BeforeEach - void init() { - doReturn(CREATE_COLLABORATION_VORGANG_REQUEST).when(service).buildCreateCollaborationVorgangRequest(any()); - when(collaborationService.createCollaborationVorgang(any())).thenReturn(COLLABORATION_VORGANG_ID); - } + @Mock + private StreamObserver<GrpcCreateCollaborationVorgangResponse> responseObserver; - @Test - void shouldCallBuildCreateCollaborationVorgangRequest() { - createCollaborationVorgang(); + @Captor + private ArgumentCaptor<GrpcCreateCollaborationVorgangResponse> responseCaptor; - verify(service).buildCreateCollaborationVorgangRequest(REQUEST); + @BeforeEach + void init() { + doReturn(GRPC_COLLABORATION_RESPONSE).when(service).createCollaborationVorgang(any()); } @Test void shouldCallCreateCollaborationVorgang() { createCollaborationVorgang(); - verify(collaborationService).createCollaborationVorgang(CREATE_COLLABORATION_VORGANG_REQUEST); + verify(service).createCollaborationVorgang(GRPC_COLLABORATION_REQUEST); } @Test @@ -383,7 +378,7 @@ class GrpcVorgangServiceTest { createCollaborationVorgang(); verify(responseObserver).onNext(responseCaptor.capture()); - assertThat(responseCaptor.getValue().getVorgangId()).isEqualTo(COLLABORATION_VORGANG_ID); + assertThat(responseCaptor.getValue().getVorgangId()).isEqualTo(GrpcCreateCollaborationVorgangResponseTestFactory.VORGANG_ID); } @Test @@ -399,28 +394,59 @@ class GrpcVorgangServiceTest { } @Nested - class TestEmptyRequest { - - @Test - void shouldCallOnNext() { - createCollaborationVorgang(); + class TestEmptyCollaborationRequest { - verify(responseObserver).onNext(responseCaptor.capture()); - assertThat(responseCaptor.getValue().getVorgangId()).isEmpty(); - } + @Mock + private StreamObserver<GrpcCreateCollaborationVorgangResponse> responseObserver; @Test - void shouldCallOnCompleted() { - createCollaborationVorgang(); - - verify(responseObserver).onCompleted(); + void shouldThrowException() { + Assertions.assertThrows(CreateCollaborationVorgangBadRequestException.class, this::createCollaborationVorgang); } private void createCollaborationVorgang() { service.createCollaborationVorgang(GrpcCreateCollaborationVorgangRequest.newBuilder().build(), responseObserver); } } + } + @Nested + class TestCreateCollaborationVorgang { + + private static final GrpcCollaborationRequest GRPC_COLLABORATION_REQUEST = GrpcCollaborationRequestTestFactory.create(); + private static final String COLLABORATION_VORGANG_ID = "collaboration-vorgang-id"; + private static final CreateCollaborationVorgangRequest CREATE_COLLABORATION_VORGANG_REQUEST = CreateCollaborationVorgangRequestTestFactory.create(); + + @BeforeEach + void init() { + doReturn(CREATE_COLLABORATION_VORGANG_REQUEST).when(service).buildCreateCollaborationVorgangRequest(any()); + when(collaborationService.createCollaborationVorgang(any())).thenReturn(COLLABORATION_VORGANG_ID); + } + + @Test + void shouldCallBuildCreateCollaborationVorgangRequest() { + createCollaborationVorgang(); + + verify(service).buildCreateCollaborationVorgangRequest(GRPC_COLLABORATION_REQUEST); + } + + @Test + void shouldCallCreateCollaborationVorgang() { + createCollaborationVorgang(); + + verify(collaborationService).createCollaborationVorgang(CREATE_COLLABORATION_VORGANG_REQUEST); + } + + @Test + void should() { + var result = createCollaborationVorgang(); + + assertThat(result.getVorgangId()).isEqualTo(COLLABORATION_VORGANG_ID); + } + + private GrpcCreateCollaborationVorgangResponse createCollaborationVorgang() { + return service.createCollaborationVorgang(GRPC_COLLABORATION_REQUEST); + } } @Nested @@ -458,8 +484,7 @@ class GrpcVorgangServiceTest { } private CreateCollaborationVorgangRequest buildCreateCollaborationVorgangRequest() { - return service.buildCreateCollaborationVorgangRequest(GrpcCreateCollaborationVorgangRequest.newBuilder() - .setCollaborationRequest(GRPC_COLLABORATION_REQUEST).build()); + return service.buildCreateCollaborationVorgangRequest(GRPC_COLLABORATION_REQUEST); } } } \ No newline at end of file