From 37193e3b73b30daa59db18969dbd4cbdbff9769e Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Thu, 6 Apr 2023 15:51:05 +0200 Subject: [PATCH] OZG-3665 send data to semantik adapter --- xta-adapter/pom.xml | 4 ++ .../eingang/xta/XtaMessageMapper.java | 6 +- .../eingang/xta/FormDataTestFactory.java | 11 +--- .../eingang/xta/FormHeaderTestFactory.java | 20 +++++++ .../eingang/xta/XtaMessageMapperTest.java | 10 ++++ .../de/ozgcloud/eingang/xta/XtaScheduler.java | 38 ++++++++++++ .../eingang/xta/XtaSchedulerTest.java | 58 +++++++++++++++++++ 7 files changed, 136 insertions(+), 11 deletions(-) create mode 100644 xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java create mode 100644 xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaScheduler.java create mode 100644 xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaSchedulerTest.java diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml index ee4f7d158..7cfe37b6a 100644 --- a/xta-adapter/pom.xml +++ b/xta-adapter/pom.xml @@ -24,6 +24,10 @@ <groupId>de.itvsh.kop.eingangsadapter</groupId> <artifactId>common</artifactId> </dependency> + <dependency> + <groupId>de.itvsh.kop.eingangsadapter</groupId> + <artifactId>semantik-adapter</artifactId> + </dependency> <!--mapstruct--> <dependency> <groupId>org.mapstruct</groupId> diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java index d8852bd69..6904d6f9e 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java @@ -32,7 +32,7 @@ interface XtaMessageMapper { @Mapping(target = "formEngineName", ignore = true) @Mapping(target = "formId", source = "messageType") - @Mapping(target = "requestId", ignore = true) + @Mapping(target = "requestId", source = "messageId") @Mapping(target = "serviceKonto", ignore = true) @Mapping(target = "createdAt", source = "origin") @Mapping(target = "sender", constant = "XTA") @@ -58,4 +58,8 @@ interface XtaMessageMapper { throw new TechnicalException("Error opening xta message file."); } } + + default String fromId(XtaMessageId id) { + return id.toString(); + } } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java index 479cbcc9d..d04f7e5d6 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java @@ -1,7 +1,6 @@ package de.ozgcloud.eingang.xta; import de.itvsh.kop.eingangsadapter.common.formdata.FormData; -import de.itvsh.kop.eingangsadapter.common.formdata.FormHeader; class FormDataTestFactory { @@ -11,15 +10,7 @@ class FormDataTestFactory { static FormData.FormDataBuilder createBuilder() { return FormData.builder() - .header(createHeader()); + .header(FormHeaderTestFactory.create()); } - static FormHeader createHeader() { - return FormHeader.builder() - .sender("XTA") - .formName(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) - .formId(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) - .createdAt(XtaMessageMetaDataTestFactory.ORIGIN) - .build(); - } } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java new file mode 100644 index 000000000..5e41248ab --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormHeaderTestFactory.java @@ -0,0 +1,20 @@ +package de.ozgcloud.eingang.xta; + +import de.itvsh.kop.eingangsadapter.common.formdata.FormHeader; +import de.itvsh.kop.eingangsadapter.common.formdata.FormHeader.FormHeaderBuilder; + +public class FormHeaderTestFactory { + + static FormHeader create() { + return createBuilder().build(); + } + + static FormHeaderBuilder createBuilder() { + return FormHeader.builder() + .sender("XTA") + .requestId(XtaMessageTestFactory.MESSAGE_ID.toString()) + .formName(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) + .formId(XtaMessageMetaDataTestFactory.MESSAGE_TYPE) + .createdAt(XtaMessageMetaDataTestFactory.ORIGIN); + } +} diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java index 0fb7ddb90..cfcb0bfc3 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java @@ -42,6 +42,16 @@ class XtaMessageMapperTest { verify(mapper).toIncomingFile(message.getMessageFile()); } + @Nested + class ToFormHeader { + @Test + void shouldMapToFormHeader() { + var mapped = mapper.formHeaderFromMetaData(XtaMessageMetaDataTestFactory.create()); + + assertThat(mapped).usingRecursiveComparison().isEqualTo(FormHeaderTestFactory.create()); + } + } + @Nested class ToIncomingFile { @Test diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaScheduler.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaScheduler.java new file mode 100644 index 000000000..fcd1ebf3f --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaScheduler.java @@ -0,0 +1,38 @@ +package de.ozgcloud.eingang.xta; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Profile; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import de.itvsh.kop.eingangsadapter.common.formdata.FormData; +import de.itvsh.kop.eingangsadapter.semantik.SemantikAdapter; +import lombok.NonNull; +import lombok.extern.log4j.Log4j2; + +@Log4j2 +@Component +@Profile("!itcase") +@ConditionalOnProperty(havingValue = "ozgcloud.xta.scheduler.enabled") +class XtaScheduler { + + @Autowired + private XtaService service; + @Autowired + private SemantikAdapter semantikAdapter; + + @Scheduled(initialDelayString = "${ozgcloud.xta.scheduler.initialDelay:5000}", fixedDelayString = "${ozgcloud.xta.scheduler.fixedDelay:900000") + void runGetXtaMessages() { + service.getMessagesAsFormData().forEach(this::processAndAcknowledge); + } + + private void processAndAcknowledge(@NonNull FormData formData) { + try { + semantikAdapter.processFormData(formData); + service.acknowledgeReceive(XtaMessageId.from(formData.getHeader().getRequestId())); + } catch (RuntimeException e) { + LOG.error("Error on processing XTA-Message. Continue with next message.", e); + } + } +} diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaSchedulerTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaSchedulerTest.java new file mode 100644 index 000000000..506f129c3 --- /dev/null +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaSchedulerTest.java @@ -0,0 +1,58 @@ +package de.ozgcloud.eingang.xta; + +import static org.mockito.Mockito.*; + +import java.util.stream.Stream; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.itvsh.kop.eingangsadapter.common.formdata.FormData; +import de.itvsh.kop.eingangsadapter.semantik.SemantikAdapter; + +class XtaSchedulerTest { + + @InjectMocks + private XtaScheduler scheduler; + + @Mock + private XtaService service; + @Mock + private SemantikAdapter semantikAdapter; + + @Nested + class TestRunGetXtaMessages { + + private FormData formData = FormDataTestFactory.create(); + + @BeforeEach + void init() { + when(service.getMessagesAsFormData()).thenReturn(Stream.of(formData)); + } + + @Test + void shouldCallXtaService() { + scheduler.runGetXtaMessages(); + + verify(service).getMessagesAsFormData(); + } + + @Test + void shouldHandOverFormDataToSemantikAdapter() { + scheduler.runGetXtaMessages(); + + verify(semantikAdapter).processFormData(formData); + } + + @Test + void shouldAcknowledgeReceive() { + scheduler.runGetXtaMessages(); + + verify(service).acknowledgeReceive(XtaMessageTestFactory.MESSAGE_ID); + } + } + +} -- GitLab