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 212f582a2daf3aef79a4257c9a92d71d71d9a6da..28bc1da4fcb0c0f316144a454a2bc29b72399904 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 c6b7cce43c98c49a306b902a2e34e43368879da8..1d891a0f84a5a82d14412f9bd1ed6955af95007c 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 b7b236b9eb9dc7489bbe0195f0f474cb6e8ea4d4..a8e360bb49179070e1878c31810a10d5f9eac6f0 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 3e49a13c0bdfe90f6faf86dde6da6c13b4a329e2..6a05e36e48e391f304ff207f337f8316c72d5537 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 34be1187a2443f1168462691bb5f687727381511..8ff8ca4b3c7cbf98fca3ac6f6dc9f545fb85afba 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 9795428ab0d6020b63251d765af3e25e0f89cfa4..11e529e4bc20d68865c12675ca4efe1912c216a4 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 0000000000000000000000000000000000000000..248e5abc56da8018fd832afef80ea32039aa2c07 --- /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); + + } +}