diff --git a/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java b/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java index 1a4ef091eba172cb76aa8858d7778a0e808293fb..d24dca076ae0ee47114f01518482e5f261d3f82d 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java +++ b/src/main/java/de/ozgcloud/xta/test/app/data/XtaMessageRepository.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Stream; import org.springframework.stereotype.Component; @@ -47,13 +48,18 @@ public class XtaMessageRepository { } } - public List<XtaMessage> findAllLimitedTo(int maxListItems) { - return messages.values().stream() + public List<XtaMessage> findByReaderIdentifierValueLimitedTo(String readerIdentifierValue, int maxListItems) { + return findByReaderIdentifierValue(readerIdentifierValue) .limit(maxListItems) .toList(); } - public BigInteger count() { - return BigInteger.valueOf(messages.size()); + public BigInteger countByReaderIdentifierValue(String readerIdentifierValue) { + return BigInteger.valueOf(findByReaderIdentifierValue(readerIdentifierValue).count()); + } + + Stream<XtaMessage> findByReaderIdentifierValue(String readerIdentifierValue) { + return messages.values().stream() + .filter(m -> m.metaData().readerIdentifier().value().equals(readerIdentifierValue)); } } diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java index cb5787a6c35f951a7398b76277f8f821bd36066a..d25d9a675256b89a8a39acef593c434d8ed4f51d 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java +++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java @@ -1,18 +1,25 @@ package de.ozgcloud.xta.test.app.mapper; import de.ozgcloud.xta.test.app.exception.TechnicalException; +import de.ozgcloud.xta.test.app.model.Identifier; import de.ozgcloud.xta.test.app.model.XtaFile; import de.ozgcloud.xta.test.app.model.XtaMessage; import de.ozgcloud.xta.test.app.model.XtaMessageMetaData; +import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest; import genv3.de.xoev.transport.xta.x211.ContentType; import genv3.de.xoev.transport.xta.x211.GenericContentContainer; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType; 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.PartyType; import genv3.eu.osci.ws.x2014.x10.transport.QualifierType; import jakarta.activation.DataHandler; + +import org.mapstruct.Condition; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.Named; import org.mapstruct.ReportingPolicy; import java.io.File; @@ -30,7 +37,10 @@ public interface RequestMapper { XtaMessage mapXtaMessageFromGenericContentContainer(GenericContentContainer genericContainer, MessageMetaData messageMetaData); @Mapping(target = "service", source = "qualifier.service") - @Mapping(target = "businessScenario", source = "qualifier.businessScenario") + @Mapping(target = "businessScenarioCode", source = "qualifier.businessScenario", qualifiedByName = "mapBusinessScenarioCode") + @Mapping(target = "businessScenarioName", source = "qualifier.businessScenario.defined.name") + @Mapping(target = "businessScenarioListUri", source = "qualifier.businessScenario.defined.listURI") + @Mapping(target = "businessScenarioListVersionId", source = "qualifier.businessScenario.defined.listVersionID") @Mapping(target = "messageTypeCode", source = "qualifier.messageType.code") @Mapping(target = "messageTypePayloadSchema", source = "qualifier.messageType.payloadSchema") @Mapping(target = "messageId", source = "msgIdentification.messageID.value") @@ -39,23 +49,12 @@ public interface RequestMapper { @Mapping(target = "messageSize", source = "msgSize") XtaMessageMetaData mapXtaMessageMetaData(MessageMetaData messageMetaData); - default XtaMessageMetaData.BusinessScenario mapBusinessScenarioFromQualifierTypeBusinessScenario(QualifierType.BusinessScenario businessScenario){ - if (businessScenario.getDefined() != null && businessScenario.getDefined().getCode() != null) { - var definedKeyCode = businessScenario.getDefined(); - return new XtaMessageMetaData.BusinessScenario( - definedKeyCode.getCode(), - definedKeyCode.getName(), - definedKeyCode.getListURI(), - definedKeyCode.getListVersionID(), - true); - } - else { - String businessScenarioCode = businessScenario.getUndefined() == null ? "" : businessScenario.getUndefined(); - return new XtaMessageMetaData.BusinessScenario( - businessScenarioCode, null, null, null, false); - } + @Named("mapBusinessScenarioCode") + default String mapBusinessScenarioCode(QualifierType.BusinessScenario businessScenario){ + return businessScenario.getDefined() != null ? businessScenario.getDefined().getCode() : businessScenario.getUndefined(); } + @Mapping(target = "file", source = "value") @Mapping(target = "name", source = "filename") @Mapping(target = "language", source = "lang") @@ -92,4 +91,8 @@ public interface RequestMapper { } return maxListItems; } + + @Mapping(target = "clientIdentifierValue", source = "clientIdentifier.identifier.value") + @Mapping(target = "maxListItems", source = "fetchRequest.maxListItems") + XtaMessageMetaDataListingRequest mapMessageMetaDataListingRequest(MsgBoxStatusListRequestType fetchRequest, PartyType clientIdentifier); } 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 925da06689b89f5342a81a814359d3be7fe879b7..f7236153c85ac634fbf8c5412759be2ff028bb7e 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 @@ -8,6 +8,7 @@ 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.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType; +import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType; 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; @@ -19,6 +20,7 @@ import jakarta.activation.FileDataSource; 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; @@ -35,9 +37,11 @@ public interface ResponseMapper { String IDENTIFIER_TYPE = "xoev"; String MESSAGE_TYPE_LIST_URI = "urn:de:payloadSchema:elementName"; String MESSAGE_TYPE_LIST_VERSION_ID = "1.0"; + String REQUEST_ID = "1"; + String NO_MESSAGES_REASON = "Keine Nachrichten gefunden."; @Mapping(target = "qualifier.service", source = "service") - @Mapping(target = "qualifier.businessScenario", source = "businessScenario") + @Mapping(target = "qualifier.businessScenario", source = ".", qualifiedByName = "mapBusinessScenario") @Mapping(target = "qualifier.messageType", source = ".") @Mapping(target = "msgIdentification.messageID.value", source = "messageId") @Mapping(target = "originators.author.identifier", source = "authorIdentifier") @@ -48,22 +52,27 @@ public interface ResponseMapper { @Mapping(target = "messageProperties", ignore = true) MessageMetaData mapMessageMetaDataFromXtaMessageMetaData(XtaMessageMetaData xtaMessageMetaData); - default QualifierType.BusinessScenario mapQualifierBusinessScenarioFromBusinessScenario(XtaMessageMetaData.BusinessScenario businessScenario) { - var qualifierBusinessScenario = new QualifierType.BusinessScenario(); - if (businessScenario.isDefinedCode()) { - var definedKeyCode = new KeyCodeType(); - definedKeyCode.setCode(businessScenario.businessScenarioCode()); - definedKeyCode.setName(businessScenario.name()); - definedKeyCode.setListURI(businessScenario.listURI()); - definedKeyCode.setListVersionID(businessScenario.listVersionID()); - qualifierBusinessScenario.setDefined(definedKeyCode); - } else { - qualifierBusinessScenario.setDefined(null); - qualifierBusinessScenario.setUndefined(businessScenario.businessScenarioCode()); - } - return qualifierBusinessScenario; + @Named("mapBusinessScenario") + default QualifierType.BusinessScenario mapBusinessScenario(XtaMessageMetaData xtaMessageMetaData) { + return xtaMessageMetaData.businessScenarioListUri() != null + ? mapDefinedBusinessScenario(xtaMessageMetaData) + : mapUndefinedBusinessScenario(xtaMessageMetaData); } + @Mapping(target = "defined", expression = "java(null)") + @Mapping(target = "undefined", source = "businessScenarioCode") + QualifierType.BusinessScenario mapUndefinedBusinessScenario(XtaMessageMetaData xtaMessageMetaData); + + @Mapping(target = "defined", source = ".") + @Mapping(target = "undefined", expression = "java(null)") + QualifierType.BusinessScenario mapDefinedBusinessScenario(XtaMessageMetaData xtaMessageMetaData); + + @Mapping(target = "code", source = "businessScenarioCode") + @Mapping(target = "name", source = "businessScenarioName") + @Mapping(target = "listURI", source = "businessScenarioListUri") + @Mapping(target = "listVersionID", source = "businessScenarioListVersionId") + KeyCodeType mapKeyCodeType(XtaMessageMetaData xtaMessageMetaData); + @Mapping(target = "code", source = "messageTypeCode") @Mapping(target = "name", ignore = true) @Mapping(target = "payloadSchema", source = "messageTypePayloadSchema") @@ -72,7 +81,7 @@ public interface ResponseMapper { QualifierType.MessageType mapMessageTypeQualifierType(XtaMessageMetaData xtaMessageMetaData); @Mapping(target = "type", constant = IDENTIFIER_TYPE) - PartyIdentifierType mapPartyIdentifierTypeFromIdentifier(Identifier value); + PartyIdentifierType mapPartyIdentifierType(Identifier value); @Mapping(target = "encryptedData", expression = "java(null)") @Mapping(target = "contentContainer.message", source = "messageFile") @@ -95,9 +104,16 @@ public interface ResponseMapper { MsgBoxResponseType mapMsgBoxResponseTypeFromRequestID(String requestId); @Mapping(target = "itemsPending", source = "pendingMessageCount") - @Mapping(target = "msgBoxRequestID", source = "requestId") - @Mapping(target = "noMessageAvailable", source = "messages") - MsgBoxResponseType mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(XtaMessageMetaDataListing xtaMessageMetaDataListing); + @Mapping(target = "msgBoxRequestID", constant = REQUEST_ID) + @Mapping(target = "noMessageAvailable", source = "messages", qualifiedByName = "mapNoMessageAvailableReason") + MsgBoxResponseType mapMsgBoxResponseType(XtaMessageMetaDataListing listing); + + @Named("mapNoMessageAvailableReason") + default MsgBoxResponseType.NoMessageAvailable mapNoMessageAvailableReason(List<XtaMessageMetaData> messages) { + return messages.isEmpty() ? createNoMessageAvailableWithReason(NO_MESSAGES_REASON) : null; + } + + MsgBoxResponseType.NoMessageAvailable createNoMessageAvailableWithReason(String reason); @Condition default boolean pendingMessagesCountIsNotZero(BigInteger pendingMessageCount, @TargetPropertyName String targetPropertyName, @@ -109,13 +125,12 @@ public interface ResponseMapper { return true; } - default MsgBoxResponseType.NoMessageAvailable mapNoMessageAvailableFromXtaMessageMetaDataListing( - List<XtaMessageMetaData> messages) { - if (messages.isEmpty()) { - var noMessagesAvailable = new MsgBoxResponseType.NoMessageAvailable(); - noMessagesAvailable.setReason("NoMatch: No message fits the criteria from the message-selector."); - return noMessagesAvailable; - } else - return null; - } + @Mapping(target = "messageMetaData", source = "messages") + @Mapping(target = "msgAttributes", ignore = true) + MsgStatusListType mapMsgStatusListType(XtaMessageMetaDataListing listing); + + @Mapping(target = "msgBoxRequestID", constant = REQUEST_ID) + @Mapping(target = "itemsPending", ignore = true) + @Mapping(target = "noMessageAvailable.reason", source = "errorString") + MsgBoxResponseType mapMsgBoxResponseTypeError(String errorString); } diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java index f08a8c217002b379e736cb5d9474fca6fb6d1790..e48bf9962d1303af0170afcd07cf40cd62bb4349 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java +++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java @@ -2,6 +2,7 @@ package de.ozgcloud.xta.test.app.model; import java.math.BigInteger; +import jakarta.annotation.Nullable; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -12,7 +13,10 @@ import lombok.Builder; @Builder(toBuilder = true) public record XtaMessageMetaData( @NotBlank String service, - @NotNull BusinessScenario businessScenario, + @NotNull @NotBlank String businessScenarioCode, + @Nullable String businessScenarioName, + @Nullable String businessScenarioListUri, + @Nullable String businessScenarioListVersionId, @NotBlank String messageTypeCode, @NotBlank String messageTypePayloadSchema, @NotBlank String messageId, @@ -20,12 +24,4 @@ public record XtaMessageMetaData( @NotNull @Valid Identifier readerIdentifier, @PositiveOrZero BigInteger messageSize ) { - public record BusinessScenario( - @NotBlank String businessScenarioCode, - String name, - String listURI, - String listVersionID, - boolean isDefinedCode - ) { - } } diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java index 76c57823e8df95ce5512f1b7b8ff25c80df971dd..72f1977c4b282334d6acccef5a0230b29997f381 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java +++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListing.java @@ -12,7 +12,6 @@ import lombok.Builder; @Builder public record XtaMessageMetaDataListing( - @NotBlank String requestId, @NotNull @PositiveOrZero BigInteger pendingMessageCount, @NotNull @Valid List<XtaMessageMetaData> messages ) { diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..279014fb4fe85325d03b34115d211f87eebadc8a --- /dev/null +++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java @@ -0,0 +1,13 @@ +package de.ozgcloud.xta.test.app.model; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Positive; + +import lombok.Builder; + +@Builder +public record XtaMessageMetaDataListingRequest( + @NotBlank String clientIdentifierValue, + @Positive int maxListItems +) { +} diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java index 745a5a0ad09d1de6b805ba2307e2838e5d79ba46..1a09fc673537234386c0f4a91c54dd0ec30d3440 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java +++ b/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java @@ -9,7 +9,6 @@ import org.apache.cxf.ws.addressing.AttributedURIType; import org.springframework.stereotype.Component; import de.ozgcloud.xta.test.app.model.XtaMessage; -import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing; import de.ozgcloud.xta.test.app.service.ParameterValidatorService; import de.ozgcloud.xta.test.app.mapper.RequestMapper; import de.ozgcloud.xta.test.app.mapper.ResponseMapper; @@ -21,11 +20,9 @@ import genv3.de.xoev.transport.xta.x211.MsgBoxPortType; import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest; -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.MsgSelector; import genv3.eu.osci.ws.x2008.x05.transport.MsgStatusListType; -import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -111,24 +108,19 @@ public class MsgBoxPortImpl implements MsgBoxPortType { log.info("Executing operation getStatusList"); validateGetStatusListRequest(statusListRequest); - String msgBoxRequestId = XtaIdGenerator.generateRequestId().toString(); - MsgStatusListType statusListResponse = new MsgStatusListType(); - if (validator.isNotNull(statusListRequest.getMsgSelector(), "msgSelector")) { - msgBoxResponseHeader.value = createInvalidSearchArgsResponseHeader(msgBoxRequestId); - return statusListResponse; + msgBoxResponseHeader.value = responseMapper.mapMsgBoxResponseTypeError( + "SearchArgsInvalid: This test server doesn't support message selection in the 'getStatusList' operation."); + return new MsgStatusListType(); } - int maxListItems = requestMapper.mapMaxListItems(statusListRequest); - XtaMessageMetaDataListing messageMetaDataListing = messageService.getStatusList(msgBoxRequestId, maxListItems); - messageMetaDataListing.messages().forEach( - m -> statusListResponse.getMessageMetaData().add(responseMapper.mapMessageMetaDataFromXtaMessageMetaData(m)) - ); - - msgBoxResponseHeader.value = responseMapper.mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(messageMetaDataListing); - return statusListResponse; + var request = requestMapper.mapMessageMetaDataListingRequest(statusListRequest, authorIdentifier); + var listing = messageService.getStatusList(request); + msgBoxResponseHeader.value = responseMapper.mapMsgBoxResponseType(listing); + return responseMapper.mapMsgStatusListType(listing); } + private void validateGetStatusListRequest(MsgBoxStatusListRequestType statusListRequest) throws XTAWSTechnicalProblemException { if (!( validator.isNotNull(statusListRequest.getListForm(), "listForm") @@ -137,15 +129,6 @@ public class MsgBoxPortImpl implements MsgBoxPortType { } } - private MsgBoxResponseType createInvalidSearchArgsResponseHeader(String msgBoxRequestId) { - var responseHeader = new MsgBoxResponseType(); - responseHeader.setMsgBoxRequestID(msgBoxRequestId); - var noMessagesAvailable = new MsgBoxResponseType.NoMessageAvailable(); - noMessagesAvailable.setReason("SearchArgsInvalid: This test server doesn't support message selection in the 'getStatusList' operation."); - responseHeader.setNoMessageAvailable(noMessagesAvailable); - return responseHeader; - } - /* * (non-Javadoc) * @see genv3.de.xoev.transport.xta.x211.MsgBoxPortType#getNextMessage(genv3.eu.osci.ws.x2008.x05.transport. diff --git a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java index ef71ed9db82587f716d649aca6792c0685dc5994..3c9dcdb6ce7b7d472881f91fe09cc54e0c800261 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java +++ b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java @@ -9,6 +9,7 @@ import de.ozgcloud.xta.test.app.data.XtaMessageRepository; 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 de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest; import lombok.RequiredArgsConstructor; @Service @@ -20,11 +21,12 @@ public class XtaMessageService { messageRepository.save(message); } - public XtaMessageMetaDataListing getStatusList(String requestId, int maxListItems) { + public XtaMessageMetaDataListing getStatusList(XtaMessageMetaDataListingRequest listingRequest) { return XtaMessageMetaDataListing.builder() - .requestId(requestId) - .pendingMessageCount(messageRepository.count()) - .messages(getMetaData(messageRepository.findAllLimitedTo(maxListItems))) + .pendingMessageCount(messageRepository.countByReaderIdentifierValue(listingRequest.clientIdentifierValue())) + .messages(getMetaData(messageRepository.findByReaderIdentifierValueLimitedTo( + listingRequest.clientIdentifierValue(), + listingRequest.maxListItems()))) .build(); } diff --git a/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java b/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java new file mode 100644 index 0000000000000000000000000000000000000000..9aca5302125f5629e9c99543858c0ac7b6c7abee --- /dev/null +++ b/src/test/java/de/ozgcloud/xta/test/app/data/XtaMessageRepositoryTest.java @@ -0,0 +1,203 @@ +package de.ozgcloud.xta.test.app.data; + +import static de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory.*; +import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.List; +import java.util.stream.Stream; + +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.ValueSource; +import org.mockito.InjectMocks; +import org.mockito.Spy; + +import de.ozgcloud.xta.test.app.mapper.XtaFileTestFactory; +import de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory; +import de.ozgcloud.xta.test.app.model.Identifier; +import de.ozgcloud.xta.test.app.model.XtaFile; +import de.ozgcloud.xta.test.app.model.XtaMessage; +import de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory; + +public class XtaMessageRepositoryTest { + + @Spy + @InjectMocks + private XtaMessageRepository xtaMessageRepository; + + @DisplayName("save") + @Nested + class TestSave { + + @Test + void shouldSaveMessage() { + var message = XtaMessageTestFactory.create(MESSAGE_ID_1); + + xtaMessageRepository.save(message); + + assertThat(xtaMessageRepository.get(MESSAGE_ID_1)).contains(message); + } + } + + @DisplayName("get") + @Nested + class TestGet { + private final XtaMessage message = XtaMessageTestFactory.create(MESSAGE_ID_1); + + @BeforeEach + void beforeEach() { + xtaMessageRepository = new XtaMessageRepository(); + xtaMessageRepository.save(message); + } + + @Test + void shouldReturnMessage() { + var result = xtaMessageRepository.get(MESSAGE_ID_1); + + assertThat(result).contains(message); + } + + @Test + void shouldReturnEmpty() { + var result = xtaMessageRepository.get(MESSAGE_ID_2); + + assertThat(result).isEmpty(); + } + } + + @Nested + class TestDelete { + public static final String MESSAGE_ID = "messageId"; + private XtaFile messageFile; + private XtaFile attachmentFile; + + @BeforeEach + void beforeEach() { + messageFile = XtaFileTestFactory.create(); + attachmentFile = XtaFileTestFactory.create(); + var message = XtaMessageTestFactory.createBuilder(MESSAGE_ID) + .messageFile(messageFile) + .attachmentFiles(List.of(attachmentFile)) + .build(); + xtaMessageRepository.save(message); + } + + @Test + void shouldDeleteTemporaryFiles() { + assertThat(messageFile.file()).exists(); + assertThat(attachmentFile.file()).exists(); + + xtaMessageRepository.delete(MESSAGE_ID); + + assertThat(messageFile.file()).doesNotExist(); + assertThat(attachmentFile.file()).doesNotExist(); + } + } + + @DisplayName("find by reader identifier value limited to") + @Nested + class TestFindByReaderIdentifierValueLimitedTo { + + @BeforeEach + void beforeEach() { + xtaMessageRepository.save(XtaMessageTestFactory.create("1")); + xtaMessageRepository.save(XtaMessageTestFactory.create("2")); + xtaMessageRepository.save(XtaMessageTestFactory.create("3")); + } + + @DisplayName("should return limit") + @ParameterizedTest + @ValueSource(ints = { 0, 1, 2 }) + void shouldReturnLimit(int limit) { + var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit); + + assertThat(result).hasSize(limit); + } + + @DisplayName("should return all") + @ParameterizedTest + @ValueSource(ints = { 3, 4, 5 }) + void shouldReturnAll(int limit) { + var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), limit); + + assertThat(result).hasSize(3); + } + + @DisplayName("should not find any with unknown reader identifier") + @Test + void shouldNotFindAnyWithUnknownReaderIdentifier() { + var result = xtaMessageRepository.findByReaderIdentifierValueLimitedTo("unknown", 1); + + assertThat(result).isEmpty(); + } + + } + + @DisplayName("count by reader identifier value") + @Nested + class TestCountByReaderIdentifierValue { + @BeforeEach + void beforeEach() { + doReturn(Stream.of(XtaMessageTestFactory.create("1"), XtaMessageTestFactory.create("2"), + XtaMessageTestFactory.create("3"))).when(xtaMessageRepository).findByReaderIdentifierValue(READER_IDENTIFIER.value()); + } + + @DisplayName("should return") + @Test + void shouldReturn() { + var count = xtaMessageRepository.countByReaderIdentifierValue(READER_IDENTIFIER.value()); + + assertThat(count).isEqualTo(3); + } + + } + + @DisplayName("find by reader identifier value") + @Nested + class TestFindByReaderIdentifierValue { + private static final String OTHER_READER_IDENTIFIER = "readerIdentifier"; + + @BeforeEach + void beforeEach() { + xtaMessageRepository = new XtaMessageRepository(); + xtaMessageRepository.save(XtaMessageTestFactory.create("1")); + xtaMessageRepository.save(XtaMessageTestFactory.create("2")); + xtaMessageRepository.save(XtaMessageTestFactory.create("3")); + xtaMessageRepository.save(XtaMessageTestFactory.createBuilder() + .metaData(XtaMessageMetaDataTestFactory.createBuilder() + .readerIdentifier(Identifier.builder().value(OTHER_READER_IDENTIFIER).build()) + .build()) + .build()); + } + + @DisplayName("should return message for reader identifier") + @Test + void shouldReturnMessageForReaderIdentifier() { + var result = xtaMessageRepository.findByReaderIdentifierValue(READER_IDENTIFIER.value()).toList(); + + assertThat(result).hasSize(3); + } + + @DisplayName("should return messages for other reader identifier") + @Test + void shouldReturnMessagesForOtherReaderIdentifier() { + var result = xtaMessageRepository.findByReaderIdentifierValue(OTHER_READER_IDENTIFIER).toList(); + + assertThat(result).hasSize(1); + } + + @DisplayName("should return no messages for unknown reader identifier") + @Test + void shouldReturnNoMessagesForUnknownReaderIdentifier() { + var result = xtaMessageRepository.findByReaderIdentifierValue("unknown").toList(); + + assertThat(result).isEmpty(); + } + + } +} diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/PartyTypeTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/PartyTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f4f6486898ee9d44073323f558972eb9b6f9ab28 --- /dev/null +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/PartyTypeTestFactory.java @@ -0,0 +1,25 @@ +package de.ozgcloud.xta.test.app.mapper; + + +import static de.ozgcloud.xta.test.app.service.MessageMetaDataTestFactory.*; + +import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType; +import genv3.eu.osci.ws.x2014.x10.transport.PartyType; + +public class PartyTypeTestFactory { + + public static PartyType create() { + var partyIdentifier = new PartyType(); + partyIdentifier.setIdentifier(createIdentifier()); + return partyIdentifier; + } + + private static PartyIdentifierType createIdentifier() { + var identifier = new PartyIdentifierType(); + identifier.setName(READER_IDENTIFIER.getName()); + identifier.setCategory(READER_IDENTIFIER.getCategory()); + identifier.setValue(READER_IDENTIFIER.getValue()); + return identifier; + } + +} diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/RequestMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java similarity index 76% rename from src/test/java/de/ozgcloud/xta/test/app/service/RequestMapperTest.java rename to src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java index 34eb736095459d09514e6cfb82aaf345a6c5015e..f9be2e6c0628b5b3c95a0d5dcd6a240ff83d90b6 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/service/RequestMapperTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java @@ -1,5 +1,6 @@ -package de.ozgcloud.xta.test.app.service; +package de.ozgcloud.xta.test.app.mapper; +import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*; import static org.assertj.core.api.Assertions.*; import java.nio.file.Files; @@ -11,9 +12,15 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mapstruct.factory.Mappers; -import de.ozgcloud.xta.test.app.mapper.RequestMapper; import de.ozgcloud.xta.test.app.model.Identifier; import de.ozgcloud.xta.test.app.model.XtaFile; +import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest; +import de.ozgcloud.xta.test.app.service.AttributedURITypeTestFactory; +import de.ozgcloud.xta.test.app.service.ContentTypeTestFactory; +import de.ozgcloud.xta.test.app.service.GenericContentContainerTestFactoy; +import de.ozgcloud.xta.test.app.service.MessageMetaDataTestFactory; +import de.ozgcloud.xta.test.app.service.MsgBoxStatusListRequestTypeTestFactory; +import de.ozgcloud.xta.test.app.service.QualifierTypeBusinessScenarioTestFactory; import genv3.de.xoev.transport.xta.x211.ContentType; import genv3.de.xoev.transport.xta.x211.GenericContentContainer; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest; @@ -104,13 +111,11 @@ public class RequestMapperTest { messageMetaData.getQualifier().setBusinessScenario(businessScenario); var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData); - var mappedBusinessScenario = xtaMessageMetaData.businessScenario(); - assertThat(mappedBusinessScenario.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE); - assertThat(mappedBusinessScenario.name()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_NAME); - assertThat(mappedBusinessScenario.listURI()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_URI); - assertThat(mappedBusinessScenario.listVersionID()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_VERSION_ID); - assertThat(mappedBusinessScenario.isDefinedCode()).isTrue(); + assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE); + assertThat(xtaMessageMetaData.businessScenarioName()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_NAME); + assertThat(xtaMessageMetaData.businessScenarioListUri()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_URI); + assertThat(xtaMessageMetaData.businessScenarioListVersionId()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_LIST_VERSION_ID); } @DisplayName("Should map an undefined business scenario from MessageMetaData") @@ -120,10 +125,9 @@ public class RequestMapperTest { messageMetaData.getQualifier().setBusinessScenario(businessScenario); var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData); - var mappedBusinessScenario = xtaMessageMetaData.businessScenario(); - assertThat(mappedBusinessScenario.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE); - assertThat(mappedBusinessScenario.isDefinedCode()).isFalse(); + assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE); + assertThat(xtaMessageMetaData.businessScenarioListUri()).isNull(); } } @@ -188,4 +192,31 @@ public class RequestMapperTest { } } + @DisplayName("map message meta data listing request") + @Nested + class TestMapMessageMetaDataListingRequest { + private static final int MAX_LIST_ITEMS = 10; + + @DisplayName("should map client identifier value") + @Test + void shouldMapClientIdentifierValue() { + var result = doMapping(); + + assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value()); + } + + @DisplayName("should map max list items") + @Test + void shouldMaxMaxListItems() { + var result = doMapping(); + + assertThat(result.maxListItems()).isEqualTo(MAX_LIST_ITEMS); + } + + private XtaMessageMetaDataListingRequest doMapping() { + return requestMapper.mapMessageMetaDataListingRequest(MsgBoxStatusListRequestTypeTestFactory.create(MAX_LIST_ITEMS), PartyTypeTestFactory.create()); + } + + } + } 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 new file mode 100644 index 0000000000000000000000000000000000000000..afa350ede993d9dcca8b76590d674e345bff7498 --- /dev/null +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java @@ -0,0 +1,360 @@ +package de.ozgcloud.xta.test.app.mapper; + +import static de.ozgcloud.xta.test.app.mapper.ResponseMapper.*; +import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*; +import static org.assertj.core.api.Assertions.*; + +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.List; + +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.mapstruct.factory.Mappers; + +import de.ozgcloud.xta.test.app.model.XtaFile; +import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing; +import de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory; +import genv3.de.xoev.transport.xta.x211.ContentType; +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.QualifierType; +import lombok.SneakyThrows; + +public class ResponseMapperTest { + + private final ResponseMapper mapper = Mappers.getMapper(ResponseMapper.class); + + @DisplayName("map PartyIdentifierType") + @Nested + class TestMapPartyIdentifierType { + + @DisplayName("should map type") + @Test + void shouldMapType() { + var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER); + + assertThat(result.getType()).isEqualTo(IDENTIFIER_TYPE); + } + + @DisplayName("should map value") + @Test + void shouldMapValue() { + var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER); + + assertThat(result.getValue()).isEqualTo(AUTHOR_IDENTIFIER.value()); + } + + @DisplayName("should map category") + @Test + void shouldMapCategory() { + var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER); + + assertThat(result.getCategory()).isEqualTo(AUTHOR_IDENTIFIER.category()); + } + + @DisplayName("should map name") + @Test + void shouldMapName() { + var result = mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER); + + assertThat(result.getName()).isEqualTo(AUTHOR_IDENTIFIER.name()); + } + } + + @Nested + class MapGenericContentContainerFromXtaMessage { + private XtaFile messageXtaFile; + private XtaFile attachmentXtaFile; + + @BeforeEach + void beforeEach() { + messageXtaFile = XtaFileTestFactory.create(); + attachmentXtaFile = XtaFileTestFactory.create(); + } + + @DisplayName("should map generic content container from xta message") + @Test + void shouldMap() { + var xtaMessage = XtaMessageTestFactory.createBuilder("messageId") + .messageFile(messageXtaFile) + .attachmentFiles(List.of(attachmentXtaFile)) + .build(); + + var genericContentContainer = mapper.mapGenericContentContainerFromXtaMessage(xtaMessage); + var message = genericContentContainer.getContentContainer().getMessage(); + var attachmentList = genericContentContainer.getContentContainer().getAttachment(); + + assertThat(attachmentList).hasSize(1); + + assertContentTypeEqualsXtaFile(message, messageXtaFile); + assertContentTypeEqualsXtaFile(attachmentList.getFirst(), attachmentXtaFile); + } + + @SneakyThrows + void assertContentTypeEqualsXtaFile(ContentType contentType, XtaFile xtaFile) { + assertThat(contentType.getId()).isEqualTo(xtaFile.id()); + assertThat(contentType.getFilename()).isEqualTo(xtaFile.name()); + assertThat(contentType.getSize()).isEqualTo(xtaFile.size()); + + String content = new String(contentType.getValue().getInputStream().readAllBytes(), StandardCharsets.UTF_8); + assertThat(content).isEqualTo(XtaFileTestFactory.XTA_CONTENT); + } + } + + @DisplayName("map MsgBoxResponseType error") + @Nested + class TestMapMsgBoxResponseTypeError { + private static final String ERROR_STRING = "some error"; + + @DisplayName("should map no message available reason") + @Test + void shouldMapNoMessageAvailableReason() { + var result = mapper.mapMsgBoxResponseTypeError(ERROR_STRING); + + assertThat(result.getNoMessageAvailable().getReason()).isEqualTo(ERROR_STRING); + } + + @DisplayName("should map request id") + @Test + void shouldMapRequestId() { + var result = mapper.mapMsgBoxResponseTypeError(ERROR_STRING); + + assertThat(result.getMsgBoxRequestID()).isEqualTo(ResponseMapper.REQUEST_ID); + } + } + + @DisplayName("map MsgStatusListType") + @Nested + class TestMapMsgStatusListType { + private XtaMessageMetaDataListing xtaMessageMetaDataListing; + + @BeforeEach + void beforeEach() { + xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder() + .pendingMessageCount(BigInteger.ONE) + .messages(List.of(XtaMessageMetaDataTestFactory.create())) + .build(); + } + + @DisplayName("should map message meta data") + @Test + void shouldMapMessageMetaData() { + var result = mapper.mapMsgStatusListType(xtaMessageMetaDataListing); + + assertThat(result.getMessageMetaData()).hasSize(1); + } + + @DisplayName("should map message size") + @Test + void shouldMapMessageSize() { + var result = mapFirstMessageMetaData(); + + assertThat(result.getMsgSize()).isEqualTo(MESSAGE_SIZE); + } + + @DisplayName("should map service") + @Test + void shouldMapService() { + var result = mapFirstMessageMetaData(); + + assertThat(result.getQualifier().getService()).isEqualTo(SERVICE); + } + + @DisplayName("with defined business scenario") + @Nested + class TestWithDefinedBusinessScenario { + + @BeforeEach + void beforeEach() { + xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder() + .pendingMessageCount(BigInteger.ONE) + .messages(List.of(XtaMessageMetaDataTestFactory.create())) + .build(); + } + + @DisplayName("should map code") + @Test + void shouldMapCode() { + var result = mapFirstMessageMetaDataBusinessScenario(); + + assertThat(result.getDefined().getCode()).isEqualTo(BUSINESS_SCENARIO_CODE); + } + + @DisplayName("should map name") + @Test + void shouldMapName() { + var result = mapFirstMessageMetaDataBusinessScenario(); + + assertThat(result.getDefined().getName()).isEqualTo(BUSINESS_SCENARIO_NAME); + } + + @DisplayName("should map list uri") + @Test + void shouldMapListUri() { + var result = mapFirstMessageMetaDataBusinessScenario(); + + assertThat(result.getDefined().getListURI()).isEqualTo(BUSINESS_SCENARIO_LIST_URI); + } + + @DisplayName("should map list version id") + @Test + void shouldMapListVersionId() { + var result = mapFirstMessageMetaDataBusinessScenario(); + + assertThat(result.getDefined().getListVersionID()).isEqualTo(BUSINESS_SCENARIO_LIST_VERSION_ID); + } + } + + @DisplayName("with undefined business scenario") + @Nested + class TestWithUndefinedBusinessScenario { + @BeforeEach + void mock() { + xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder() + .pendingMessageCount(BigInteger.ONE) + .messages(List.of(XtaMessageMetaDataTestFactory.createBuilder() + .businessScenarioListUri(null) + .build())) + .build(); + + } + + @DisplayName("should map code") + @Test + void shouldMapCode() { + var result = mapFirstMessageMetaDataBusinessScenario(); + + assertThat(result.getUndefined()).isEqualTo(BUSINESS_SCENARIO_CODE); + } + + @DisplayName("should map defined null") + @Test + void shouldMapDefinedNull() { + var result = mapFirstMessageMetaDataBusinessScenario(); + + assertThat(result.getDefined()).isNull(); + } + } + + @DisplayName("should map message type code") + @Test + void shouldMapMessageTypeCode() { + var result = mapFirstMessageMetaData(); + + assertThat(result.getQualifier().getMessageType().getCode()).isEqualTo(MESSAGE_TYPE_CODE); + } + + @DisplayName("should map message type list uri") + @Test + void shouldMapMessageTypeListUri() { + var result = mapFirstMessageMetaData(); + + assertThat(result.getQualifier().getMessageType().getListURI()).isEqualTo(MESSAGE_TYPE_LIST_URI); + } + + @DisplayName("should map message type list version id") + @Test + void shouldMapMessageTypeListVersionId() { + var result = mapFirstMessageMetaData(); + + assertThat(result.getQualifier().getMessageType().getListVersionID()).isEqualTo(MESSAGE_TYPE_LIST_VERSION_ID); + } + + @DisplayName("should map author identifier") + @Test + void shouldMapAuthorIdentifier() { + var result = mapFirstMessageMetaData(); + + assertThat(result.getOriginators().getAuthor().getIdentifier()) + .usingRecursiveComparison() + .isEqualTo(mapper.mapPartyIdentifierType(AUTHOR_IDENTIFIER)); + } + + @DisplayName("should map reader identifier") + @Test + void shouldMapReaderIdentifier() { + var result = mapFirstMessageMetaData(); + + assertThat(result.getDestinations().getReader().getIdentifier()) + .usingRecursiveComparison() + .isEqualTo(mapper.mapPartyIdentifierType(READER_IDENTIFIER)); + } + + private MsgStatusListType doMapping() { + return mapper.mapMsgStatusListType(xtaMessageMetaDataListing); + } + + private MessageMetaData mapFirstMessageMetaData() { + return doMapping().getMessageMetaData().getFirst(); + } + + private QualifierType.BusinessScenario mapFirstMessageMetaDataBusinessScenario() { + return mapFirstMessageMetaData().getQualifier().getBusinessScenario(); + } + } + + @DisplayName("map MsgBoxResponseType") + @Nested + class TestMapMsgBoxResponseType { + private XtaMessageMetaDataListing xtaMessageMetaDataListing; + + @DisplayName("with no pending messages") + @Nested + class TestWithNoPendingMessages { + @BeforeEach + void beforeEach() { + xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder() + .pendingMessageCount(BigInteger.ZERO) + .messages(List.of()) + .build(); + } + + @DisplayName("should set no message available reason") + @Test + void shouldSetNoMessageAvailableReason() { + var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing); + + assertThat(msgBoxResponseType.getNoMessageAvailable().getReason()).isEqualTo(ResponseMapper.NO_MESSAGES_REASON); + } + + @DisplayName("should set items pending to null") + @Test + void shouldSetItemsPendingToNull() { + var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing); + + assertThat(msgBoxResponseType.getItemsPending()).isNull(); + } + } + + @DisplayName("with pending messages") + @Nested + class TestWithPendingMessages { + @BeforeEach + void beforeEach() { + xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder() + .pendingMessageCount(BigInteger.ONE) + .messages(List.of(XtaMessageMetaDataTestFactory.create())) + .build(); + } + + @DisplayName("should set items pending") + @Test + void shouldSetItemsPending() { + var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing); + + assertThat(msgBoxResponseType.getItemsPending()).isEqualTo(BigInteger.ONE); + } + + @DisplayName("should set no message available to null") + @Test + void shouldSetNoMessageAvailableToNull() { + var msgBoxResponseType = mapper.mapMsgBoxResponseType(xtaMessageMetaDataListing); + + assertThat(msgBoxResponseType.getNoMessageAvailable()).isNull(); + } + } + } +} diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaFileTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaFileTestFactory.java similarity index 69% rename from src/test/java/de/ozgcloud/xta/test/app/service/XtaFileTestFactory.java rename to src/test/java/de/ozgcloud/xta/test/app/mapper/XtaFileTestFactory.java index d2279af3c77c95c8c1e1bdfda2f777bf27d004d7..fca7978e6fab2db263bd15d0469dcd64bf391774 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaFileTestFactory.java +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaFileTestFactory.java @@ -1,20 +1,21 @@ -package de.ozgcloud.xta.test.app.service; +package de.ozgcloud.xta.test.app.mapper; import java.io.File; import java.math.BigInteger; import de.ozgcloud.xta.test.app.model.XtaFile; +import de.ozgcloud.xta.test.app.service.TempFileTestFactory; public class XtaFileTestFactory { static final String NAME = "Test_File"; static final String XTA_CONTENT = "slkafj3jifsdasx"; static final String ZIP_CONTENT_TYPE = "application/zip"; - static XtaFile createXtaFile() { - return createXtaFileBuilder().build(); + public static XtaFile create() { + return createBuilder().build(); } - static XtaFile.XtaFileBuilder createXtaFileBuilder() { + static XtaFile.XtaFileBuilder createBuilder() { File tfile = TempFileTestFactory.createFile(XTA_CONTENT); return XtaFile.builder() .name(NAME) diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaMessageTestFactory.java similarity index 51% rename from src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageTestFactory.java rename to src/test/java/de/ozgcloud/xta/test/app/mapper/XtaMessageTestFactory.java index d14414834c9f4464fe11717b47b1e05d0898fce1..81ac3daa5520f0d4413ad0c1b9e5d964a7f1b4f9 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageTestFactory.java +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/XtaMessageTestFactory.java @@ -1,8 +1,9 @@ -package de.ozgcloud.xta.test.app.service; +package de.ozgcloud.xta.test.app.mapper; import java.util.List; import de.ozgcloud.xta.test.app.model.XtaMessage; +import de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory; public class XtaMessageTestFactory { public static final String MESSAGE_ID_1 = "status_1"; @@ -12,10 +13,17 @@ public class XtaMessageTestFactory { return createBuilder(messageId).build(); } + public static XtaMessage.XtaMessageBuilder createBuilder() { + return XtaMessage.builder() + .metaData(XtaMessageMetaDataTestFactory.create()) + .messageFile(XtaFileTestFactory.create()) + .attachmentFiles(List.of(XtaFileTestFactory.create())); + } + public static XtaMessage.XtaMessageBuilder createBuilder(String messageId) { return XtaMessage.builder() .metaData(XtaMessageMetaDataTestFactory.create(messageId)) - .messageFile(XtaFileTestFactory.createXtaFile()) - .attachmentFiles(List.of(XtaFileTestFactory.createXtaFile())); + .messageFile(XtaFileTestFactory.create()) + .attachmentFiles(List.of(XtaFileTestFactory.create())); } } diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/ResponseMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/service/ResponseMapperTest.java deleted file mode 100644 index 6cc4b1f5930bb8967ec436eb75e43e29ad54c004..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/xta/test/app/service/ResponseMapperTest.java +++ /dev/null @@ -1,187 +0,0 @@ -package de.ozgcloud.xta.test.app.service; - -import static org.assertj.core.api.Assertions.*; - -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.util.List; - -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.mapstruct.factory.Mappers; - -import de.ozgcloud.xta.test.app.mapper.ResponseMapper; -import de.ozgcloud.xta.test.app.model.Identifier; -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.eu.osci.ws.x2014.x10.transport.PartyIdentifierType; -import lombok.SneakyThrows; - -public class ResponseMapperTest { - - private final ResponseMapper mapper = Mappers.getMapper(ResponseMapper.class); - - @Nested - class MapMessageMetaDataFromXtaMessageMetaData { - public static final String MESSAGE_ID = "messageId"; - - private XtaMessageMetaData xtaMessageMetaData; - - @DisplayName("should map messageMetaData") - @Test - void shouldMapMessageId() { - xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID); - - var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); - - assertThat(messageMetaData.getMsgIdentification().getMessageID().getValue()).isEqualTo(MESSAGE_ID); - assertThat(messageMetaData.getQualifier().getService()).isEqualTo(XtaMessageMetaDataTestFactory.SERVICE); - assertThat(messageMetaData.getMsgSize()).isEqualTo(xtaMessageMetaData.messageSize()); - } - - @DisplayName("should map defined business scenario") - @Test - void shouldMapDefinedBusinessScenario() { - xtaMessageMetaData = XtaMessageMetaDataTestFactory.createBuilder(MESSAGE_ID) - .businessScenario(XtaMessageMetaDataTestFactory.createDefinedBusinessScenario()) - .build(); - - var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); - var businessScenario = messageMetaData.getQualifier().getBusinessScenario(); - - assertThat(businessScenario.getDefined().getCode()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_CODE); - assertThat(businessScenario.getDefined().getName()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_NAME); - assertThat(businessScenario.getDefined().getListURI()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_LIST_URI); - assertThat(businessScenario.getDefined().getListVersionID()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_LIST_VERSION_ID); - assertThat(businessScenario.getUndefined()).isNull(); - } - - @DisplayName("should map undefined business scenario") - @Test - void shouldMapUndefinedBusinessScenario() { - xtaMessageMetaData = XtaMessageMetaDataTestFactory.createBuilder(MESSAGE_ID) - .businessScenario(XtaMessageMetaDataTestFactory.createUndefinedBusinessScenario()) - .build(); - - var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); - var businessScenario = messageMetaData.getQualifier().getBusinessScenario(); - - assertThat(businessScenario.getDefined()).isNull(); - assertThat(businessScenario.getUndefined()).isEqualTo(XtaMessageMetaDataTestFactory.BUSINESS_SCENARIO_CODE); - } - - @DisplayName("should map qualifier message type") - @Test - void shouldMapMessageType() { - xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID); - - var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); - var messageType = messageMetaData.getQualifier().getMessageType(); - - assertThat(messageType.getCode()).isEqualTo(XtaMessageMetaDataTestFactory.MESSAGE_TYPE_CODE); - assertThat(messageType.getPayloadSchema()).isEqualTo(XtaMessageMetaDataTestFactory.MESSAGE_PAYLOAD_SCHEMA); - assertThat(messageType.getListURI()).isEqualTo(ResponseMapper.MESSAGE_TYPE_LIST_URI); - assertThat(messageType.getListVersionID()).isEqualTo(ResponseMapper.MESSAGE_TYPE_LIST_VERSION_ID); - } - - @DisplayName("should map author and reader identifier") - @Test - void shouldMapIdentifier() { - xtaMessageMetaData = XtaMessageMetaDataTestFactory.create(MESSAGE_ID); - - var messageMetaData = mapper.mapMessageMetaDataFromXtaMessageMetaData(xtaMessageMetaData); - var authorIdentifier = messageMetaData.getOriginators().getAuthor().getIdentifier(); - var readerIdentifier = messageMetaData.getDestinations().getReader().getIdentifier(); - - assertIdentifiersAreEqual(authorIdentifier, XtaMessageMetaDataTestFactory.AUTHOR_IDENTIFIER); - assertIdentifiersAreEqual(readerIdentifier, XtaMessageMetaDataTestFactory.READER_IDENTIFIER); - } - - void assertIdentifiersAreEqual(PartyIdentifierType identifierType, Identifier identifier) { - assertThat(identifierType.getName()).isEqualTo(identifier.name()); - assertThat(identifierType.getCategory()).isEqualTo(identifier.category()); - assertThat(identifierType.getValue()).isEqualTo(identifier.value()); - assertThat(identifierType.getType()).isEqualTo(ResponseMapper.IDENTIFIER_TYPE); - } - } - - @Nested - class MapGenericContentContainerFromXtaMessage { - private XtaFile messageXtaFile; - private XtaFile attachmentXtaFile; - - @BeforeEach - void beforeEach() { - messageXtaFile = XtaFileTestFactory.createXtaFile(); - attachmentXtaFile = XtaFileTestFactory.createXtaFile(); - } - - @DisplayName("should map generic content container from xta message") - @Test - void shouldMap() { - var xtaMessage = XtaMessageTestFactory.createBuilder("messageId") - .messageFile(messageXtaFile) - .attachmentFiles(List.of(attachmentXtaFile)) - .build(); - - var genericContentContainer = mapper.mapGenericContentContainerFromXtaMessage(xtaMessage); - var message = genericContentContainer.getContentContainer().getMessage(); - var attachmentList = genericContentContainer.getContentContainer().getAttachment(); - - assertThat(attachmentList).hasSize(1); - - assertContentTypeEqualsXtaFile(message, messageXtaFile); - assertContentTypeEqualsXtaFile(attachmentList.getFirst(), attachmentXtaFile); - } - - @SneakyThrows - void assertContentTypeEqualsXtaFile(ContentType contentType, XtaFile xtaFile) { - assertThat(contentType.getId()).isEqualTo(xtaFile.id()); - assertThat(contentType.getFilename()).isEqualTo(xtaFile.name()); - assertThat(contentType.getSize()).isEqualTo(xtaFile.size()); - - String content = new String(contentType.getValue().getInputStream().readAllBytes(), StandardCharsets.UTF_8); - assertThat(content).isEqualTo(XtaFileTestFactory.XTA_CONTENT); - } - } - - @Nested - class MapMsgBoxResponseTypeFromXtaMessageMetaDataListing { - private XtaMessageMetaDataListing xtaMessageMetaDataListing; - - @DisplayName("should have no messages available when mapping empty XtaMetaDataListing") - @Test - void shouldHaveNoMessageAvailable() { - xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder() - .requestId("requestId") - .pendingMessageCount(BigInteger.ZERO) - .messages(List.of()) - .build(); - - var msgBoxResponseType = mapper.mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(xtaMessageMetaDataListing); - - assertThat(msgBoxResponseType.getNoMessageAvailable()).isNotNull(); - assertThat(msgBoxResponseType.getNoMessageAvailable().getReason()).startsWith("NoMatch"); - assertThat(msgBoxResponseType.getItemsPending()).isNull(); - } - - @DisplayName("should have items pending when mapping filled XtaMetaDatalisting") - @Test - void shouldHaveItemsPending() { - xtaMessageMetaDataListing = XtaMessageMetaDataListing.builder() - .requestId("requestId") - .pendingMessageCount(BigInteger.ONE) - .messages(List.of(XtaMessageMetaDataTestFactory.create("messageId"))) - .build(); - - var msgBoxResponseType = mapper.mapMsgBoxResponseTypeFromXtaMessageMetaDataListing(xtaMessageMetaDataListing); - - assertThat(msgBoxResponseType.getItemsPending()).isEqualTo(BigInteger.ONE); - assertThat(msgBoxResponseType.getNoMessageAvailable()).isNull(); - } - } -} diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageMetaDataTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageMetaDataTestFactory.java index 754896e99c123fd66d7e1ceb86357477ab58ec63..8760cc8b3dc309ebb3ef40d5f5eae7239ca40b1c 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageMetaDataTestFactory.java +++ b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageMetaDataTestFactory.java @@ -6,6 +6,7 @@ import de.ozgcloud.xta.test.app.model.Identifier; import de.ozgcloud.xta.test.app.model.XtaMessageMetaData; public class XtaMessageMetaDataTestFactory { + public static final String DEFAULT_MESSAGE_ID = "defaultMessageId"; public static final Identifier AUTHOR_IDENTIFIER = createIdentifier("author", "AUTHOR"); public static final Identifier READER_IDENTIFIER = createIdentifier("reader", "READER"); public static final String SERVICE = "Service"; @@ -15,39 +16,31 @@ public class XtaMessageMetaDataTestFactory { public static final String BUSINESS_SCENARIO_LIST_VERSION_ID = "BusinessScenarioListVersionID"; public static final String MESSAGE_TYPE_CODE = "MessageTypeCode"; public static final String MESSAGE_PAYLOAD_SCHEMA = "MessageTypePayloadSchema"; + public static final BigInteger MESSAGE_SIZE = BigInteger.valueOf(3000); + + public static XtaMessageMetaData create() { + return createBuilder().build(); + } public static XtaMessageMetaData create(String messageId) { - return createBuilder(messageId).build(); + return createBuilder() + .messageId(messageId) + .build(); } - public static XtaMessageMetaData.XtaMessageMetaDataBuilder createBuilder(String messageId) { + public static XtaMessageMetaData.XtaMessageMetaDataBuilder createBuilder() { return XtaMessageMetaData.builder() - .messageId(messageId) + .messageId(DEFAULT_MESSAGE_ID) .authorIdentifier(AUTHOR_IDENTIFIER) .readerIdentifier(READER_IDENTIFIER) .service(SERVICE) - .businessScenario(createUndefinedBusinessScenario()) + .businessScenarioCode(BUSINESS_SCENARIO_CODE) + .businessScenarioName(BUSINESS_SCENARIO_NAME) + .businessScenarioListUri(BUSINESS_SCENARIO_LIST_URI) + .businessScenarioListVersionId(BUSINESS_SCENARIO_LIST_VERSION_ID) .messageTypeCode(MESSAGE_TYPE_CODE) .messageTypePayloadSchema(MESSAGE_PAYLOAD_SCHEMA) - .messageSize(BigInteger.ZERO); - } - - public static XtaMessageMetaData.BusinessScenario createDefinedBusinessScenario() { - return new XtaMessageMetaData.BusinessScenario( - BUSINESS_SCENARIO_CODE, - BUSINESS_SCENARIO_NAME, - BUSINESS_SCENARIO_LIST_URI, - BUSINESS_SCENARIO_LIST_VERSION_ID, - true); - } - - public static XtaMessageMetaData.BusinessScenario createUndefinedBusinessScenario() { - return new XtaMessageMetaData.BusinessScenario( - BUSINESS_SCENARIO_CODE, - null, - null, - null, - false); + .messageSize(MESSAGE_SIZE); } private static Identifier createIdentifier(String value, String category) { diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageRepositoryTest.java b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageRepositoryTest.java deleted file mode 100644 index 025749dd0a144b25131b68c0aab2d4b3c94b59ff..0000000000000000000000000000000000000000 --- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageRepositoryTest.java +++ /dev/null @@ -1,145 +0,0 @@ -package de.ozgcloud.xta.test.app.service; - -import static de.ozgcloud.xta.test.app.service.XtaMessageTestFactory.*; -import static org.assertj.core.api.Assertions.*; - -import java.util.List; - -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.ValueSource; - -import de.ozgcloud.xta.test.app.data.XtaMessageRepository; -import de.ozgcloud.xta.test.app.model.XtaFile; -import de.ozgcloud.xta.test.app.model.XtaMessage; - -public class XtaMessageRepositoryTest { - - private XtaMessageRepository xtaMessageRepository; - - @DisplayName("save") - @Nested - class TestSave { - @BeforeEach - void beforeEach() { - xtaMessageRepository = new XtaMessageRepository(); - } - - @Test - void shouldSaveMessage() { - var message = XtaMessageTestFactory.create(MESSAGE_ID_1); - - xtaMessageRepository.save(message); - - assertThat(xtaMessageRepository.get(MESSAGE_ID_1)).contains(message); - } - } - - @DisplayName("get") - @Nested - class TestGet { - private final XtaMessage message = XtaMessageTestFactory.create(MESSAGE_ID_1); - - @BeforeEach - void beforeEach() { - xtaMessageRepository = new XtaMessageRepository(); - xtaMessageRepository.save(message); - } - - @Test - void shouldReturnMessage() { - var result = xtaMessageRepository.get(MESSAGE_ID_1); - - assertThat(result).contains(message); - } - - @Test - void shouldReturnEmpty() { - var result = xtaMessageRepository.get(MESSAGE_ID_2); - - assertThat(result).isEmpty(); - } - } - - @Nested - class TestDelete { - public static final String MESSAGE_ID = "messageId"; - private XtaFile messageFile; - private XtaFile attachmentFile; - private XtaMessage message; - - @BeforeEach - void beforeEach() { - messageFile = XtaFileTestFactory.createXtaFile(); - attachmentFile = XtaFileTestFactory.createXtaFile(); - message = XtaMessageTestFactory.createBuilder(MESSAGE_ID) - .messageFile(messageFile) - .attachmentFiles(List.of(attachmentFile)) - .build(); - xtaMessageRepository = new XtaMessageRepository(); - xtaMessageRepository.save(message); - } - - @Test - void shouldDeleteTemporaryFiles() { - assertThat(messageFile.file()).exists(); - assertThat(attachmentFile.file()).exists(); - - xtaMessageRepository.delete(MESSAGE_ID); - - assertThat(messageFile.file()).doesNotExist(); - assertThat(attachmentFile.file()).doesNotExist(); - } - } - - @DisplayName("find all limited to") - @Nested - class TestFindAllLimitedTo { - @BeforeEach - void beforeEach() { - xtaMessageRepository = new XtaMessageRepository(); - xtaMessageRepository.save(XtaMessageTestFactory.create("1")); - xtaMessageRepository.save(XtaMessageTestFactory.create("2")); - xtaMessageRepository.save(XtaMessageTestFactory.create("3")); - } - - @DisplayName("should return limit") - @ParameterizedTest - @ValueSource(ints = { 0, 1, 2 }) - void shouldReturnLimit(int limit) { - var result = xtaMessageRepository.findAllLimitedTo(limit); - - assertThat(result).hasSize(limit); - } - - @DisplayName("should return all") - @ParameterizedTest - @ValueSource(ints = { 3, 4, 5 }) - void shouldReturnAll(int limit) { - var result = xtaMessageRepository.findAllLimitedTo(limit); - - assertThat(result).hasSize(3); - } - - } - - @DisplayName("count") - @Nested - class TestCount { - @BeforeEach - void beforeEach() { - xtaMessageRepository = new XtaMessageRepository(); - xtaMessageRepository.save(XtaMessageTestFactory.create("1")); - xtaMessageRepository.save(XtaMessageTestFactory.create("2")); - xtaMessageRepository.save(XtaMessageTestFactory.create("3")); - } - - @Test - void shouldReturnCount() { - assertThat(xtaMessageRepository.count()).isEqualTo(3); - } - } -} diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java index 5ecc04bba1528828398360ee114e34448208b685..08fecc6dfedf7dc21599285b9f51c0fa5e85c833 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java @@ -1,6 +1,7 @@ package de.ozgcloud.xta.test.app.service; -import static de.ozgcloud.xta.test.app.service.XtaMessageTestFactory.*; +import static de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory.*; +import static de.ozgcloud.xta.test.app.service.XtaMessageMetaDataTestFactory.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; @@ -15,8 +16,10 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import de.ozgcloud.xta.test.app.data.XtaMessageRepository; +import de.ozgcloud.xta.test.app.mapper.XtaMessageTestFactory; import de.ozgcloud.xta.test.app.model.XtaMessage; import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing; +import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest; public class XtaMessageServiceTest { @Mock @@ -46,10 +49,15 @@ public class XtaMessageServiceTest { @Nested class GetStatusList { - public static final String REQUEST_ID = "request_1"; + private final int MAX_LIST_ITEMS = 50; private final int MESSAGE_COUNT = 2; + private final XtaMessageMetaDataListingRequest messageMetaDataListingRequest = XtaMessageMetaDataListingRequest.builder() + .clientIdentifierValue(READER_IDENTIFIER.value()) + .maxListItems(MAX_LIST_ITEMS) + .build(); + private XtaMessage message1; private XtaMessage message2; @@ -57,15 +65,9 @@ public class XtaMessageServiceTest { void beforeEach() { message1 = XtaMessageTestFactory.create(MESSAGE_ID_1); message2 = XtaMessageTestFactory.create(MESSAGE_ID_2); - when(messageRepository.findAllLimitedTo(MAX_LIST_ITEMS)).thenReturn(List.of(message1, message2)); - when(messageRepository.count()).thenReturn(BigInteger.valueOf(MESSAGE_COUNT)); - } - - @Test - void shouldSetRequestId() { - var statusList = getStatusList(); - assertThat(statusList.requestId()).isEqualTo(REQUEST_ID); + when(messageRepository.findByReaderIdentifierValueLimitedTo(READER_IDENTIFIER.value(), MAX_LIST_ITEMS)).thenReturn(List.of(message1, message2)); + when(messageRepository.countByReaderIdentifierValue(READER_IDENTIFIER.value())).thenReturn(BigInteger.valueOf(MESSAGE_COUNT)); } @Test @@ -83,7 +85,7 @@ public class XtaMessageServiceTest { } private XtaMessageMetaDataListing getStatusList() { - return service.getStatusList(REQUEST_ID, MAX_LIST_ITEMS); + return service.getStatusList(messageMetaDataListingRequest); } }