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; package de.ozgcloud.eingang.xta;
import java.math.BigInteger;
import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import jakarta.xml.bind.JAXBElement; import jakarta.xml.bind.JAXBElement;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.Named;
import eu.osci.ws._2008._05.transport.MsgStatusListType; import eu.osci.ws._2008._05.transport.MsgStatusListType;
import eu.osci.ws._2014._10.transport.MessageMetaData; import eu.osci.ws._2014._10.transport.MessageMetaData;
...@@ -26,19 +23,10 @@ interface XtaMessageMetaDataMapper { ...@@ -26,19 +23,10 @@ interface XtaMessageMetaDataMapper {
return XtaMessageId.from(id); 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); 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) { default Stream<XtaMessageMetaData> map(JAXBElement<MsgStatusListType> msgStatusListResponse) {
return msgStatusListResponse.getValue().getMessageMetaData().stream().map(this::fromSoap); return msgStatusListResponse.getValue().getMessageMetaData().stream().map(this::fromSoap);
} }
......
...@@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*; ...@@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.*;
import java.math.BigInteger; import java.math.BigInteger;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
...@@ -14,55 +15,27 @@ class XtaMessageMetaDataMapperTest { ...@@ -14,55 +15,27 @@ class XtaMessageMetaDataMapperTest {
@Spy @Spy
private final XtaMessageMetaDataMapper mapper = Mappers.getMapper(XtaMessageMetaDataMapper.class); private final XtaMessageMetaDataMapper mapper = Mappers.getMapper(XtaMessageMetaDataMapper.class);
@DisplayName("msg status list from soap")
@Nested @Nested
class TestMoreMessagesAvailable { class TestMsgStatusListFromSoap {
@Test @Test
void shouldReturnFalseOnNoMessagesAvailable() { void shouldMap() {
var response = MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().build();
var response = mapper.moreMessagesAvailable(buildWithNoMessageAvailable()); var result = mapper.msgStatusListFromSoap(response);
assertThat(response).isFalse(); assertThat(result).isNotNull();
}
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();
} }
@DisplayName("should set moreMessagesAvailable to false")
@Test @Test
void shouldReturnFalseOnNoMessagesPending() { void shouldSetMoreMessagesAvailableToFalse() {
var response = MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().build();
var response = mapper.moreMessagesAvailable(buildWithoutPendingMessages()); var result = mapper.msgStatusListFromSoap(response);
assertThat(response).isFalse();
}
private MsgStatusListTypeAndHeaderResponse buildWithoutPendingMessages() {
return MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().messageItemsPending(null).build();
}
@Test
void shouldReturnTrueOnMessagesPending() {
var response = mapper.moreMessagesAvailable(buildWithPendingMessages());
assertThat(response).isTrue();
}
private MsgStatusListTypeAndHeaderResponse buildWithPendingMessages() { assertThat(result.isMoreMessagesAvailable()).isFalse();
return MsgStatusListTypeAndHeaderResponseTestFactory.createBuilder().messageItemsPending(BigInteger.ONE).build();
} }
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment