From 4a806cea89285a9d12774ca4899dd51387e9926a Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 11 Jun 2024 09:45:45 +0200
Subject: [PATCH] OZG-5666 add call of findAnswers

---
 .../antragraum/AntragraumGrpcService.java     | 22 +++++++++++--
 .../antragraum/AntragraumNachrichtMapper.java | 32 +++++++++++++++++++
 .../antragraum/AntragraumService.java         |  7 ++++
 .../antragraum/AntragraumGrpcServiceTest.java | 13 ++++++--
 .../antragraum/AntragraumServiceTest.java     | 29 +++++++++++++++--
 .../GrpcFindRueckfrageRequestTestFactory.java |  5 ++-
 .../antragraum/GrpcRueckfrageTestFactory.java | 18 +++++++++++
 7 files changed, 116 insertions(+), 10 deletions(-)
 create mode 100644 nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java

diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
index 212f582..28bc1da 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java
@@ -23,6 +23,8 @@
 
 package de.ozgcloud.nachrichten.antragraum;
 
+import java.util.stream.Stream;
+
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 
 import io.grpc.stub.StreamObserver;
@@ -38,13 +40,29 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB
 
 	@Override
 	public void findRueckfragen(GrpcFindRueckfragenRequest request, StreamObserver<GrpcFindRueckfragenResponse> streamObserver) {
-		var rueckfragen = antragraumService.findRueckfragen(request.getSamlToken()).map(mapper::toGrpc).toList();
-		var response = GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen).build();
+		var rueckfragen = buildGrpcRueckfrage(request.getSamlToken());
+		var response = GrpcFindRueckfragenResponse.newBuilder().addAllRueckfrage(rueckfragen.toList()).build();
 
 		streamObserver.onNext(response);
 		streamObserver.onCompleted();
 	}
 
