From 6c0187f78573755f47a01bc8d859de222610e261 Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Fri, 29 Nov 2024 15:06:38 +0100 Subject: [PATCH] WIP sh-stage: Find valid send parameters send with mapping --- .../osiv2/transfer/RequestMapper.java | 39 +++++++-- .../OsiPostfachRemoteServiceRemoteITCase.java | 2 +- .../factory/PostfachNachrichtTestFactory.java | 6 +- .../osiv2/transfer/RequestMapperTest.java | 87 ++++++++++++++++++- 4 files changed, 123 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java index d199e51..91a9d58 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapper.java @@ -1,5 +1,7 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; +import java.util.Collections; +import java.util.List; import java.util.Optional; import org.mapstruct.Mapper; @@ -9,30 +11,51 @@ import org.mapstruct.ReportingPolicy; import de.ozgcloud.nachrichten.postfach.PostfachAddress; import de.ozgcloud.nachrichten.postfach.PostfachAddressIdentifier; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.MessageExchangeFiles; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.OutSendMessageRequestV2; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1References; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior; @Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR) public interface RequestMapper { - @Mapping(target = "sequencenumber", ignore = true) + String ORIGIN_SENDER = "OZG-Cloud"; + + @Mapping(target = "sequencenumber", source = "vorgangId") @Mapping(target = "body", source = "mailBody") - @Mapping(target = "displayName", ignore = true) - @Mapping(target = "originSender", ignore = true) - @Mapping(target = "replyAction", constant = "REPLYPOSSIBLE") - @Mapping(target = "eidasLevel", constant = "MEDIUM") + @Mapping(target = "displayName", source = "createdBy") + @Mapping(target = "originSender", constant = ORIGIN_SENDER) + @Mapping(target = "replyAction", source = "replyOption") + @Mapping(target = "eidasLevel", constant = "LOW") @Mapping(target = "isObligatory", expression = "java( false )") @Mapping(target = "isHtml", expression = "java( true )") - @Mapping(target = "files", ignore = true) - @Mapping(target = "references", ignore = true) + @Mapping(target = "files", expression = "java( mapMessageExchangeFiles() )") + @Mapping(target = "references", expression = "java( mapReferences() )") OutSendMessageRequestV2 mapOutSendMessageRequestV2(PostfachNachricht nachricht); + default List<MessageExchangeFiles> mapMessageExchangeFiles() { + return Collections.emptyList(); + } + + default List<V1References> mapReferences() { + return Collections.emptyList(); + } + + default V1ReplyBehavior mapReplyAction(PostfachNachricht.ReplyOption replyOption) { + return switch (replyOption) { + case FORBIDDEN -> V1ReplyBehavior.REPLYFORBIDDEN; + case POSSIBLE -> V1ReplyBehavior.REPLYPOSSIBLE; + case MANDATORY -> V1ReplyBehavior.REPLYMANDATORY; + }; + } default String mapMailboxId(PostfachNachricht nachricht) { return Optional.ofNullable(nachricht.getPostfachAddress()) .map(PostfachAddress::getIdentifier) .filter(PostfachAddressIdentifier::isStringBasedIdentifier) .map(Object::toString) - .orElseThrow(() -> new IllegalArgumentException("Missing MailboxId! Expect MailboxId to be a string-based PostfachAddress of PostfachNachricht.")); + .orElseThrow(() -> new IllegalArgumentException( + "Missing MailboxId! Expect MailboxId to be a string-based PostfachAddress of PostfachNachricht.")); } } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java index 8ae8ddb..5cca4d3 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceRemoteITCase.java @@ -31,7 +31,7 @@ public class OsiPostfachRemoteServiceRemoteITCase { private final PostfachNachricht nachricht = PostfachNachrichtTestFactory.createBuilder() .postfachAddress(PostfachAddressTestFactory.createBuilder() .identifier(DummyStringBasedIdentifier.builder() - .mailboxId("53ae88a0-6b06-44d0-8b13-e7b547fcaa6b") + .mailboxId("sh/sh/60e319ae-4fe7-4f47-c7c8-08dca563280a") .build()) .build()) .build(); diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/PostfachNachrichtTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/PostfachNachrichtTestFactory.java index c57b2aa..e24b966 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/PostfachNachrichtTestFactory.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/PostfachNachrichtTestFactory.java @@ -7,6 +7,8 @@ import de.ozgcloud.nachrichten.postfach.PostfachNachricht; public class PostfachNachrichtTestFactory { public static final String MAIL_BODY = "mail body"; public static final String MAIL_SUBJECT = "mail subject"; + public static final String VORGANG_ID = "test-vorgang-id"; + public static final String USER_ID = "test-user-id"; public static PostfachNachricht create() { @@ -17,8 +19,10 @@ public class PostfachNachrichtTestFactory { return PostfachNachricht.builder() .mailBody(MAIL_BODY) .subject(MAIL_SUBJECT) + .replyOption(PostfachNachricht.ReplyOption.FORBIDDEN) .createdAt(ZonedDateTime.now()) - .vorgangId("test-vorgang-id") + .createdBy(USER_ID) + .vorgangId(VORGANG_ID) .postfachAddress(PostfachAddressTestFactory.create()); } } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapperTest.java index 5ac7fea..957d440 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapperTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/RequestMapperTest.java @@ -2,6 +2,7 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; import static de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachAddressTestFactory.*; import static de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory.*; +import static de.ozgcloud.nachrichten.postfach.osiv2.transfer.RequestMapper.*; import static org.assertj.core.api.Assertions.*; import java.util.stream.Stream; @@ -16,10 +17,12 @@ import org.mapstruct.factory.Mappers; import de.ozgcloud.nachrichten.postfach.PostfachAddress; import de.ozgcloud.nachrichten.postfach.PostfachAddressIdentifier; +import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachAddressTestFactory; import de.ozgcloud.nachrichten.postfach.osiv2.factory.PostfachNachrichtTestFactory; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.OutSendMessageRequestV2; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1EidasLevel; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior; class RequestMapperTest { @@ -67,6 +70,16 @@ class RequestMapperTest { @DisplayName("map OutSendMessageRequestV2") @Nested class TestMapOutSendMessageRequestV2 { + + @DisplayName("should map sequence number") + @Test + void shouldMapSequenceNumber() { + var result = doMapping(); + + assertThat(result.getSequencenumber()).isEqualTo(VORGANG_ID); + } + + @DisplayName("should map subject") @Test void shouldMapSubject() { @@ -83,12 +96,60 @@ class RequestMapperTest { assertThat(result.getBody()).isEqualTo(MAIL_BODY); } + @DisplayName("should map display name") + @Test + void shouldMapDisplayName() { + var result = doMapping(); + + assertThat(result.getDisplayName()).isEqualTo(USER_ID); + } + + @DisplayName("should map origin sender") + @Test + void shouldMapOriginSender() { + var result = doMapping(); + + assertThat(result.getOriginSender()).isEqualTo(ORIGIN_SENDER); + } + + @DisplayName("should map forbidden reply action") + @Test + void shouldMapForbiddenReplyAction() { + var result = doMapping(); + + assertThat(result.getReplyAction()).isEqualTo(V1ReplyBehavior.REPLYFORBIDDEN); + } + + @DisplayName("should map possible reply action") + @Test + void shouldMapPossibleReplyAction() { + var nachricht = PostfachNachrichtTestFactory.createBuilder() + .replyOption(PostfachNachricht.ReplyOption.POSSIBLE) + .build(); + + var result = mapper.mapOutSendMessageRequestV2(nachricht); + + assertThat(result.getReplyAction()).isEqualTo(V1ReplyBehavior.REPLYPOSSIBLE); + } + + @DisplayName("should map mandatory reply action") + @Test + void shouldMapMandatoryReplyAction() { + var nachricht = PostfachNachrichtTestFactory.createBuilder() + .replyOption(PostfachNachricht.ReplyOption.MANDATORY) + .build(); + + var result = mapper.mapOutSendMessageRequestV2(nachricht); + + assertThat(result.getReplyAction()).isEqualTo(V1ReplyBehavior.REPLYMANDATORY); + } + @DisplayName("should set eidasLevel") @Test void shouldSetEidasLevel() { var result = doMapping(); - assertThat(result.getEidasLevel()).isEqualTo(V1EidasLevel.MEDIUM); + assertThat(result.getEidasLevel()).isEqualTo(V1EidasLevel.LOW); } @DisplayName("should set isObligatory") @@ -99,6 +160,30 @@ class RequestMapperTest { assertThat(result.getIsObligatory()).isFalse(); } + @DisplayName("should set isHtml") + @Test + void shouldSetIsHtml() { + var result = doMapping(); + + assertThat(result.getIsHtml()).isTrue(); + } + + @DisplayName("should map files") + @Test + void shouldMapFiles() { + var result = doMapping(); + + assertThat(result.getFiles()).isEmpty(); + } + + @DisplayName("should map references") + @Test + void shouldMapReferences() { + var result = doMapping(); + + assertThat(result.getFiles()).isEmpty(); + } + private OutSendMessageRequestV2 doMapping() { return mapper.mapOutSendMessageRequestV2(PostfachNachrichtTestFactory.create()); } -- GitLab