diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java index 44b84a51228f55e941a15002a6490afffc2567df..e070ac27ad8f41b7acfe0f38f32223634a562942 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java +++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java @@ -5,32 +5,14 @@ import java.math.BigInteger; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; - import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; -import jakarta.activation.DataHandler; -import jakarta.activation.FileDataSource; - -import org.apache.cxf.ws.addressing.AttributedURIType; -import org.mapstruct.Condition; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; -import org.mapstruct.ReportingPolicy; -import org.mapstruct.SourcePropertyName; -import org.mapstruct.TargetPropertyName; - -import de.ozgcloud.xta.test.app.model.XtaFile; -import de.ozgcloud.xta.test.app.model.XtaIdentifier; -import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest; -import de.ozgcloud.xta.test.app.model.XtaMessage; -import de.ozgcloud.xta.test.app.model.XtaMessageMetaData; -import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing; import genv3.de.xoev.transport.xta.x211.ContentType; import genv3.de.xoev.transport.xta.x211.GenericContentContainer; import genv3.de.xoev.transport.xta.x211.LookupServiceResponse; import genv3.de.xoev.transport.xta.x211.LookupServiceResultType; +import genv3.de.xoev.transport.xta.x211.TransportReport; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType; import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType; import genv3.eu.osci.ws.x2014.x10.transport.DeliveryAttributesType; @@ -38,7 +20,13 @@ import genv3.eu.osci.ws.x2014.x10.transport.KeyCodeType; import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType; import genv3.eu.osci.ws.x2014.x10.transport.QualifierType; +import jakarta.activation.DataHandler; +import jakarta.activation.FileDataSource; import lombok.SneakyThrows; +import org.apache.cxf.ws.addressing.AttributedURIType; +import org.mapstruct.*; + +import de.ozgcloud.xta.test.app.model.*; @Mapper( unmappedTargetPolicy = ReportingPolicy.ERROR, @@ -65,7 +53,7 @@ public interface ResponseMapper { @Mapping(target = "destinations.reader.identifier", source = "readerIdentifier") @Mapping(target = "msgSize", source = "messageSize") @Mapping(target = "testMsg", ignore = true) - @Mapping(target = "deliveryAttributes", expression = "java( createDefaultDeliveryAttributes(createNowXmlGregorianCalendarFromLocalDateTime()) )") + @Mapping(target = "deliveryAttributes", expression = "java( createDefaultDeliveryAttributes(createNowXmlGregorianCalendar()) )") @Mapping(target = "messageProperties", ignore = true) MessageMetaData mapMessageMetaData(XtaMessageMetaData xtaMessageMetaData); @@ -127,8 +115,13 @@ public interface ResponseMapper { DeliveryAttributesType createDefaultDeliveryAttributes(XMLGregorianCalendar timestamp); @SneakyThrows - default XMLGregorianCalendar createNowXmlGregorianCalendarFromLocalDateTime() { - var isoTimeString = DateTimeFormatter.ISO_DATE_TIME.format(LocalDateTime.now()); + default XMLGregorianCalendar createNowXmlGregorianCalendar() { + return mapXmlGregorianCalendarFromLocalDateTime(LocalDateTime.now()); + } + + @SneakyThrows + default XMLGregorianCalendar mapXmlGregorianCalendarFromLocalDateTime(LocalDateTime localDateTime) { + var isoTimeString = DateTimeFormatter.ISO_DATE_TIME.format(localDateTime); return DatatypeFactory.newInstance().newXMLGregorianCalendar(isoTimeString); } @@ -177,6 +170,14 @@ public interface ResponseMapper { @Mapping(target = "lookupServiceResultList.lookupServiceResult", expression = "java( List.of( mapLookupServiceResultType(xtaLookupServiceRequest) ) )") LookupServiceResponse mapLookupServiceResponse(XtaLookupServiceRequest xtaLookupServiceRequest); + @Mapping(target = "messageMetaData", source = "messageMetaData") + @Mapping(target = "reportTime", source = "reportTime") + @Mapping(target = "XTAServerIdentity", constant = "xta-test-server") + @Mapping(target = "messageStatus.status", expression = "java( BigInteger.valueOf(xtaTransportReport.status().ordinal()) )") + @Mapping(target = "additionalReports", ignore = true) + @Mapping(target = "signature", ignore = true) + TransportReport mapTransportReport(XtaTransportReport xtaTransportReport); + @Mapping(target = "otherAttributes", ignore = true) AttributedURIType mapCreateMessageIdResponse(String value); } diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java index fee8821f41034c3b4506724114dfcecec86e94b7..59595411fe9674228f2f4b167bed53f0d573b0a5 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java @@ -1,20 +1,33 @@ package de.ozgcloud.xta.test.app.mapper; -import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*; -import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*; -import static de.ozgcloud.xta.test.app.factory.XtaLookupServiceRequestTestFactory.*; +import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.MESSAGE_SIZE; +import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.READER_PARTY_IDENTIFIER; +import static de.ozgcloud.xta.test.app.factory.XtaLookupServiceRequestTestFactory.LOOKUP_SERVICE_SERVICE; import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*; import static de.ozgcloud.xta.test.app.mapper.ResponseMapper.*; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import java.math.BigInteger; import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; import java.util.List; +import javax.xml.datatype.DatatypeConstants; +import genv3.de.xoev.transport.xta.x211.ContentType; +import genv3.de.xoev.transport.xta.x211.LookupServiceResponse; +import genv3.de.xoev.transport.xta.x211.LookupServiceResultType; +import genv3.de.xoev.transport.xta.x211.TransportReport; +import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType; +import genv3.eu.osci.ws.x2014.x10.transport.DeliveryAttributesType; +import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; +import genv3.eu.osci.ws.x2014.x10.transport.QualifierType; +import lombok.SneakyThrows; 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.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; import org.mapstruct.factory.Mappers; import de.ozgcloud.xta.test.app.factory.XtaFileTestFactory; @@ -22,15 +35,9 @@ import de.ozgcloud.xta.test.app.factory.XtaLookupServiceRequestTestFactory; import de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory; import de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory; import de.ozgcloud.xta.test.app.model.XtaFile; +import de.ozgcloud.xta.test.app.model.XtaMessageMetaData; import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing; -import genv3.de.xoev.transport.xta.x211.ContentType; -import genv3.de.xoev.transport.xta.x211.LookupServiceResponse; -import genv3.de.xoev.transport.xta.x211.LookupServiceResultType; -import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType; -import genv3.eu.osci.ws.x2014.x10.transport.DeliveryAttributesType; -import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; -import genv3.eu.osci.ws.x2014.x10.transport.QualifierType; -import lombok.SneakyThrows; +import de.ozgcloud.xta.test.app.model.XtaTransportReport; public class ResponseMapperTest { @@ -481,4 +488,87 @@ public class ResponseMapperTest { } } + @DisplayName("map transport report") + @Nested + class TestMapTransportReport { + private XtaMessageMetaData xtaMessageMetaData; + private LocalDateTime reportTime; + + @BeforeEach + void beforeEach() { + xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(); + reportTime = LocalDateTime.now(); + } + + @DisplayName("should map message meta data") + @Test + void shouldMapMessageMetaData() { + var result = doMapping(); + + assertThat(result.getMessageMetaData().getMsgIdentification().getMessageID().getValue()).isEqualTo(xtaMessageMetaData.messageId()); + } + + @DisplayName("should map message status") + @ParameterizedTest + @EnumSource(XtaTransportReport.MessageStatus.class) + void shouldMapMessageStatus(XtaTransportReport.MessageStatus status) { + var result = doMapping(status); + + assertThat(result.getMessageStatus().getStatus()).isEqualTo(status.ordinal()); + } + + @DisplayName("should map report time") + @Test + void shouldMapReportTime() { + var result = doMapping(); + + assertThat(result.getReportTime()).isEqualTo(mapper.mapXmlGregorianCalendarFromLocalDateTime(reportTime)); + } + + @DisplayName("should set server identity") + @Test + void shouldSetServerIdentity() { + var result = doMapping(); + + assertThat(result.getXTAServerIdentity()).isEqualTo("xta-test-server"); + } + + private TransportReport doMapping() { + return doMapping(XtaTransportReport.MessageStatus.GRUEN); + } + + private TransportReport doMapping(XtaTransportReport.MessageStatus status) { + return mapper.mapTransportReport(XtaTransportReport.builder() + .messageMetaData(xtaMessageMetaData) + .status(status) + .reportTime(reportTime) + .build()); + } + } + + @DisplayName("map XmlGregorianCalendar from LocalDateTime") + @Nested + class TestMapXmlGregorianCalendarFromLocalDateTime { + private LocalDateTime localDateTime; + + @BeforeEach + void beforeEach() { + localDateTime = LocalDateTime.parse("2007-12-03T10:15:30"); + } + + @DisplayName("should map xml gregorian calendar from local date time") + @Test + void shouldMapXmlGregorianCalendarFromLocalDateTime() { + var result = mapper.mapXmlGregorianCalendarFromLocalDateTime(localDateTime); + + assertThat(result.getDay()).isEqualTo(3); + assertThat(result.getMonth()).isEqualTo(12); + assertThat(result.getYear()).isEqualTo(2007); + assertThat(result.getEon() == null || result.getEon().equals(BigInteger.ZERO)).isTrue(); + assertThat(result.getHour()).isEqualTo(10); + assertThat(result.getMinute()).isEqualTo(15); + assertThat(result.getSecond()).isEqualTo(30); + assertThat(result.getTimezone()).isEqualTo(DatatypeConstants.FIELD_UNDEFINED); + } + } }