From 3bc3b28c01cf2b82ba8d511a59c919d82269731d Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Tue, 5 Mar 2024 12:59:28 +0100 Subject: [PATCH] OZG-5099 dummy implementation for getBescheidDraft --- bescheid-manager/pom.xml | 6 +- .../bescheid/BescheidGrpcService.java | 30 +++++++ .../ozgcloud/bescheid/GrpcBescheidMapper.java | 36 +++++++++ .../bescheid/BescheidGrpcServiceTest.java | 80 +++++++++++++++++++ .../bescheid/GrpcBescheidMapperTest.java | 24 ++++++ .../bescheid/GrpcBescheidTestFactory.java | 14 ++++ 6 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java create mode 100644 bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java create mode 100644 bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java create mode 100644 bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidMapperTest.java create mode 100644 bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidTestFactory.java diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml index 601a3a235..79834a9e3 100644 --- a/bescheid-manager/pom.xml +++ b/bescheid-manager/pom.xml @@ -15,7 +15,7 @@ <version>1.8.0-SNAPSHOT</version> <properties> - <vorgang-manager.version>2.2.1</vorgang-manager.version> + <vorgang-manager.version>2.4.0-SNAPSHOT</vorgang-manager.version> <api-lib.version>0.5.0</api-lib.version> </properties> @@ -57,6 +57,10 @@ <groupId>net.devh</groupId> <artifactId>grpc-client-spring-boot-starter</artifactId> </dependency> + <dependency> + <groupId>net.devh</groupId> + <artifactId>grpc-server-spring-boot-starter</artifactId> + </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java new file mode 100644 index 000000000..d4618c11c --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/BescheidGrpcService.java @@ -0,0 +1,30 @@ +package de.ozgcloud.bescheid; + +import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceImplBase; +import io.grpc.stub.StreamObserver; +import lombok.RequiredArgsConstructor; +import net.devh.boot.grpc.server.service.GrpcService; + +@GrpcService +@RequiredArgsConstructor +class BescheidGrpcService extends BescheidServiceImplBase { + + private final GrpcBescheidMapper mapper; + + @Override + public void getBescheidDraft(GrpcGetBescheidDraftRequest request, StreamObserver<GrpcGetBescheidDraftResponse> responseObserver) { + // dummy implementation + // TODO OZG-5099 du real implementation - load Bescheid + var bescheid = Bescheid.builder().build(); + + responseObserver.onNext(buildResponse(bescheid)); + responseObserver.onCompleted(); + + } + + GrpcGetBescheidDraftResponse buildResponse(Bescheid bescheid) { + return GrpcGetBescheidDraftResponse.newBuilder() + .setBescheid(mapper.fromBescheid(bescheid)) + .build(); + } +} diff --git a/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java new file mode 100644 index 000000000..371bf37a8 --- /dev/null +++ b/bescheid-manager/src/main/java/de/ozgcloud/bescheid/GrpcBescheidMapper.java @@ -0,0 +1,36 @@ +package de.ozgcloud.bescheid; + +import java.util.Optional; + +import org.apache.commons.lang3.StringUtils; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; + +@Mapper +public interface GrpcBescheidMapper { + + @Mapping(target = "mergeFrom", ignore = true) + @Mapping(target = "clearField", ignore = true) + @Mapping(target = "clearOneof", ignore = true) + @Mapping(target = "mergeUnknownFields", ignore = true) + @Mapping(target = "bescheidDocument", ignore = true) + @Mapping(target = "bescheidDocumentBytes", ignore = true) + @Mapping(target = "beschiedenAm", ignore = true) + @Mapping(target = "beschiedenAmBytes", ignore = true) + @Mapping(target = "nachrichtSubject", ignore = true) + @Mapping(target = "nachrichtSubjectBytes", ignore = true) + @Mapping(target = "nachrichtTextBytes", ignore = true) + @Mapping(target = "sendBy", ignore = true) + @Mapping(target = "sendByBytes", ignore = true) + @Mapping(target = "unknownFields", ignore = true) + @Mapping(target = "allFields", ignore = true) + @Mapping(target = "attachmentsList", ignore = true) + + @Mapping(target = "nachrichtText", source = "nachrichtText") + @Mapping(target = "bewilligt", source = "genehmigt") + GrpcBescheid fromBescheid(Bescheid bescheid); + + default String fromOptional(Optional<String> optionalString) { + return optionalString.orElse(StringUtils.EMPTY); + } +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java new file mode 100644 index 000000000..57c05af52 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/BescheidGrpcServiceTest.java @@ -0,0 +1,80 @@ +package de.ozgcloud.bescheid; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Spy; + +import io.grpc.stub.StreamObserver; + +class BescheidGrpcServiceTest { + + @Spy + @InjectMocks + private BescheidGrpcService service; + + @Mock + private GrpcBescheidMapper mapper; + + @BeforeEach + void initMapperMock() { + when(mapper.fromBescheid(any())).thenReturn(GrpcBescheidTestFactory.create()); + } + + @Nested + class TestGetBescheidDraft { + + @Mock + private GrpcGetBescheidDraftRequest request; + @Mock + private StreamObserver<GrpcGetBescheidDraftResponse> responseObserver; + + private static final GrpcGetBescheidDraftResponse response = GrpcGetBescheidDraftResponse.newBuilder().build(); + + @BeforeEach + void initMocks() { + when(service.buildResponse(any())).thenReturn(response); + } + + @Test + void shouldBuildResponse() { + service.getBescheidDraft(request, responseObserver); + + verify(service).buildResponse(any()); + } + + @Test + void shouldCallNext() { + service.getBescheidDraft(request, responseObserver); + + verify(responseObserver).onNext(response); + } + + @Test + void shouldCallCompleted() { + service.getBescheidDraft(request, responseObserver); + + verify(responseObserver).onCompleted(); + } + + } + + @Nested + class TestBuildResponse { + + @Test + void shouldCallMapper() { + Bescheid bescheid = BescheidTestFactory.create(); + + service.buildResponse(bescheid); + + verify(mapper).fromBescheid(bescheid); + } + } + +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidMapperTest.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidMapperTest.java new file mode 100644 index 000000000..f58b9c240 --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidMapperTest.java @@ -0,0 +1,24 @@ +package de.ozgcloud.bescheid; + +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 GrpcBescheidMapperTest { + + private GrpcBescheidMapper mapper = Mappers.getMapper(GrpcBescheidMapper.class); + + @Nested + class TestFromBescheid { + + @Test + void shouldMapAllFields() { + var result = mapper.fromBescheid(BescheidTestFactory.create()); + + assertThat(result).usingRecursiveComparison().isEqualTo(GrpcBescheidTestFactory.create()); + } + } + +} diff --git a/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidTestFactory.java b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidTestFactory.java new file mode 100644 index 000000000..1b348feaf --- /dev/null +++ b/bescheid-manager/src/test/java/de/ozgcloud/bescheid/GrpcBescheidTestFactory.java @@ -0,0 +1,14 @@ +package de.ozgcloud.bescheid; + +class GrpcBescheidTestFactory { + + public static GrpcBescheid create() { + return createBuilder().build(); + } + + public static GrpcBescheid.Builder createBuilder() { + return GrpcBescheid.newBuilder() + .setBewilligt(true) + .setNachrichtText(BescheidTestFactory.NACHRICHT_TEXT); + } +} -- GitLab