diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java index 43239f6ed35a1be10a9b850c47199c42c1c69db9..84a1b80ce2f3ac508b39ce35bd9c52edc6f5ce4b 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapper.java @@ -1,5 +1,8 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; + import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; @@ -8,30 +11,30 @@ import de.ozgcloud.nachrichten.postfach.PostfachAddress; import de.ozgcloud.nachrichten.postfach.PostfachAddressIdentifier; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.osiv2.OsiPostfachRemoteService; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyBehavior; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage; import lombok.Builder; import lombok.Getter; -@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR) +@Mapper(unmappedTargetPolicy = ReportingPolicy.ERROR, imports = ZoneOffset.class) public interface ResponseMapper { String POSTFACH_ADDRESS_VERSION = "2.0"; int POSTFACH_ADDRESS_TYPE = 2; @Mapping(target = "id", source = "guid") - @Mapping(target = "postfachAddress", expression = "java(buildPostfachAddressByPostfachId(message.getDisplayName()))") - //@Mapping(target = "postfachAddress", ignore = true) + @Mapping(target = "postfachAddress", expression = "java(buildPostfachAddressByPostfachId(message.getMessageBox().toString()))") @Mapping(target = "messageId", ignore = true) - @Mapping(target = "createdAt", ignore = true) - @Mapping(target = "createdBy", ignore = true) - @Mapping(target = "sentAt", ignore = true) + @Mapping(target = "createdAt", expression = "java(java.time.ZonedDateTime.now())") + @Mapping(target = "createdBy", source = "displayName") + @Mapping(target = "sentAt", expression = "java(message.getResponseTime().toZonedDateTime())") @Mapping(target = "sentSuccessful", ignore = true) @Mapping(target = "messageCode", ignore = true) @Mapping(target = "direction", constant = "IN") - @Mapping(target = "vorgangId", ignore = true) + @Mapping(target = "vorgangId", source = "sequencenumber") @Mapping(target = "referencedNachricht", ignore = true) - @Mapping(target = "mailBody", ignore = true) - @Mapping(target = "replyOption", ignore = true) + @Mapping(target = "mailBody", source = "body") + @Mapping(target = "replyOption", source = "replyAction") @Mapping(target = "attachments", ignore = true) PostfachNachricht toPostfachNachricht(V1ReplyMessage message); @@ -45,6 +48,14 @@ public interface ResponseMapper { } + default PostfachNachricht.ReplyOption mapReplyAction(V1ReplyBehavior replyOption) { + return switch (replyOption) { + case REPLYFORBIDDEN -> PostfachNachricht.ReplyOption.FORBIDDEN; + case REPLYPOSSIBLE -> PostfachNachricht.ReplyOption.POSSIBLE; + case REPLYMANDATORY -> PostfachNachricht.ReplyOption.MANDATORY; + }; + } + @Builder @Getter class StringBasedIdentifier implements PostfachAddressIdentifier { diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageFactory.java index 31c5cc011e439bb2cc2b580625582e223d580aa5..4d5cf6247abc9a0b992270e8c669ee712ff955f7 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageFactory.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageFactory.java @@ -44,8 +44,8 @@ public static V1ReplyMessageFactory.Builder createBuilder(){ .eidasLevel(EIDAS_LEVEL) .isObligatory(IS_OLIGATORY) .isHtml(IS_HTML) - .guid(UUID.fromString(GUID)) - .messageBox(UUID.fromString(MESSAGE_BOX)) + .guid(UUID.nameUUIDFromBytes(GUID.getBytes())) + .messageBox(UUID.nameUUIDFromBytes(MESSAGE_BOX.getBytes())) .responseTime(RESPONSE_TIME); } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java index 2b67f5c86a35219684d5e47adc03a8586e0264c8..c6c4279cfd429244379c200a59618aeb2233b0dc 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/ResponseMapperTest.java @@ -1,24 +1,104 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; +import static org.assertj.core.api.Assertions.*; + +import java.time.ZonedDateTime; +import java.time.temporal.ChronoUnit; +import java.util.UUID; + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; import org.mockito.InjectMocks; +import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.osiv2.factory.V1ReplyMessageFactory; +import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage; +import de.ozgcloud.nachrichten.postfach.osiv2.transfer.ResponseMapper; class ResponseMapperTest { @InjectMocks private ResponseMapper mapper = Mappers.getMapper(ResponseMapper.class); + private V1ReplyMessage message = V1ReplyMessageFactory.create(); @DisplayName("map V1ReplyMessage to PostfachNachricht") @Nested class V1ReplyMessageToPostfachNachricht { @Test void shouldHaveId(){ -// mapper.toPostfachNachricht(V1ReplyMessageFactory.) + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getId()).isEqualTo(UUID.nameUUIDFromBytes("123-guid-456".getBytes()).toString()); + } + + @Test + void shouldHaveVorgangId(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getVorgangId()).isEqualTo("OZG-Cloud-VorgangId"); + } + + @Test + void shouldHavePostfachAddress(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getPostfachAddress().getIdentifier().toString()) + .isEqualTo(UUID.nameUUIDFromBytes("Mailbox-Id-Antwortender".getBytes()).toString()); + } + + @Test + void shouldHaveCreatedAt(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getCreatedAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(5, ChronoUnit.SECONDS)); + } + + @Test + void shouldHaveCreatedBy(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getCreatedBy()).isEqualTo("Das ist der Absender"); + } + + @Test + void shouldHaveSentAt(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getSentAt()).isNotNull().isCloseTo(ZonedDateTime.now(), within(5, ChronoUnit.SECONDS)); + } + + @Test + void shouldHaveDirection(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getDirection()).isEqualTo(PostfachNachricht.Direction.IN); + } + + @Test + void shouldHaveSubject(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getSubject()).isEqualTo("Das ist das Subject"); + } + + @Test + void shouldHaveBody(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getMailBody()).isEqualTo(""" + Das ist das Multiline + Body"""); } + + @Test + void shouldHaveReplyOption(){ + var postfachNachricht = mapper.toPostfachNachricht(message); + + assertThat(postfachNachricht.getReplyOption()).isEqualTo(PostfachNachricht.ReplyOption.POSSIBLE); + } + +// TODO:prüfen das Attachments in der PostfachNachricht enthalten sind } }