Skip to content
Snippets Groups Projects
Commit 1b8afdf2 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-5666 enrich answer

parent 2e1e638a
Branches
Tags
No related merge requests found
......@@ -23,10 +23,13 @@
package de.ozgcloud.nachrichten.antragraum;
import java.time.ZonedDateTime;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
import io.grpc.stub.StreamObserver;
import lombok.RequiredArgsConstructor;
import net.devh.boot.grpc.server.service.GrpcService;
......@@ -65,12 +68,26 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB
@Override
public void sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequest request, StreamObserver<GrpcSendRueckfrageAnswerResponse> streamObserver) {
var answer = request.getAnswer();
var answer = mapper.fromRueckfrageAnswer(request.getAnswer());
var commandId = antragraumService.sendRueckfrageAnswer(request.getSamlToken(), answer.getRueckfrageId(),
mapper.fromRueckfrageAnswer(answer));
answer = enrichRueckfrageAnswer(answer, getRueckfrage(request.getSamlToken(), request.getAnswer().getRueckfrageId()));
var commandId = antragraumService.sendRueckfrageAnswer(request.getSamlToken(), request.getAnswer().getRueckfrageId(), answer);
streamObserver.onNext(GrpcSendRueckfrageAnswerResponse.newBuilder().setCommandId(commandId).build());
streamObserver.onCompleted();
}
PostfachNachricht getRueckfrage(String samlToken, String postfachNachrichtId) {
return antragraumService.findRueckfragen(samlToken)
.filter(postfachNachricht -> StringUtils.equals(postfachNachricht.getId(), postfachNachrichtId))
.toList().getFirst();
}
PostfachNachricht enrichRueckfrageAnswer(PostfachNachricht answer, PostfachNachricht rueckfrage) {
return answer.toBuilder()
.vorgangId(rueckfrage.getVorgangId())
.postfachAddress(rueckfrage.getPostfachAddress())
.sentAt(ZonedDateTime.now())
.build();
}
}
......@@ -63,19 +63,19 @@ interface AntragraumNachrichtMapper {
@Mapping(target = "referencedNachricht", ignore = true)
@Mapping(target = "mailBody", source = "answerText")
@Mapping(target = "attachments", source = "attachmentFileIdList")
@Mapping(target = "createdAt", ignore = true) // FIXME
@Mapping(target = "createdAt", ignore = true)
@Mapping(target = "createdBy", ignore = true) // FIXME
@Mapping(target = "direction", constant = "IN")
@Mapping(target = "id", ignore = true)
@Mapping(target = "messageCode", ignore = true)
@Mapping(target = "messageId", source = "rueckfrageId")
@Mapping(target = "postfachAddress", ignore = true) // FIXME rueckfrage laden, befüllen
@Mapping(target = "postfachAddress", ignore = true)
@Mapping(target = "postfachId", ignore = true)
@Mapping(target = "replyOption", constant = "FORBIDDEN")
@Mapping(target = "sentAt", ignore = true) // FIXME
@Mapping(target = "sentAt", ignore = true)
@Mapping(target = "sentSuccessful", constant = "true")
@Mapping(target = "subject", constant = "Antwort") // TODO klären
@Mapping(target = "vorgangId", ignore = true) // FIXME rueckfrage laden, befüllen
@Mapping(target = "vorgangId", ignore = true)
PostfachNachricht fromRueckfrageAnswer(GrpcRueckfrageAnswer answer);
@Mapping(target = "mergeFrom", ignore = true)
......
......@@ -20,13 +20,17 @@
package de.ozgcloud.nachrichten.antragraum;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import java.util.UUID;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
......@@ -90,16 +94,20 @@ class AntragraumGrpcServiceTest {
}
}
@DisplayName("Send rueckfrage answer")
@Nested
class TestSendAnswer {
class TestSendRueckfrageAnswer {
@Mock
private StreamObserver<GrpcSendRueckfrageAnswerResponse> streamObserver;
private PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
@BeforeEach
void setup() {
when(mapper.fromRueckfrageAnswer(any(GrpcRueckfrageAnswer.class))).thenReturn(postfachNachricht);
when(antragraumService.sendRueckfrageAnswer(anyString(), anyString(), any(PostfachNachricht.class)))
.thenReturn(UUID.randomUUID().toString());
when(mapper.fromRueckfrageAnswer(any(GrpcRueckfrageAnswer.class))).thenReturn(PostfachNachrichtTestFactory.create());
doReturn(postfachNachricht).when(antragsraumGrpcService).enrichRueckfrageAnswer(any(), any());
doReturn(postfachNachricht).when(antragsraumGrpcService).getRueckfrage(any(), any());
}
@Test
......@@ -109,6 +117,21 @@ class AntragraumGrpcServiceTest {
verify(mapper).fromRueckfrageAnswer(any(GrpcRueckfrageAnswer.class));
}
@Test
void shouldGetRueckfrage() {
sendRueckfrageAnswer();
verify(antragsraumGrpcService).getRueckfrage(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN,
GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID);
}
@Test
void shouldEnrichPostfachNachricht() {
sendRueckfrageAnswer();
verify(antragsraumGrpcService).enrichRueckfrageAnswer(postfachNachricht, postfachNachricht);
}
@Test
void shouldCallAntragraumService() {
antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
......@@ -129,6 +152,77 @@ class AntragraumGrpcServiceTest {
verify(streamObserver).onCompleted();
}
private void sendRueckfrageAnswer() {
antragsraumGrpcService.sendRueckfrageAnswer(GrpcSendRueckfrageAnswerRequestTestFactory.create(), streamObserver);
}
}
@DisplayName("Get rueckfrage")
@Nested
class TestGetRueckfrage {
private final PostfachNachricht matchingPostfachNachricht = PostfachNachrichtTestFactory.createBuilder()
.id(GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID)
.build();
private final PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create();
@BeforeEach
void mock() {
when(antragraumService.findRueckfragen(any())).thenReturn(Stream.of(postfachNachricht, matchingPostfachNachricht));
}
@Test
void shouldCallService() {
getRueckfrage();
verify(antragraumService).findRueckfragen(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN);
}
@Test
void shouldReturnMatchingPostfachNachricht() {
var rueckfrage = getRueckfrage();
assertThat(rueckfrage).isEqualTo(matchingPostfachNachricht);
}
private PostfachNachricht getRueckfrage() {
return antragsraumGrpcService.getRueckfrage(GrpcSendRueckfrageAnswerRequestTestFactory.SAML_TOKEN,
GrpcRueckfrageAnswerTestFactory.RUECKFRAGE_ID);
}
}
@DisplayName("Enrich postfachNachricht")
@Nested
class TestEnrichPostfachNachricht {
private PostfachNachricht postfachNachrichtToEnrich = PostfachNachrichtTestFactory.createBuilder()
.postfachAddress(null)
.vorgangId(null)
.sentAt(null)
.build();
private final PostfachNachricht postfachNachrichtRueckfrage = PostfachNachrichtTestFactory.create();
@Test
void shouldSetVorgangId() {
var enrichedPostfachNachricht = antragsraumGrpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
assertThat(enrichedPostfachNachricht.getVorgangId()).isEqualTo(postfachNachrichtRueckfrage.getVorgangId());
}
@Test
void shouldSetPostfachAddresses() {
var enrichedPostfachNachricht = antragsraumGrpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
assertThat(enrichedPostfachNachricht.getPostfachAddress()).isEqualTo(postfachNachrichtRueckfrage.getPostfachAddress());
}
@Test
void shouldSetSentAt() {
var enrichedPostfachNachricht = antragsraumGrpcService.enrichRueckfrageAnswer(postfachNachrichtToEnrich, postfachNachrichtRueckfrage);
assertThat(enrichedPostfachNachricht.getSentAt()).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS));
}
}
}
\ No newline at end of file
......@@ -22,7 +22,9 @@ package de.ozgcloud.nachrichten.antragraum;
import static org.assertj.core.api.Assertions.*;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
......@@ -32,6 +34,7 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction;
import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory;
import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory;
import de.ozgcloud.nachrichten.postfach.osi.ReplyOption;
class AntragraumNachrichtMapperTest {
......@@ -126,6 +129,20 @@ class AntragraumNachrichtMapperTest {
assertThat(result.getDirection()).isEqualTo(Direction.IN);
}
@Test
void shouldMapReplyOption() {
var result = map();
assertThat(result.getReplyOption()).hasToString(ReplyOption.FORBIDDEN.name());
}
@Test
void shouldSetCreateAt() {
var result = map();
assertThat(result.getCreatedAt()).isCloseTo(ZonedDateTime.now(), within(2, ChronoUnit.SECONDS));
}
private PostfachNachricht map() {
return mapper.fromRueckfrageAnswer(GrpcRueckfrageAnswerTestFactory.create());
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment