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