Skip to content
Snippets Groups Projects
Commit 83d870d5 authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-6176 Avoid calling getStatusList endlessly

parent d0d78543
Branches
Tags
No related merge requests found
package de.ozgcloud.eingang.xta;
import java.math.BigInteger;
import java.util.Optional;
import java.util.stream.Stream;
import jakarta.xml.bind.JAXBElement;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import eu.osci.ws._2008._05.transport.MsgStatusListType;
import eu.osci.ws._2014._10.transport.MessageMetaData;
......@@ -26,19 +23,10 @@ interface XtaMessageMetaDataMapper {
return XtaMessageId.from(id);
}
@Mapping(target = "moreMessagesAvailable", source = ".", qualifiedByName = "moreMessagesAvailable")
// OZG-6176 Avoid calling getStatusList endlessly (due to getNextStatusList not being implemented on the xta-server)
@Mapping(target = "moreMessagesAvailable", constant = "false")
XtaMessageMetaDatasAndHeader msgStatusListFromSoap(MsgStatusListTypeAndHeaderResponse statusList);
@Named("moreMessagesAvailable")
default boolean moreMessagesAvailable(MsgStatusListTypeAndHeaderResponse statusList) {
if (statusList.isNoMessageAvailable()) {
return false;
}
return Optional.ofNullable(statusList.getMessageItemsPending())
.filter(messagesPending -> !BigInteger.ZERO.equals(messagesPending))
.isPresent();
}
default Stream<XtaMessageMetaData> map(JAXBElement<MsgStatusListType> msgStatusListResponse) {
return msgStatusListResponse.getValue().getMessageMetaData().stream().map(this::fromSoap);
}
......
......@@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*;
import java.math.BigInteger;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
......@@ -14,55 +15,27 @@ class XtaMessageMetaDataMapperTest {
@Spy
private final XtaMessageMetaDataMapper mapper = Mappers.getMapper(XtaMessageMetaDataMapper.class);
@DisplayName("msg status list from soap")
@Nested
class TestMoreMessagesAvailable {
class TestMsgStatusListFromSoap {
@Test
void shouldReturnFalseOnNoMessagesAvailable() {
void shouldMap() {
var response = MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().build();
var response = mapper.moreMessagesAvailable(buildWithNoMessageAvailable());
var result = mapper.msgStatusListFromSoap(response);
assertThat(response).isFalse();
}
private MsgStatusListTypeAndHeaderResponse buildWithNoMessageAvailable() {
return MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().noMessageAvailable(true).build();
}
@Test
void shouldReturnFalseOnPendingMessagesNull() {
var response = mapper.moreMessagesAvailable(buildPendingMessagesNull());
assertThat(response).isFalse();
}
private MsgStatusListTypeAndHeaderResponse buildPendingMessagesNull() {
return MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().messageItemsPending(null).build();
assertThat(result).isNotNull();
}
@DisplayName("should set moreMessagesAvailable to false")
@Test
void shouldReturnFalseOnNoMessagesPending() {
void shouldSetMoreMessagesAvailableToFalse() {
var response = MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().build();
var response = mapper.moreMessagesAvailable(buildWithoutPendingMessages());
assertThat(response).isFalse();
}
private MsgStatusListTypeAndHeaderResponse buildWithoutPendingMessages() {
return MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().messageItemsPending(null).build();
}
@Test
void shouldReturnTrueOnMessagesPending() {
var response = mapper.moreMessagesAvailable(buildWithPendingMessages());
assertThat(response).isTrue();
}
var result = mapper.msgStatusListFromSoap(response);
private MsgStatusListTypeAndHeaderResponse buildWithPendingMessages() {
return MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().messageItemsPending(BigInteger.ONE).build();
assertThat(result.isMoreMessagesAvailable()).isFalse();
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment