diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java index c4e512132e17182bdee35b3d4e049f4de6a0c821..19e712d4c4eb812190086b906e3c91659dea5abc 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java @@ -1,5 +1,7 @@ package de.ozgcloud.eingang.xta; +import static java.util.Collections.*; + import java.util.List; import java.util.Spliterators; import java.util.stream.Stream; @@ -23,6 +25,8 @@ class XtaService { static final String XDOMEA_0201_MESSAGE_TYPE = "Geschaeftsgang.Geschaeftsgang.0201"; + static final String FIM_MESSAGE_TYPE_PREFIX = "fim."; + @Autowired private XtaRemoteService remoteService; @Autowired @@ -48,6 +52,10 @@ class XtaService { return true; } + if (StringUtils.startsWith(metaData.getMessageType(), FIM_MESSAGE_TYPE_PREFIX)) { + return true; + } + LOG.warn("Ignoring XTA-Message of type '{}'.", metaData.getMessageType()); return false; } @@ -63,9 +71,20 @@ class XtaService { if (StringUtils.equals(metaData.getMessageType(), XDOMEA_0201_MESSAGE_TYPE)) { return xdomeaMessageDataMapper.mapIncomingFilesToRepresentationsAttachmentsPair(incomingFiles); } + if (StringUtils.startsWith(metaData.getMessageType(), FIM_MESSAGE_TYPE_PREFIX)) { + return mapIncomingFilesToRepresentations(incomingFiles); + } + throw new TechnicalException("Unexpected XTA message type: %s".formatted(metaData.getMessageType())); } + RepresentationsAttachmentsPair mapIncomingFilesToRepresentations(List<IncomingFile> incomingFiles) { + return RepresentationsAttachmentsPair.builder() + .representations(incomingFiles) + .attachments(emptyList()) + .build(); + } + public void acknowledgeReceive(@NonNull XtaMessageId messageId) { remoteService.close(messageId); } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java index 6a5705a31bc4ea95c96227e291f3d4b3e814da45..43d08f9a67f8f0954290dc1b81d5f2a2b4c5d4b2 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java @@ -13,6 +13,7 @@ import java.util.Optional; 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.ArgumentCaptor; @@ -148,6 +149,28 @@ class XtaITCase { assertThat(vorgangNummer).hasSize(9); } + @DisplayName("should use xta vorgangsnummer for FIM") + @Test + void shouldUseVorgangsnummerForFIM() { + mockNachrichtenBroker("versammlungsanzeige.xml"); + + runner.runGetXtaMessages(); + + var vorgangNummer = captureEingang().getHeader().getVorgangNummer(); + assertThat(vorgangNummer).hasSize(9); + } + + @DisplayName("should have one attachment for FIM") + @Test + void shouldHaveOneRepresentationForFim() { + mockNachrichtenBroker("versammlungsanzeige.xml"); + + runner.runGetXtaMessages(); + + var eingang = captureEingang(); + assertThat(eingang.getNumberOfRepresentations()).isEqualTo(1); + } + private GrpcEingang captureEingang() { verify(vorgangRemoteService, times(1)) .createVorgang( @@ -158,7 +181,6 @@ class XtaITCase { assertThat(formDataArgumentCaptor.getValue()).isNotNull(); assertThat(eingangArgumentCaptor.getValue()).isNotNull(); - assertThat(organisationseinheitenIdArgumentCaptor.getValue()).isPresent(); return eingangArgumentCaptor.getValue(); } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java index d695eded2528aa7ee88c3bd90146874e86f716b5..d0e4d3c504fe095b16d7b7563be4644e9d14c2e4 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java @@ -1,5 +1,6 @@ package de.ozgcloud.eingang.xta; +import static de.ozgcloud.eingang.xta.XtaService.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -102,10 +103,19 @@ class XtaServiceTest { class TestIsSupportedMessageType { @Test - void shouldAcceptDFoerdermittel() { - var metaDataDFoerder = XtaMessageMetaDataTestFactory.create(); + void shouldAcceptGeschaeftsgang() { + var geschaeftsgangMetaData = XtaMessageMetaDataTestFactory.create(); - assertThat(service.isSupportedMessageType(metaDataDFoerder)).isTrue(); + assertThat(service.isSupportedMessageType(geschaeftsgangMetaData)).isTrue(); + } + + @Test + void shouldAcceptFIM() { + var fimMetaData = XtaMessageMetaDataTestFactory.createBuilder() + .messageType(FIM_MESSAGE_TYPE_PREFIX + "34355") + .build(); + + assertThat(service.isSupportedMessageType(fimMetaData)).isTrue(); } @Test @@ -205,6 +215,17 @@ class XtaServiceTest { assertThat(result).isEqualTo(classification); } + @DisplayName("should use correct mapping for FIM message") + @Test + void shouldUseCorrectMappingForFimMessage() { + when(messageMetaData.getMessageType()).thenReturn(FIM_MESSAGE_TYPE_PREFIX + "836487"); + doReturn(classification).when(service).mapIncomingFilesToRepresentations(incomingFiles); + + var result = service.getRepresentationsAttachmentsPair(messageMetaData, incomingFiles); + + assertThat(result).isEqualTo(classification); + } + @DisplayName("should throw exception for unexpected message type") @Test void shouldThrowExceptionForUnexpectedMessageType() { @@ -215,6 +236,34 @@ class XtaServiceTest { } } + @DisplayName("map incoming files to representations") + @Nested + class TestMapIncomingFilesToRepresentations { + + private List<IncomingFile> incomingFiles; + + @BeforeEach + void mock() { + incomingFiles = List.of(IncomingFileTestFactory.create(), IncomingFileTestFactory.create()); + + } + @DisplayName("should return representations with incoming files") + @Test + void shouldReturnRepresentationsWithIncomingFiles() { + var result = service.mapIncomingFilesToRepresentations(incomingFiles); + + assertThat(result.representations()).isEqualTo(incomingFiles); + } + + @DisplayName("should return attachments with empty list") + @Test + void shouldReturnAttachmentsWithEmptyList() { + var result = service.mapIncomingFilesToRepresentations(incomingFiles); + + assertThat(result.attachments()).isEmpty(); + } + } + @Nested class TestAcknowledgeReceive {