+	Stream<GrpcRueckfrage> buildGrpcRueckfrage(String samlToken) {
+		return antragraumService.findRueckfragen(samlToken).map(mapper::toGrpc)
+				.map(rueckfrage -> addAnswers(samlToken, rueckfrage));
+
+	}
+
+	private GrpcRueckfrage addAnswers(String samlToken, GrpcRueckfrage rueckfrage) {
+		return rueckfrage.toBuilder()
+				.addAllAnswers(buildGrpcRueckfrageAnswer(samlToken, rueckfrage.getId()).toList())
+				.build();
+	}
+
+	Stream<GrpcRueckfrageAnswer> buildGrpcRueckfrageAnswer(String samlToken, String rueckfrageId) {
+		return antragraumService.findAnswers(samlToken, rueckfrageId).map(mapper::toRueckfrageAnswer);
+	}
+
 	@Override
 	public void sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest request, StreamObserver<GrpcSendRueckfrageAnswerResponse> streamObserver) {
 		var answer = request.getAnswer();
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
index c6b7cce..1d891a0 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java
@@ -35,6 +35,24 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 interface AntragraumNachrichtMapper {
 	String DEFAULT_STATUS = "NEU";
 
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "removeAnswers", ignore = true)
+	@Mapping(target = "answeredAt", ignore = true)
+	@Mapping(target = "answeredAtBytes", ignore = true)
+	@Mapping(target = "idBytes", ignore = true)
+	@Mapping(target = "sentAtBytes", ignore = true)
+	@Mapping(target = "statusBytes", ignore = true)
+	@Mapping(target = "textBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "vorgangIdBytes", ignore = true)
+	@Mapping(target = "vorgangNameBytes", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	@Mapping(target = "answersBuilderList", ignore = true)
+	@Mapping(target = "answersList", ignore = true)
+	@Mapping(target = "answersOrBuilderList", ignore = true)
 	@Mapping(source = "sentAt", target = "sentAt", dateFormat = "yyyy-MM-dd'T'HH:mm:ss")
 	@Mapping(source = "mailBody", target = "text")
 	@Mapping(source = "subject", target = "vorgangName")
@@ -42,6 +60,7 @@ interface AntragraumNachrichtMapper {
 	@Mapping(target = "status", constant = DEFAULT_STATUS)
 	GrpcRueckfrage toGrpc(PostfachNachricht postfachNachricht);
 
+	@Mapping(target = "referencedNachricht", ignore = true)
 	@Mapping(target = "mailBody", source = "answerText")
 	@Mapping(target = "attachments", source = "attachmentFileIdList")
 	@Mapping(target = "createdAt", ignore = true)
@@ -58,4 +77,17 @@ interface AntragraumNachrichtMapper {
 	@Mapping(target = "subject", ignore = true)
 	@Mapping(target = "vorgangId", ignore = true)
 	PostfachNachricht fromRueckfrageAnswer(GrpcRueckfrageAnswer answer);
+
+	@Mapping(target = "mergeFrom", ignore = true)
+	@Mapping(target = "clearField", ignore = true)
+	@Mapping(target = "clearOneof", ignore = true)
+	@Mapping(target = "mergeUnknownFields", ignore = true)
+	@Mapping(target = "answerText", source = "mailBody")
+	@Mapping(target = "answerTextBytes", ignore = true)
+	@Mapping(target = "rueckfrageId", source = "id")
+	@Mapping(target = "rueckfrageIdBytes", ignore = true)
+	@Mapping(target = "unknownFields", ignore = true)
+	@Mapping(target = "allFields", ignore = true)
+	@Mapping(target = "attachmentFileIdList", source = "attachments")
+	GrpcRueckfrageAnswer toRueckfrageAnswer(PostfachNachricht answer);
 }
diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
index b7b236b..a8e360b 100644
--- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
+++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java
@@ -99,6 +99,13 @@ public class AntragraumService {
 		return postfachNachrichtService.persistAnswer(rueckfrageId, nachricht);
 	}
 
+	public Stream<PostfachNachricht> findAnswers(String samlToken, String rueckfrageId) {
+		verifyToken(samlToken);
+		var postfachId = decrypter.decryptPostfachId(parser.parse(samlToken));
+
+		return postfachNachrichtService.findAnswers(BAYERN_ID, postfachId, rueckfrageId);
+	}
+
 	void verifyToken(String token) {
 		var errors = verifier.verify(token);
 		if (CollectionUtils.isNotEmpty(errors)) {
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
index 3e49a13..6a05e36 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java
@@ -50,14 +50,14 @@ class AntragraumGrpcServiceTest {
 	class TestFindRueckfragen {
 
 		@Nested
-		class TestFindRueckfragenGrpc {
+		class TestFindRueckfrageGrpc {
 			@Mock
 			private StreamObserver<GrpcFindRueckfragenResponse> streamObserver;
 
 			@BeforeEach
 			void setup() {
 				when(antragraumService.findRueckfragen(any())).thenReturn(Stream.of(PostfachNachrichtTestFactory.create()));
-				when(mapper.toGrpc(any(PostfachNachricht.class))).thenReturn(GrpcRueckfrage.getDefaultInstance());
+				when(mapper.toGrpc(any(PostfachNachricht.class))).thenReturn(GrpcRueckfrageTestFactory.create());
 			}
 
 			@Test
@@ -80,6 +80,13 @@ class AntragraumGrpcServiceTest {
 
 				verify(streamObserver).onCompleted();
 			}
+
+			@Test
+			void shouldLoadAnswers() {
+				antragsraumGrpcService.findRueckfragen(GrpcFindRueckfrageRequestTestFactory.create(), streamObserver);
+
+				verify(antragraumService).findAnswers(GrpcFindRueckfrageRequestTestFactory.SAML_TOKEN, GrpcRueckfrageTestFactory.ID);
+			}
 		}
 	}
 
@@ -122,6 +129,6 @@ class AntragraumGrpcServiceTest {
 
 			verify(streamObserver).onCompleted();
 		}
-
 	}
+
 }
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
index 34be118..8ff8ca4 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumServiceTest.java
@@ -6,6 +6,7 @@ import static org.mockito.Mockito.*;
 
 import java.util.UUID;
 
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
@@ -99,7 +100,7 @@ class AntragraumServiceTest {
 		void shouldCallVerify() {
 			service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT);
 
-			verify(service).verifyToken(anyString());
+			verify(service).verifyToken(SAML_TOKEN);
 		}
 
 		@Test
@@ -113,7 +114,31 @@ class AntragraumServiceTest {
 		void shouldCallPostfachService() {
 			service.sendRueckfrageAnswer(SAML_TOKEN, RUECKFRAGE_ID, NACHRICHT);
 
-			verify(postfachNachrichtService).persistAnswer(anyString(), any(PostfachNachricht.class));
+			verify(postfachNachrichtService).persistAnswer(eq(RUECKFRAGE_ID), any(PostfachNachricht.class));
+		}
+	}
+
+	@Nested
+	class TestFindAnswer {
+
+		@BeforeEach
+		void init() {
+			when(decrypter.decryptPostfachId(any())).thenReturn(GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID);
+		}
+
+		@Test
+		void shouldCallVerify() {
+			service.findAnswers("TOKEN", PostfachNachrichtTestFactory.ID);
+
+			verify(service).verifyToken("TOKEN");
+		}
+
+		@Test
+		void shouldCallFindAnswers() {
+			service.findAnswers("TOKEN", PostfachNachrichtTestFactory.ID);
+
+			verify(postfachNachrichtService).findAnswers("BayernID", GrpcFindRueckfrageRequestTestFactory.POSTFACH_ID,
+					PostfachNachrichtTestFactory.ID);
 		}
 	}
 }
\ No newline at end of file
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java
index 9795428..11e529e 100644
--- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcFindRueckfrageRequestTestFactory.java
@@ -20,13 +20,12 @@
 
 package de.ozgcloud.nachrichten.antragraum;
 
-import de.ozgcloud.common.test.TestUtils;
-
 import java.util.UUID;
 
 public class GrpcFindRueckfrageRequestTestFactory {
 	static final String POSTFACH_ID = UUID.randomUUID().toString();
-	static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml");
+//	static final String SAML_TOKEN = TestUtils.loadTextFile("SamlResponse.xml");
+	static final String SAML_TOKEN = "TOKEN";
 
 	static GrpcFindRueckfragenRequest create() {
 		return createBuilder().build();
diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java
new file mode 100644
index 0000000..248e5ab
--- /dev/null
+++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/antragraum/GrpcRueckfrageTestFactory.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.nachrichten.antragraum;
+
+import java.util.UUID;
+
+public class GrpcRueckfrageTestFactory {
+
+	public static final String ID = UUID.randomUUID().toString();
+
+	public static GrpcRueckfrage create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcRueckfrage.Builder createBuilder() {
+		return GrpcRueckfrage.newBuilder()
+				.setId(ID);
+
+	}
+}
-- 
GitLab