From 26e9be7d599aab7e00346f75d79075867b7b7bdf Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 19 Jun 2024 16:27:02 +0200 Subject: [PATCH] OZG-5666 handle empty attachments properly; impl PR comments; tiny cleanup --- .../antragraum/AntragraumGrpcService.java | 18 ++++--------- .../antragraum/AntragraumService.java | 23 +++++----------- .../postfach/PostfachNachrichtMapper.java | 7 ++--- .../antragraum/AntragraumServiceTest.java | 26 +++++-------------- .../postfach/PostfachNachrichtMapperTest.java | 26 ++++++++++++++++++- 5 files changed, 47 insertions(+), 53 deletions(-) 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 16a64d1..40f4824 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 @@ -44,27 +44,19 @@ class AntragraumGrpcService extends AntragraumServiceGrpc.AntragraumServiceImplB @Override public void findRueckfragen(GrpcFindRueckfragenRequest request, StreamObserver<GrpcFindRueckfragenResponse> streamObserver) { - var rueckfragen = buildGrpcRueckfrage(request.getSamlToken()); + var rueckfragen = antragraumService.findRueckfragen(request.getSamlToken()) + .map(mapper::toGrpc) + .map(rueckfrage -> addAnswers(request.getSamlToken(), rueckfrage)); streamObserver.onNext(buildFindRueckfragenResponse(rueckfragen)); streamObserver.onCompleted(); } - private Stream<GrpcRueckfrage> buildGrpcRueckfrage(String samlToken) { - return antragraumService.findRueckfragen(samlToken) - .map(mapper::toGrpc) - .map(rueckfrage -> addAnswers(samlToken, rueckfrage)); - - } - private GrpcRueckfrage addAnswers(String samlToken, GrpcRueckfrage rueckfrage) { - var rueckfrageAnswer = buildGrpcRueckfrageAnswer(samlToken, rueckfrage.getId()); - return rueckfrage.toBuilder() - .addAllAnswers(rueckfrageAnswer) - .build(); + return rueckfrage.toBuilder().addAllAnswers(findRueckfrageAnswers(samlToken, rueckfrage.getId())).build(); } - List<GrpcRueckfrageAnswer> buildGrpcRueckfrageAnswer(String samlToken, String rueckfrageId) { + List<GrpcRueckfrageAnswer> findRueckfrageAnswers(String samlToken, String rueckfrageId) { return antragraumService.findAnswers(samlToken, rueckfrageId).map(mapper::toRueckfrageAnswer).toList(); } 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 2104fa3..0cfc23e 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 @@ -38,7 +38,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import de.ozgcloud.nachrichten.NachrichtenManagerProperties; -import de.ozgcloud.nachrichten.common.vorgang.Vorgang; import de.ozgcloud.nachrichten.common.vorgang.VorgangService; import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; @@ -99,26 +98,20 @@ public class AntragraumService { var rueckfragen = postfachNachrichtService.findRueckfragen(BAYERN_ID_SERVICE_KONTO_TYPE, getPostfachId(samlToken)) .map(rueckfrageMapper::fromPostfachNachricht) - .map(rueckfrage -> enrichByAnswers(rueckfrage, findAnswers(samlToken, rueckfrage.getId()).toList())).toList(); + .map(rueckfrage -> enrichByAnswers(rueckfrage, findAnswers(samlToken, rueckfrage.getId()))).toList(); return enrichRueckfragen(rueckfragen); } - Rueckfrage enrichByAnswers(Rueckfrage rueckfrage, List<PostfachNachricht> answers) { + Rueckfrage enrichByAnswers(Rueckfrage rueckfrage, Stream<PostfachNachricht> answers) { var rueckfrageBuilder = rueckfrage.toBuilder(); - getFirstSentAt(answers).ifPresent(firstSentAt -> { - rueckfrageBuilder.answeredAt(firstSentAt); - rueckfrageBuilder.status(RueckfrageStatus.ANSWERED); - }); + getFirstSentAt(answers).ifPresent(firstSentAt -> rueckfrageBuilder.answeredAt(firstSentAt).status(RueckfrageStatus.ANSWERED)); return rueckfrageBuilder.build(); } - Optional<ZonedDateTime> getFirstSentAt(List<PostfachNachricht> answers) { - return answers.stream() - .sorted(Comparator.comparing(PostfachNachricht::getSentAt)) - .map(PostfachNachricht::getSentAt) - .findFirst(); + Optional<ZonedDateTime> getFirstSentAt(Stream<PostfachNachricht> answers) { + return answers.sorted(Comparator.comparing(PostfachNachricht::getSentAt)).map(PostfachNachricht::getSentAt).findFirst(); } Stream<Rueckfrage> enrichRueckfragen(List<Rueckfrage> rueckfragen) { @@ -129,14 +122,10 @@ public class AntragraumService { } Stream<Rueckfrage> addVorgangName(List<Rueckfrage> rueckfragen, String vorgangId) { - var vorgang = getVorgang(vorgangId); + var vorgang = vorgangService.getVorgang(vorgangId); return rueckfragen.stream().map(rueckfrage -> rueckfrage.toBuilder().vorgangName(vorgang.getName()).build()); } - Vorgang getVorgang(String vorgangId) { - return vorgangService.getVorgang(vorgangId); - } - public String sendRueckfrageAnswer(String samlToken, String rueckfrageId, PostfachNachricht nachricht) { verifyToken(samlToken); diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java index 82ac569..76cdd64 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapper.java @@ -71,7 +71,6 @@ public abstract class PostfachNachrichtMapper { return StringBasedIdentifier.builder().postfachId(postfachId).build(); } - @SuppressWarnings("unchecked") public GrpcPostfachMail fromMap(Map<String, Object> mailMap) { var postfachMailBuilder = GrpcPostfachMail.newBuilder() .setId(MapUtils.getString(mailMap, PostfachNachricht.FIELD_ID)) @@ -88,7 +87,10 @@ public abstract class PostfachNachrichtMapper { .setMailBody(MapUtils.getString(mailMap, PostfachNachricht.FIELD_MAIL_BODY)) .setReplyOption(MapUtils.getString(mailMap, PostfachNachricht.FIELD_REPLY_OPTION)); - Optional.ofNullable(mailMap.get(PostfachNachricht.FIELD_ATTACHMENTS)).map(this::getAttachments) + Optional.ofNullable(mailMap.get(PostfachNachricht.FIELD_ATTACHMENTS)) + .map(String.class::cast) + .map(StringUtils::trimToNull) + .map(this::getAttachments) .ifPresent(postfachMailBuilder::addAllAttachment); Optional.ofNullable(getAsMap(mailMap, PostfachNachricht.POSTFACH_ADDRESS_FIELD)) @@ -104,7 +106,6 @@ public abstract class PostfachNachrichtMapper { return Collections.singletonList(attachment); } return (Iterable<String>) attachments; - } GrpcPostfachAddress buildGrpcPostfachAddress(Map<String, Object> postfachAddressMap) { 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 797e455..453dca3 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 @@ -26,7 +26,6 @@ import de.ozgcloud.nachrichten.common.vorgang.VorgangTestFactory; import de.ozgcloud.nachrichten.postfach.PersistPostfachNachrichtService; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.PostfachNachrichtTestFactory; -import de.ozgcloud.nachrichten.postfach.osi.MessageTestFactory; class AntragraumServiceTest { @Spy @@ -77,6 +76,7 @@ class AntragraumServiceTest { private final Rueckfrage rueckfrage = RueckfrageTestFactory.create(); private final PostfachNachricht postfachNachricht = PostfachNachrichtTestFactory.create(); + private final Stream<PostfachNachricht> answers = Stream.of(postfachNachricht); @BeforeEach void mock() { @@ -85,7 +85,7 @@ class AntragraumServiceTest { when(rueckfrageMapper.fromPostfachNachricht(any())).thenReturn(rueckfrage); doReturn(rueckfrage).when(service).enrichByAnswers(any(), any()); doReturn(Stream.of(rueckfrage)).when(service).enrichRueckfragen(any()); - doReturn(Stream.of(postfachNachricht)).when(service).findAnswers(any(), any()); + doReturn(answers).when(service).findAnswers(any(), any()); doReturn(POSTFACH_ID).when(service).getPostfachId(any()); } @@ -135,7 +135,7 @@ class AntragraumServiceTest { void shouldCallEnrichByAnswers() { service.findRueckfragen(SAML_TOKEN).toList(); - verify(service).enrichByAnswers(rueckfrage, List.of(postfachNachricht)); + verify(service).enrichByAnswers(rueckfrage, answers); } @Test @@ -187,7 +187,7 @@ class AntragraumServiceTest { } private Rueckfrage enrichByAnswer() { - return service.enrichByAnswers(rueckfrage, Collections.emptyList()); + return service.enrichByAnswers(rueckfrage, Stream.empty()); } } @@ -228,14 +228,14 @@ class AntragraumServiceTest { @BeforeEach void mock() { - doReturn(VorgangTestFactory.create()).when(service).getVorgang(any()); + when(vorgangService.getVorgang(any())).thenReturn(VorgangTestFactory.create()); } @Test void shouldCallGetVorgang() { addVorgangName().toList(); - verify(service).getVorgang(RueckfrageTestFactory.VORGANG_ID); + verify(vorgangService).getVorgang(RueckfrageTestFactory.VORGANG_ID); } @Test @@ -250,18 +250,6 @@ class AntragraumServiceTest { } } - @DisplayName("Get vorgang") - @Nested - class TestGetVorgang { - - @Test - void shouldCallService() { - service.getVorgang(MessageTestFactory.VORGANG_ID); - - verify(vorgangService).getVorgang(MessageTestFactory.VORGANG_ID); - } - } - @DisplayName("Get first sentAt") @Nested class TestGetFirstSentAt { @@ -274,7 +262,7 @@ class AntragraumServiceTest { @Test void shouldReturnSentAt() { - var firstSentAt = service.getFirstSentAt(List.of(PostfachNachrichtTestFactory.create(), earlyPostfachNachricht, latePostfachNachricht)); + var firstSentAt = service.getFirstSentAt(Stream.of(PostfachNachrichtTestFactory.create(), earlyPostfachNachricht, latePostfachNachricht)); assertThat(firstSentAt).contains(earlyZonedDateTime); } diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java index 032ce36..40f9862 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/PostfachNachrichtMapperTest.java @@ -31,7 +31,7 @@ import static org.mockito.Mockito.*; import java.util.Map; import java.util.UUID; -import org.apache.commons.collections.MapUtils; +import org.apache.commons.lang3.StringUtils; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -135,6 +135,30 @@ class PostfachNachrichtMapperTest { assertDoesNotThrow(() -> fromMap(postfachNachrichtMap)); } + + @DisplayName("on empty attachments") + @Nested + class TestOnEmptyAttachmets { + + @Test + void shouldProceedWithEmptyAttachments() { + var postfachNachrichtMap = PostfachNachrichtTestFactory.asMap(); + + postfachNachrichtMap.put(PostfachNachricht.FIELD_ATTACHMENTS, StringUtils.EMPTY); + + assertDoesNotThrow(() -> fromMap(postfachNachrichtMap)); + } + + @Test + void shouldKeepEmptyAttachments() { + var postfachNachrichtMap = PostfachNachrichtTestFactory.asMap(); + postfachNachrichtMap.put(PostfachNachricht.FIELD_ATTACHMENTS, StringUtils.EMPTY); + + var postfachNachricht = fromMap(postfachNachrichtMap); + + assertThat(postfachNachricht.getAttachmentList()).isEmpty(); + } + } } @DisplayName("with missing postfachAddress") -- GitLab