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

Merge pull request 'OZG-6922 xta-adapter: Continue with other messages on...

Merge pull request 'OZG-6922 xta-adapter: Continue with other messages on message processing error' (#182) from OZG-6922-Abhohlen-von-XTA-Nachrichten-schlägt-fehl into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/eingang-manager/pulls/182


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents 3534727e f8008ab0
Branches
Tags
No related merge requests found
......@@ -4,6 +4,7 @@ import static java.util.Collections.*;
import java.util.Collection;
import java.util.List;
import java.util.Optional;
import java.util.Spliterators;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
......@@ -44,7 +45,10 @@ class XtaService {
private XtaCurrentIdentifierService service;
public Stream<FormData> getMessages() {
return createXtaMessageStream().filter(this::isSupportedMessageType).map(this::getFormData);
return createXtaMessageStream()
.filter(this::isSupportedMessageType)
.map(this::getFormDataIfNoRuntimeException)
.flatMap(Optional::stream);
}
Stream<XtaMessageMetaData> createXtaMessageStream() {
......@@ -66,7 +70,16 @@ class XtaService {
return false;
}
public FormData getFormData(@NonNull XtaMessageMetaData metaData) {
Optional<FormData> getFormDataIfNoRuntimeException(@NonNull XtaMessageMetaData metaData) {
try {
return Optional.of(getFormData(metaData));
} catch (RuntimeException exception) {
LOG.error("Failed to process xta message (id: %s)".formatted(metaData.getMessageId()), exception);
return Optional.empty();
}
}
FormData getFormData(@NonNull XtaMessageMetaData metaData) {
var msg = remoteService.getMessage(metaData.getMessageId());
var incomingFiles = xtaIncomingFilesMapper.toIncomingFiles(msg.getMessageFiles());
var representationsAttachmentsPair = getRepresentationsAttachmentsPair(metaData, incomingFiles);
......
......@@ -6,6 +6,7 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach;
......@@ -49,52 +50,93 @@ class XtaServiceTest {
@Mock
private XtaCurrentIdentifierService currentIdentifierService;
@Mock
private FormData formData;
@Mock
private FormData formData2;
@Nested
class TestGetMessagesAsFormData {
private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
private final XtaMessage message = XtaMessageTestFactory.create();
@BeforeEach
void setup() {
doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream();
}
@DisplayName("with one message")
@Nested
class TestWithOneMessage {
@BeforeEach
void setup() {
doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream();
}
@Test
void shouldCallCreateStream() {
service.getMessages();
@Test
void shouldCallCreateStream() {
service.getMessages();
verify(service).createXtaMessageStream();
}
verify(service).createXtaMessageStream();
}
@Test
void shouldCallFilterByMessageType() {
setupMocks();
@Test
void shouldCallFilterByMessageType() {
setupMocks();
service.getMessages().toList();
service.getMessages().toList();
verify(service).isSupportedMessageType(messageMetaData);
}
verify(service).isSupportedMessageType(messageMetaData);
}
@Test
void shouldCallGetFormData() {
setupMocks();
doReturn(true).when(service).isSupportedMessageType(messageMetaData);
@Test
void shouldCallGetFormDataIfNoRuntimeException() {
setupMocks();
doReturn(true).when(service).isSupportedMessageType(messageMetaData);
service.getMessages().toList();
service.getMessages().toList();
verify(service).getFormData(messageMetaData);
verify(service).getFormData(messageMetaData);
}
@Test
void shouldNotCallGetFormDataIfNoRuntimeException() {
doReturn(false).when(service).isSupportedMessageType(messageMetaData);
service.getMessages().toList();
verify(service, never()).getFormDataIfNoRuntimeException(any());
}
}
@Test
void shouldNotCallGetFormData() {
doReturn(false).when(service).isSupportedMessageType(messageMetaData);
@DisplayName("with multiple messages")
@Nested
class TestWithMultipleMessages {
private final XtaMessageMetaData messageMetaData2 = XtaMessageMetaDataTestFactory.createBuilder()
.messageId(XtaMessageId.from("messageId2"))
.build();
private final XtaMessageMetaData messageMetaData3 = XtaMessageMetaDataTestFactory.createBuilder()
.messageId(XtaMessageId.from("messageId3"))
.build();
@BeforeEach
void setup() {
doReturn(Stream.of(messageMetaData, messageMetaData2, messageMetaData3)).when(service).createXtaMessageStream();
}
service.getMessages().toList();
@DisplayName("should return stream of messages")
@Test
void shouldReturnStreamOfMessages() {
doReturn(true).when(service).isSupportedMessageType(messageMetaData);
doReturn(false).when(service).isSupportedMessageType(messageMetaData3);
doReturn(true).when(service).isSupportedMessageType(messageMetaData2);
doReturn(Optional.of(formData)).when(service).getFormDataIfNoRuntimeException(messageMetaData);
doReturn(Optional.of(formData2)).when(service).getFormDataIfNoRuntimeException(messageMetaData2);
verify(service, never()).getFormData(any());
var result = service.getMessages().toList();
assertThat(result).containsExactly(formData, formData2);
}
}
private void setupMocks() {
var testFormData = FormDataTestFactory.create();
when(mapper.toFormData(any(), any(), eq(vorgangNummerSupplier))).thenReturn(testFormData);
......@@ -129,6 +171,53 @@ class XtaServiceTest {
}
}
@DisplayName("get form data if no runtime exception")
@Nested
class TestGetFormDataIfNoRuntimeException {
@Mock
XtaMessageMetaData messageMetaData;
@Mock
FormData formData;
@DisplayName("should call get formdata")
@Test
void shouldCallGetFormdata() {
service.getFormDataIfNoRuntimeException(messageMetaData);
verify(service).getFormData(messageMetaData);
}
@DisplayName("with exception")
@Nested
class TestWithException {
@DisplayName("should return empty")
@Test
void shouldReturnEmpty() {
doThrow(new RuntimeException("test-error")).when(service).getFormData(any());
var result = service.getFormDataIfNoRuntimeException(messageMetaData);
assertThat(result).isEmpty();
}
}
@DisplayName("without exception")
@Nested
class TestWithoutException {
@DisplayName("should return")
@Test
void shouldReturn() {
doReturn(formData).when(service).getFormData(any());
var result = service.getFormDataIfNoRuntimeException(messageMetaData);
assertThat(result).contains(formData);
}
}
}
@Nested
class TestGetFormData {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment