From 07a140d795451b2e955632bce183e033ca27335f Mon Sep 17 00:00:00 2001 From: Jan Zickermann <jan.zickermann@dataport.de> Date: Wed, 24 Jul 2024 17:50:06 +0200 Subject: [PATCH] KOP-2139 KOP-2461 XtaFile: Use DataHandler instead of byte[] --- .../de/ozgcloud/xta/client/XtaClient.java | 8 +- .../xta/client/core/WebServiceTypeMapper.java | 27 ++++ .../xta/client/core/WrappedXtaService.java | 18 ++- .../ozgcloud/xta/client/model/Identifier.java | 4 +- .../de/ozgcloud/xta/client/model/XtaFile.java | 8 +- .../ozgcloud/xta/client/model/XtaMessage.java | 2 +- .../client/XtaClientConfigTestFactory.java | 2 +- .../client/core/WebServiceTypeMapperTest.java | 127 +++++++++++++++++- .../client/core/WrappedXtaServiceTest.java | 45 ++++++- .../xta/client/model/XtaFileTestFactory.java | 40 ++++++ .../model/XtaMessageMetaDataTestFactory.java | 22 +++ .../client/model/XtaMessageTestFactory.java | 17 +++ 12 files changed, 300 insertions(+), 20 deletions(-) create mode 100644 src/test/java/de/ozgcloud/xta/client/model/XtaFileTestFactory.java create mode 100644 src/test/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataTestFactory.java create mode 100644 src/test/java/de/ozgcloud/xta/client/model/XtaMessageTestFactory.java diff --git a/src/main/java/de/ozgcloud/xta/client/XtaClient.java b/src/main/java/de/ozgcloud/xta/client/XtaClient.java index f259383..369597a 100644 --- a/src/main/java/de/ozgcloud/xta/client/XtaClient.java +++ b/src/main/java/de/ozgcloud/xta/client/XtaClient.java @@ -1,5 +1,7 @@ package de.ozgcloud.xta.client; +import jakarta.validation.constraints.NotBlank; + import org.apache.commons.lang3.NotImplementedException; import de.ozgcloud.xta.client.config.XtaClientConfig; @@ -22,14 +24,14 @@ public class XtaClient { private final WrappedXtaService service; private final XtaClientConfig config; - public XtaMessageMetaDataListing getMessagesMetadata(String xtaIdentifier) + public XtaMessageMetaDataListing getMessagesMetadata(@NotBlank String xtaIdentifier) throws XTAWSTechnicalProblemException, PermissionDeniedException { var clientIdentifier = deriveIdentifier(xtaIdentifier); service.checkAccountActive(clientIdentifier); return getStatusList(clientIdentifier); } - public XtaMessageMetaDataListing getNextMessagesMetadata(String xtaIdentifier) + public XtaMessageMetaDataListing getNextMessagesMetadata(@NotBlank String xtaIdentifier) throws XTAWSTechnicalProblemException, PermissionDeniedException { return getStatusList(deriveIdentifier(xtaIdentifier)); } @@ -46,7 +48,7 @@ public class XtaClient { throw new NotImplementedException(""); } - public void close(String messageId) { + public void close(@NotBlank String messageId) { throw new NotImplementedException(""); } } diff --git a/src/main/java/de/ozgcloud/xta/client/core/WebServiceTypeMapper.java b/src/main/java/de/ozgcloud/xta/client/core/WebServiceTypeMapper.java index c00e8b1..5678d5d 100644 --- a/src/main/java/de/ozgcloud/xta/client/core/WebServiceTypeMapper.java +++ b/src/main/java/de/ozgcloud/xta/client/core/WebServiceTypeMapper.java @@ -5,8 +5,12 @@ import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; import de.ozgcloud.xta.client.model.Identifier; +import de.ozgcloud.xta.client.model.XtaFile; +import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaData; import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing; +import genv3.de.xoev.transport.xta.x211.ContentType; +import genv3.de.xoev.transport.xta.x211.GenericContentContainer; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType; import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType; @@ -52,4 +56,27 @@ public interface WebServiceTypeMapper { @Mapping(target = "messageSize", source = "msgSize") XtaMessageMetaData mapXtaMessageMetaData(MessageMetaData messageMetaData); + @Mapping(target = "qualifier.service", source = "service") + @Mapping(target = "qualifier.businessScenario.defined.code", source = "businessScenarioCode") + @Mapping(target = "qualifier.messageType.code", source = "messageTypeCode") + @Mapping(target = "qualifier.messageType.payloadSchema", source = "messageTypePayloadSchema") + @Mapping(target = "msgIdentification.messageID.value", source = "messageId") + @Mapping(target = "originators.author.identifier", source = "authorIdentifier") + @Mapping(target = "destinations.reader.identifier", source = "readerIdentifier") + @Mapping(target = "msgSize", source = "messageSize") + @Mapping(target = "testMsg", constant = "false") + @Mapping(target = "deliveryAttributes", ignore = true) + @Mapping(target = "messageProperties", ignore = true) + MessageMetaData mapMessageMetaDataFromXtaMessageMetaData(XtaMessageMetaData xtaMessageMetaData); + + @Mapping(target = "encryptedData", ignore = true) + @Mapping(target = "contentContainer.message", source = "messageFile") + @Mapping(target = "contentContainer.attachment", source = "attachmentFiles") + GenericContentContainer mapGenericContentContainerFromXtaFile(XtaMessage xtaMessage); + + @Mapping(target = "value", source = "content") + @Mapping(target = "filename", source = "name") + @Mapping(target = "lang", source = "language") + ContentType mapContentTypeFromXtaFile(XtaFile xtaFile); + } diff --git a/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaService.java b/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaService.java index 35fdd86..556e906 100644 --- a/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaService.java +++ b/src/main/java/de/ozgcloud/xta/client/core/WrappedXtaService.java @@ -5,7 +5,11 @@ import jakarta.xml.ws.Holder; import de.ozgcloud.xta.client.model.Identifier; import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing; +import genv3.de.xoev.transport.xta.x211.MessageSchemaViolationException; +import genv3.de.xoev.transport.xta.x211.MessageVirusDetectionException; +import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; +import genv3.de.xoev.transport.xta.x211.SyncAsyncException; import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType; import lombok.Builder; @@ -35,8 +39,18 @@ public class WrappedXtaService { return typeMapper.mapXtaMessageMetaDataAndHeader(msgStatusListType, fetchResponseHeader.value); } - public void sendMessage(XtaMessage message) { - // ports.sendPort().sendMessage() + public void sendMessage(XtaMessage message) + throws SyncAsyncException, XTAWSTechnicalProblemException, MessageVirusDetectionException, MessageSchemaViolationException, + PermissionDeniedException, ParameterIsNotValidException { + ports.sendPort().sendMessage( + typeMapper.mapGenericContentContainerFromXtaFile(message), + typeMapper.mapMessageMetaDataFromXtaMessageMetaData(message.metaData()), + null + ); + } + + public void close(String messageId) { + throw new UnsupportedOperationException("Not implemented yet"); } } diff --git a/src/main/java/de/ozgcloud/xta/client/model/Identifier.java b/src/main/java/de/ozgcloud/xta/client/model/Identifier.java index 3f7ac42..831ea82 100644 --- a/src/main/java/de/ozgcloud/xta/client/model/Identifier.java +++ b/src/main/java/de/ozgcloud/xta/client/model/Identifier.java @@ -1,7 +1,7 @@ package de.ozgcloud.xta.client.model; import jakarta.annotation.Nullable; -import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotBlank; import lombok.Builder; @@ -9,6 +9,6 @@ import lombok.Builder; public record Identifier( @Nullable String name, @Nullable String category, - @NotEmpty String value + @NotBlank String value ) { } diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaFile.java b/src/main/java/de/ozgcloud/xta/client/model/XtaFile.java index 16396f6..89b2d1e 100644 --- a/src/main/java/de/ozgcloud/xta/client/model/XtaFile.java +++ b/src/main/java/de/ozgcloud/xta/client/model/XtaFile.java @@ -2,6 +2,8 @@ package de.ozgcloud.xta.client.model; import java.math.BigInteger; +import jakarta.activation.DataHandler; +import jakarta.annotation.Nullable; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.PositiveOrZero; @@ -10,9 +12,13 @@ import lombok.Builder; @Builder public record XtaFile( - @NotNull byte[] content, + @NotNull DataHandler content, @NotBlank String contentType, + @Nullable String contentDescription, + @Nullable String encoding, @NotBlank String name, + @Nullable String id, + @Nullable String language, @PositiveOrZero BigInteger size ) { } diff --git a/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java b/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java index 01b2c68..39f333a 100644 --- a/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java +++ b/src/main/java/de/ozgcloud/xta/client/model/XtaMessage.java @@ -11,6 +11,6 @@ import lombok.Builder; public record XtaMessage( @NotNull @Valid XtaMessageMetaData metaData, @NotNull @Valid XtaFile messageFile, - @NotNull List<@Valid XtaFile> attachments + @NotNull List<@Valid XtaFile> attachmentFiles ) { } diff --git a/src/test/java/de/ozgcloud/xta/client/XtaClientConfigTestFactory.java b/src/test/java/de/ozgcloud/xta/client/XtaClientConfigTestFactory.java index 1a9e692..e63cbc8 100644 --- a/src/test/java/de/ozgcloud/xta/client/XtaClientConfigTestFactory.java +++ b/src/test/java/de/ozgcloud/xta/client/XtaClientConfigTestFactory.java @@ -24,7 +24,7 @@ public class XtaClientConfigTestFactory { public static final String SELF_IDENTIFIER_VALUE = "selfIdentifier"; public static final Identifier SELF_IDENTIFIER = Identifier.builder() .value(SELF_IDENTIFIER_VALUE) - .category("xoev") + .category("Generic category") .name("Generic Name") .build(); public static final int MAX_LIST_ITEMS = 10; diff --git a/src/test/java/de/ozgcloud/xta/client/core/WebServiceTypeMapperTest.java b/src/test/java/de/ozgcloud/xta/client/core/WebServiceTypeMapperTest.java index 0a69915..79b4ec0 100644 --- a/src/test/java/de/ozgcloud/xta/client/core/WebServiceTypeMapperTest.java +++ b/src/test/java/de/ozgcloud/xta/client/core/WebServiceTypeMapperTest.java @@ -4,28 +4,36 @@ import static de.ozgcloud.xta.client.XtaClientConfigTestFactory.*; import static de.ozgcloud.xta.client.core.MessageMetaDataTestFactory.*; import static de.ozgcloud.xta.client.core.MsgBoxResponseTypeTestFactory.*; import static de.ozgcloud.xta.client.core.WebServiceTypeMapper.*; +import static de.ozgcloud.xta.client.model.XtaFileTestFactory.*; import static org.assertj.core.api.Assertions.*; import java.math.BigInteger; +import org.apache.cxf.helpers.IOUtils; 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.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.junit.jupiter.MockitoExtension; +import org.mapstruct.factory.Mappers; +import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaData; +import de.ozgcloud.xta.client.model.XtaMessageMetaDataTestFactory; +import de.ozgcloud.xta.client.model.XtaMessageTestFactory; +import genv3.de.xoev.transport.xta.x211.ContentType; 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.PartyIdentifierType; +import lombok.SneakyThrows; -@ExtendWith(MockitoExtension.class) class WebServiceTypeMapperTest { - @InjectMocks - private WebServiceTypeMapperImpl mapper; + private WebServiceTypeMapper mapper; + + @BeforeEach + void setup() { + mapper = Mappers.getMapper(WebServiceTypeMapper.class); + } @DisplayName("map party type from identifier") @Nested @@ -199,4 +207,111 @@ class WebServiceTypeMapperTest { } } + @DisplayName("map message meta data from xta message meta data") + @Nested + class TestMapMessageMetaDataFromXtaMessageMetaData { + + private XtaMessageMetaData xtaMessageMetaData; + + @BeforeEach + void setup() { + xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(); + } + + @DisplayName("should map service") + @Test + void shouldMapService() { + var result = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); + + assertThat(result.getQualifier().getService()).isEqualTo(MESSAGE_SERVICE); + } + + @DisplayName("should map business scenario code") + @Test + void shouldMapBusinessScenarioCode() { + var result = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); + + assertThat(result.getQualifier().getBusinessScenario().getDefined().getCode()) + .isEqualTo(BUSINESS_SCENARIO_CODE); + } + + @DisplayName("should map message type code") + @Test + void shouldMapMessageTypeCode() { + var result = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); + + assertThat(result.getQualifier().getMessageType().getCode()).isEqualTo(MESSAGE_TYPE_CODE); + } + + @DisplayName("should map message type payload schema") + @Test + void shouldMapMessageTypePayloadSchema() { + var result = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); + + assertThat(result.getQualifier().getMessageType().getPayloadSchema()) + .isEqualTo(MESSAGE_TYPE_PAYLOAD_SCHEMA); + } + + @DisplayName("should map message id") + @Test + void shouldMapMessageId() { + var result = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); + + assertThat(result.getMsgIdentification().getMessageID().getValue()).isEqualTo(MESSAGE_ID); + } + + @DisplayName("should map author identifier") + @Test + void shouldMapAuthorIdentifier() { + var result = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); + + assertThat(result.getOriginators().getAuthor().getIdentifier()).usingRecursiveComparison().isEqualTo( + mapper.mapPartyIdentifierTypeFromIdentifier(AUTHOR_IDENTIFIER)); + } + + @DisplayName("should map reader identifier") + @Test + void shouldMapReaderIdentifier() { + var result = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); + + assertThat(result.getDestinations().getReader().getIdentifier()).usingRecursiveComparison().isEqualTo( + mapper.mapPartyIdentifierTypeFromIdentifier(READER_IDENTIFIER)); + } + } + + @DisplayName("map generic content container from xta file") + @Nested + class TestMapGenericContentContainerFromXtaFile { + private XtaMessage xtaMessage; + + @BeforeEach + void setup() { + xtaMessage = XtaMessageTestFactory.create(); + } + + @DisplayName("should map message value") + @Test + @SneakyThrows + void shouldMapMessageValue() { + var result = mapper.mapGenericContentContainerFromXtaFile(xtaMessage); + + assertThat(getContent(result.getContentContainer().getMessage())).isEqualTo(XTA_FILE_CONTENT); + } + + @DisplayName("should map attachment value") + @Test + @SneakyThrows + void shouldMapAttachmentValue() { + var result = mapper.mapGenericContentContainerFromXtaFile(xtaMessage); + + assertThat(getContent(result.getContentContainer().getAttachment().getFirst())).isEqualTo(XTA_FILE_CONTENT); + } + + @SneakyThrows + private byte[] getContent(ContentType contentType) { + var dataHandler = contentType.getValue(); + return IOUtils.readBytesFromStream(dataHandler.getInputStream()); + } + } + } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceTest.java b/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceTest.java index 8c01dcd..f9e6f74 100644 --- a/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceTest.java +++ b/src/test/java/de/ozgcloud/xta/client/core/WrappedXtaServiceTest.java @@ -15,13 +15,17 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.model.XtaMessageMetaDataListing; +import de.ozgcloud.xta.client.model.XtaMessageTestFactory; +import genv3.de.xoev.transport.xta.x211.GenericContentContainer; import genv3.de.xoev.transport.xta.x211.ManagementPortType; import genv3.de.xoev.transport.xta.x211.MsgBoxPortType; -import genv3.de.xoev.transport.xta.x211.XTAService; +import genv3.de.xoev.transport.xta.x211.SendPortType; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType; import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType; +import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; import genv3.eu.osci.ws.x2014.x10.transport.PartyType; import lombok.SneakyThrows; @@ -29,7 +33,7 @@ import lombok.SneakyThrows; class WrappedXtaServiceTest { @Mock - private XTAService rawService; + private XtaPortTriple xtaPortTriple; @Mock private WebServiceTypeMapper typeMapper; @@ -49,7 +53,7 @@ class WrappedXtaServiceTest { @BeforeEach void mock() { - when(rawService.getManagementPort()).thenReturn(managementPortType); + when(xtaPortTriple.managementPort()).thenReturn(managementPortType); when(typeMapper.mapPartyTypeFromIdentifier(SELF_IDENTIFIER)).thenReturn(partyType); } @@ -87,7 +91,7 @@ class WrappedXtaServiceTest { @BeforeEach @SneakyThrows void mock() { - when(rawService.getMsgBoxPort()).thenReturn(msgBoxPortType); + when(xtaPortTriple.msgBoxPort()).thenReturn(msgBoxPortType); when(typeMapper.mapPartyTypeFromIdentifier(SELF_IDENTIFIER)).thenReturn(partyType); when(typeMapper.mapMsgBoxStatusListRequestTypeFromMaxListItems(MAX_LIST_ITEMS)) .thenReturn(msgBoxStatusListRequestType); @@ -112,4 +116,37 @@ class WrappedXtaServiceTest { } } + @DisplayName("send message") + @Nested + class TestSendMessage { + + @Mock + private SendPortType sendPortType; + + @Mock + private GenericContentContainer genericContentContainer; + + @Mock + private MessageMetaData messageMetaData; + + private XtaMessage xtaMessage; + + @BeforeEach + void mock() { + xtaMessage = XtaMessageTestFactory.create(); + when(xtaPortTriple.sendPort()).thenReturn(sendPortType); + when(typeMapper.mapGenericContentContainerFromXtaFile(xtaMessage)).thenReturn(genericContentContainer); + when(typeMapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessage.metaData())).thenReturn(messageMetaData); + } + + @DisplayName("should call port method") + @Test + @SneakyThrows + void shouldPortMethod() { + service.sendMessage(xtaMessage); + + verify(sendPortType).sendMessage(genericContentContainer, messageMetaData, null); + } + } + } \ No newline at end of file diff --git a/src/test/java/de/ozgcloud/xta/client/model/XtaFileTestFactory.java b/src/test/java/de/ozgcloud/xta/client/model/XtaFileTestFactory.java new file mode 100644 index 0000000..d458ab9 --- /dev/null +++ b/src/test/java/de/ozgcloud/xta/client/model/XtaFileTestFactory.java @@ -0,0 +1,40 @@ +package de.ozgcloud.xta.client.model; + +import java.math.BigInteger; + +import jakarta.activation.DataHandler; +import jakarta.mail.util.ByteArrayDataSource; + +public class XtaFileTestFactory { + + public static byte[] XTA_FILE_CONTENT = "Testinhalt".getBytes(); + public static String XTA_FILE_CONTENT_TYPE = "text/plain"; + public static String XTA_FILE_CONTENT_DESCRIPTION = "test description"; + public static String XTA_FILE_ENCODING = "UTF-8"; + public static String XTA_FILE_NAME = "test.txt"; + public static String XTA_FILE_ID = "test-file-id"; + public static String XTA_FILE_LANGUAGE = "de"; + + public static BigInteger XTA_FILE_SIZE = BigInteger.valueOf(XTA_FILE_CONTENT.length); + + public static XtaFile create() { + return createBuilder().build(); + } + + public static XtaFile.XtaFileBuilder createBuilder() { + return XtaFile.builder() + .content(createOctetStream(XTA_FILE_CONTENT)) + .contentType(XTA_FILE_CONTENT_TYPE) + .contentDescription(XTA_FILE_CONTENT_DESCRIPTION) + .encoding(XTA_FILE_ENCODING) + .name(XTA_FILE_NAME) + .id(XTA_FILE_ID) + .language(XTA_FILE_LANGUAGE) + .size(XTA_FILE_SIZE); + } + + private static DataHandler createOctetStream(byte[] xtaFileContent) { + var dataSource = new ByteArrayDataSource(xtaFileContent, "application/octet-stream"); + return new DataHandler(dataSource); + } +} diff --git a/src/test/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataTestFactory.java b/src/test/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataTestFactory.java new file mode 100644 index 0000000..6b58908 --- /dev/null +++ b/src/test/java/de/ozgcloud/xta/client/model/XtaMessageMetaDataTestFactory.java @@ -0,0 +1,22 @@ +package de.ozgcloud.xta.client.model; + +import static de.ozgcloud.xta.client.core.MessageMetaDataTestFactory.*; + +public class XtaMessageMetaDataTestFactory { + + public static XtaMessageMetaData create() { + return createBuilder().build(); + } + + public static XtaMessageMetaData.XtaMessageMetaDataBuilder createBuilder() { + return XtaMessageMetaData.builder() + .service(MESSAGE_SERVICE) + .businessScenarioCode(BUSINESS_SCENARIO_CODE) + .messageTypeCode(MESSAGE_TYPE_CODE) + .messageTypePayloadSchema(MESSAGE_TYPE_PAYLOAD_SCHEMA) + .messageId(MESSAGE_ID) + .authorIdentifier(AUTHOR_IDENTIFIER) + .readerIdentifier(READER_IDENTIFIER) + .messageSize(MESSAGE_SIZE); + } +} diff --git a/src/test/java/de/ozgcloud/xta/client/model/XtaMessageTestFactory.java b/src/test/java/de/ozgcloud/xta/client/model/XtaMessageTestFactory.java new file mode 100644 index 0000000..e047ff0 --- /dev/null +++ b/src/test/java/de/ozgcloud/xta/client/model/XtaMessageTestFactory.java @@ -0,0 +1,17 @@ +package de.ozgcloud.xta.client.model; + +import java.util.List; + +public class XtaMessageTestFactory { + + public static XtaMessage create() { + return createBuilder().build(); + } + + public static XtaMessage.XtaMessageBuilder createBuilder() { + return XtaMessage.builder() + .metaData(XtaMessageMetaDataTestFactory.create()) + .messageFile(XtaFileTestFactory.create()) + .attachmentFiles(List.of(XtaFileTestFactory.create())); + } +} -- GitLab