From 354aaa34f17f9dd1edef0529a8acd9a8cd69e7a7 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 18 Apr 2024 12:02:53 +0200 Subject: [PATCH] =?UTF-8?q?OZG-4768=20Antwort=20zur=20R=C3=BCckfrage=20imp?= =?UTF-8?q?lementiert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../antragraum/AntragraumGrpcService.java | 8 +- .../antragraum/AntragraumNachrichtMapper.java | 17 +++ .../antragraum/AntragraumService.java | 10 ++ .../antragraum/AntragraumGrpcServiceTest.java | 37 +++++++ .../AntragraumNachrichtMapperTest.java | 102 +++++++++++------- 5 files changed, 135 insertions(+), 39 deletions(-) diff --git a/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java b/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java index 6977a57..4921595 100644 --- a/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java +++ b/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcService.java @@ -50,7 +50,11 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB @Override public void sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest request, StreamObserver<GrpcCommand> streamObserver) { - throw new NotImplementedException("sendRueckfrageAnswer not implemented yet"); - } + var answer = request.getAnswer(); + + var commandId = antragraumService.sendRueckfrageAnswer(request.getSamlToken(), answer.getRueckfrageId(), mapper.toPostfachNachricht(answer)); + streamObserver.onNext(GrpcCommand.newBuilder().setId(commandId).build()); + streamObserver.onCompleted(); + } } diff --git a/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java b/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java index 136b02f..da60d2b 100644 --- a/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java +++ b/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapper.java @@ -41,4 +41,21 @@ interface AntragraumNachrichtMapper { @Mapping(source = "attachments", target = "attachmentFileIdList") @Mapping(target = "status", constant = DEFAULT_STATUS) GrpcRueckfrage toGrpc(PostfachNachricht postfachNachricht); + + @Mapping(target = "mailBody", source = "answerText") + @Mapping(target = "attachments", source = "attachmentFileIdList") + @Mapping(target = "createdAt", ignore = true) + @Mapping(target = "createdBy", ignore = true) + @Mapping(target = "direction", ignore = true) + @Mapping(target = "id", ignore = true) + @Mapping(target = "messageCode", ignore = true) + @Mapping(target = "messageId", ignore = true) + @Mapping(target = "postfachAddress", ignore = true) + @Mapping(target = "postfachId", ignore = true) + @Mapping(target = "replyOption", ignore = true) + @Mapping(target = "sentAt", ignore = true) + @Mapping(target = "sentSuccessful", ignore = true) + @Mapping(target = "subject", ignore = true) + @Mapping(target = "vorgangId", ignore = true) + PostfachNachricht toPostfachNachricht(GrpcRueckfrageAnswer answer); } diff --git a/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java b/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java index 52ca34b..3d9ea7a 100644 --- a/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java +++ b/src/main/java/de/ozgcloud/nachrichten/antragraum/AntragraumService.java @@ -82,6 +82,16 @@ public class AntragraumService { return postfachNachrichtService.findRueckfragen(postfachId); } + public Stream<PostfachNachricht> findRueckfrageAnswers(String rueckfrageId) { + return postfachNachrichtService.findAnswers(rueckfrageId); + } + + public String sendRueckfrageAnswer(String samlToken, String rueckfrageId, PostfachNachricht nachricht) { + verifyToken(samlToken); + + return postfachNachrichtService.persistAnswer(rueckfrageId, nachricht); + } + void verifyToken(String token) { var errors = verifier.verify(token); if (CollectionUtils.isNotEmpty(errors)) { diff --git a/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java index e421e9f..c4a452e 100644 --- a/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumGrpcServiceTest.java @@ -23,6 +23,7 @@ package de.ozgcloud.nachrichten.antragraum; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.UUID; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; @@ -34,6 +35,7 @@ import org.mockito.Spy; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; +import de.ozgcloud.vorgang.grpc.command.GrpcCommand; import io.grpc.stub.StreamObserver; class AntragraumGrpcServiceTest { @@ -81,4 +83,39 @@ class AntragraumGrpcServiceTest { } } } + + @Nested + class TestSendAnswer { + @Mock + private StreamObserver<GrpcCommand> streamObserver; + + @BeforeEach + void setup() { + when(antragraumService.sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class))) + .thenReturn(UUID.randomUUID().toString()); + when(mapper.toPostfachNachricht(any(GrpcRueckfrageAnswer.class))).thenReturn(PostfachNachrichtTestFactory.create()); + } + + @Test + void shouldCallMapper() { + antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); + + verify(mapper).toPostfachNachricht(any(GrpcRueckfrageAnswer.class)); + } + + @Test + void shouldCallOnNext() { + antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); + + verify(streamObserver).onNext(any(GrpcCommand.class)); + } + + @Test + void shouldCallOnCompleted() { + antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver); + + verify(streamObserver).onCompleted(); + } + + } } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java index d07db58..2a92f61 100644 --- a/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/antragraum/AntragraumNachrichtMapperTest.java @@ -24,9 +24,11 @@ import static org.assertj.core.api.Assertions.*; import java.time.format.DateTimeFormatter; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; +import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; @@ -34,57 +36,83 @@ class AntragraumNachrichtMapperTest { AntragraumNachrichtMapper mapper = Mappers.getMapper(AntragraumNachrichtMapper.class); - @Test - void shouldMapVorgangId() { - var result = map(); + @Nested + class TestMapRueckfrage { - assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); - } + @Test + void shouldMapVorgangId() { + var result = map(); - @Test - void shouldMapId() { - var result = map(); + assertThat(result.getVorgangId()).isEqualTo(MessageTestFactory.VORGANG_ID); + } - assertThat(result.getId()).isEqualTo(PostfachNachrichtTestFactory.ID); - } + @Test + void shouldMapId() { + var result = map(); - @Test - void shouldMapVorgangName() { - var result = map(); + assertThat(result.getId()).isEqualTo(PostfachNachrichtTestFactory.ID); + } - assertThat(result.getVorgangName()).isEqualTo(MessageTestFactory.SUBJECT); - } + @Test + void shouldMapVorgangName() { + var result = map(); - @Test - void shouldMapStatus() { - var result = map(); + assertThat(result.getVorgangName()).isEqualTo(MessageTestFactory.SUBJECT); + } - assertThat(result.getStatus()).isEqualTo(AntragraumNachrichtMapper.DEFAULT_STATUS); - } + @Test + void shouldMapStatus() { + var result = map(); - @Test - void shouldMapSentAt() { - var result = map(); + assertThat(result.getStatus()).isEqualTo(AntragraumNachrichtMapper.DEFAULT_STATUS); + } - assertThat(result.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); - } + @Test + void shouldMapSendAt() { + var result = map(); - @Test - void shouldMapText() { - var result = map(); + assertThat(result.getSentAt()).isEqualTo(PostfachNachrichtTestFactory.SENT_AT.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME)); + } - assertThat(result.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); - } + @Test + void shouldMapText() { + var result = map(); + + assertThat(result.getText()).isEqualTo(PostfachNachrichtTestFactory.MAIL_BODY); + } - @Test - void shouldMapAttachments() { - var result = map(); + @Test + void shouldMapAttachments() { + var result = map(); + + assertThat(result.getAttachmentFileIdCount()).isEqualTo(1); + assertThat(result.getAttachmentFileId(0)).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0)); + } + + private GrpcRueckfrage map() { + return mapper.toGrpc(PostfachNachrichtTestFactory.create()); + } - assertThat(result.getAttachmentFileIdCount()).isEqualTo(1); - assertThat(result.getAttachmentFileId(0)).isEqualTo(PostfachNachrichtTestFactory.ATTACHMENTS.get(0)); } - private GrpcRueckfrage map() { - return mapper.toGrpc(PostfachNachrichtTestFactory.create()); + @Nested + class TestMapAnswerToPostfachNachricht { + @Test + void shouldMapText() { + var result = map(); + + assertThat(result.getMailBody()).isEqualTo(GrpcRueckfrageAnswerTestFactory.TEXT); + } + + @Test + void shouldMapAttachmentIds() { + var result = map(); + + assertThat(result.getAttachments()).isEqualTo(GrpcRueckfrageAnswerTestFactory.ATTACHMENT_ID_LIST); + } + + private PostfachNachricht map() { + return mapper.toPostfachNachricht(GrpcRueckfrageAnswerTestFactory.create()); + } } } \ No newline at end of file -- GitLab