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

OZG-6922 xta-adapter: Continue with other messages on message processing error

parent 3534727e
Branches
Tags
No related merge requests found
...@@ -4,6 +4,7 @@ import static java.util.Collections.*; ...@@ -4,6 +4,7 @@ import static java.util.Collections.*;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.Spliterators; import java.util.Spliterators;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
...@@ -44,7 +45,10 @@ class XtaService { ...@@ -44,7 +45,10 @@ class XtaService {
private XtaCurrentIdentifierService service; private XtaCurrentIdentifierService service;
public Stream<FormData> getMessages() { 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() { Stream<XtaMessageMetaData> createXtaMessageStream() {
...@@ -66,7 +70,16 @@ class XtaService { ...@@ -66,7 +70,16 @@ class XtaService {
return false; 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 msg = remoteService.getMessage(metaData.getMessageId());
var incomingFiles = xtaIncomingFilesMapper.toIncomingFiles(msg.getMessageFiles()); var incomingFiles = xtaIncomingFilesMapper.toIncomingFiles(msg.getMessageFiles());
var representationsAttachmentsPair = getRepresentationsAttachmentsPair(metaData, incomingFiles); var representationsAttachmentsPair = getRepresentationsAttachmentsPair(metaData, incomingFiles);
......
...@@ -6,6 +6,7 @@ import static org.mockito.ArgumentMatchers.*; ...@@ -6,6 +6,7 @@ import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
...@@ -49,12 +50,21 @@ class XtaServiceTest { ...@@ -49,12 +50,21 @@ class XtaServiceTest {
@Mock @Mock
private XtaCurrentIdentifierService currentIdentifierService; private XtaCurrentIdentifierService currentIdentifierService;
@Mock
private FormData formData;
@Mock
private FormData formData2;
@Nested @Nested
class TestGetMessagesAsFormData { class TestGetMessagesAsFormData {
private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create(); private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
private final XtaMessage message = XtaMessageTestFactory.create(); private final XtaMessage message = XtaMessageTestFactory.create();
@DisplayName("with one message")
@Nested
class TestWithOneMessage {
@BeforeEach @BeforeEach
void setup() { void setup() {
doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream(); doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream();
...@@ -77,7 +87,7 @@ class XtaServiceTest { ...@@ -77,7 +87,7 @@ class XtaServiceTest {
} }
@Test @Test
void shouldCallGetFormData() { void shouldCallGetFormDataIfNoRuntimeException() {
setupMocks(); setupMocks();
doReturn(true).when(service).isSupportedMessageType(messageMetaData); doReturn(true).when(service).isSupportedMessageType(messageMetaData);
...@@ -87,14 +97,46 @@ class XtaServiceTest { ...@@ -87,14 +97,46 @@ class XtaServiceTest {
} }
@Test @Test
void shouldNotCallGetFormData() { void shouldNotCallGetFormDataIfNoRuntimeException() {
doReturn(false).when(service).isSupportedMessageType(messageMetaData); doReturn(false).when(service).isSupportedMessageType(messageMetaData);
service.getMessages().toList(); service.getMessages().toList();
verify(service, never()).getFormData(any()); verify(service, never()).getFormDataIfNoRuntimeException(any());
}
}
@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();
} }
@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);
var result = service.getMessages().toList();
assertThat(result).containsExactly(formData, formData2);
}
}
private void setupMocks() { private void setupMocks() {
var testFormData = FormDataTestFactory.create(); var testFormData = FormDataTestFactory.create();
when(mapper.toFormData(any(), any(), eq(vorgangNummerSupplier))).thenReturn(testFormData); when(mapper.toFormData(any(), any(), eq(vorgangNummerSupplier))).thenReturn(testFormData);
...@@ -129,6 +171,53 @@ class XtaServiceTest { ...@@ -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 @Nested
class TestGetFormData { class TestGetFormData {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment