diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileHelper.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileHelper.java similarity index 87% rename from archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileHelper.java rename to archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileHelper.java index ecc95214cbcc2e8a621cd559d1941a23f324adcf..1957b3c905eb41277079be3184be7e102239eb15 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileHelper.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileHelper.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import org.springframework.stereotype.Component; diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileType.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileType.java similarity index 86% rename from archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileType.java rename to archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileType.java index 37b0a450aa2d2b21d369176c88485f0adbbf6eb7..ae63bc7117b27927d599b422339c3351eaf15e84 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileType.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileType.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import lombok.AllArgsConstructor; import lombok.Getter; diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileXmlUtils.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java similarity index 98% rename from archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileXmlUtils.java rename to archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java index fc2d66aa4f843e7e363c44d2069f7a3aaba913be..0b158ac03a4442bca4e56240bf84f6500606b026 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaFileXmlUtils.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import java.io.IOException; diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaImportConfirmationHandler.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandler.java similarity index 96% rename from archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaImportConfirmationHandler.java rename to archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandler.java index aa45e769e445005b11119e129f6102eaaf90fd0e..425a7570fcbea29f267521cce3b92c2423f097d4 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaImportConfirmationHandler.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandler.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaMessageScheduler.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaMessageScheduler.java similarity index 93% rename from archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaMessageScheduler.java rename to archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaMessageScheduler.java index 2b02f66bfaa370e536adb647077ea663a58c1481..d9ecc15b65c88b78f2337061aac9d4f7cc1be93f 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaMessageScheduler.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaMessageScheduler.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import jakarta.annotation.PostConstruct; diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaService.java index 9aac41082bcaaa23dbb2b1acbadaf85411791ef5..cd81d8529d2fbcbcf34ba702b68d35d86508090c 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaService.java @@ -1,9 +1,19 @@ package de.ozgcloud.archive.common.xta; +import java.util.List; import java.util.Optional; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; +import de.ozgcloud.archive.common.command.ArchiveManagerCommand; +import de.ozgcloud.archive.common.command.CommandOrder; +import de.ozgcloud.archive.common.command.CommandService; +import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; +import de.ozgcloud.command.Command; +import de.ozgcloud.command.CommandExecutedEvent; +import de.ozgcloud.command.CommandFailedEvent; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.xta.client.XtaClient; import de.ozgcloud.xta.client.exception.XtaClientException; @@ -11,13 +21,20 @@ import de.ozgcloud.xta.client.model.XtaFile; import de.ozgcloud.xta.client.model.XtaMessage; import de.ozgcloud.xta.client.xdomea.XdomeaXtaMessageCreator; import lombok.RequiredArgsConstructor; +import lombok.extern.log4j.Log4j2; +@Log4j2 @RequiredArgsConstructor @Service public class XtaService { private static final String XTA_CLIENT_IS_NOT_CONFIGURED_MESSAGE = "XtaClient is not configured! Cannot send message to DMS."; private final Optional<XtaClient> xtaClient; + private final XtaFileHelper xtaFileHelper; + + private final CommandService commandService; + + private final ApplicationEventPublisher eventPublisher; public void sendXdomeaFile(XtaFile xdomeaFile) { try { @@ -38,4 +55,56 @@ public class XtaService { XtaClient getXtaClient() { return xtaClient.orElseThrow(() -> new TechnicalException(XTA_CLIENT_IS_NOT_CONFIGURED_MESSAGE)); } + + public void fetchMessages() { + try { + getXtaClient().fetchMessages(this::consumeMessage); + } catch (XtaClientException e) { + throw new TechnicalException("Error fetching xta messages.", e); + } + } + + void consumeMessage(XtaMessage message) { + if (isImportConfirmation(message.messageFile())) { + xtaFileHelper.initImportConfirmationHandler(message.messageFile()).getAbgaben().forEach(this::handleAbgabe); + } + } + + boolean isImportConfirmation(XtaFile xtaFile) { + return XtaFileXmlUtils.isType(xtaFile, XtaFileType.IMPORT_CONFIRMATION); + } + + void handleAbgabe(XtaAbgabeHandler abgabeHandler) { + var vorgangId = abgabeHandler.getVorgangId(); + var pendingCommands = findPendingArchiveVorgangCommands(vorgangId); + + if (CollectionUtils.isNotEmpty(pendingCommands)) { + evaluateAbgabe(abgabeHandler, pendingCommands); + } else { + LOG.warn("No pending archive command found for vorgang: %s.", vorgangId); + } + } + + private List<ArchiveManagerCommand> findPendingArchiveVorgangCommands(String vorgangId) { + return commandService.findPending(vorgangId, CommandOrder.ARCHIVE_VORGANG).toList(); + } + + void evaluateAbgabe(XtaAbgabeHandler abgabeHandler, List<ArchiveManagerCommand> pendingCommands) { + if (pendingCommands.size() > 1) { + LOG.warn("Multiple pending commands found for vorgang: %s.", abgabeHandler.getVorgangId()); + } + if (abgabeHandler.isSuccessfullyDone()) { + pendingCommands.forEach(this::publishCommandExecutedEvent); + } else { + pendingCommands.forEach(command -> publishCommandFailedEvent(abgabeHandler, command)); + } + } + + void publishCommandExecutedEvent(Command pendingCommand) { + eventPublisher.publishEvent(new CommandExecutedEvent(pendingCommand)); + } + + void publishCommandFailedEvent(XtaAbgabeHandler contentHandler, Command pendingCommand) { + eventPublisher.publishEvent(new CommandFailedEvent(pendingCommand.getId(), contentHandler.getFehlermeldung())); + } } diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaService.java deleted file mode 100644 index 59cf635ac808bd3557ba865b923f891148807e20..0000000000000000000000000000000000000000 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/xta/XtaService.java +++ /dev/null @@ -1,87 +0,0 @@ -package de.ozgcloud.archive.xta; - -import java.util.List; - -import org.apache.commons.collections.CollectionUtils; -import org.springframework.context.ApplicationEventPublisher; -import org.springframework.stereotype.Service; - -import de.ozgcloud.archive.common.command.ArchiveManagerCommand; -import de.ozgcloud.archive.common.command.CommandOrder; -import de.ozgcloud.archive.common.command.CommandService; -import de.ozgcloud.archive.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; -import de.ozgcloud.command.Command; -import de.ozgcloud.command.CommandExecutedEvent; -import de.ozgcloud.command.CommandFailedEvent; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.xta.client.XtaClient; -import de.ozgcloud.xta.client.exception.XtaClientException; -import de.ozgcloud.xta.client.model.XtaFile; -import de.ozgcloud.xta.client.model.XtaMessage; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; - -@Log4j2 -@RequiredArgsConstructor -@Service -class XtaService { - - private final XtaClient client; - private final XtaFileHelper xtaFileHelper; - - private final CommandService commandService; - - private final ApplicationEventPublisher eventPublisher; - - public void fetchMessages() { - try { - client.fetchMessages(this::consumeMessage); - } catch (XtaClientException e) { - throw new TechnicalException("Error fetching xta messages.", e); - } - } - - void consumeMessage(XtaMessage message) { - if (isImportConfirmation(message.messageFile())) { - xtaFileHelper.initImportConfirmationHandler(message.messageFile()).getAbgaben().forEach(this::handleAbgabe); - } - } - - boolean isImportConfirmation(XtaFile xtaFile) { - return XtaFileXmlUtils.isType(xtaFile, XtaFileType.IMPORT_CONFIRMATION); - } - - void handleAbgabe(XtaAbgabeHandler abgabeHandler) { - var vorgangId = abgabeHandler.getVorgangId(); - var pendingCommands = findPendingArchiveVorgangCommands(vorgangId); - - if (CollectionUtils.isNotEmpty(pendingCommands)) { - evaluateAbgabe(abgabeHandler, pendingCommands); - } else { - LOG.warn("No pending archive command found for vorgang: %s.", vorgangId); - } - } - - private List<ArchiveManagerCommand> findPendingArchiveVorgangCommands(String vorgangId) { - return commandService.findPending(vorgangId, CommandOrder.ARCHIVE_VORGANG).toList(); - } - - void evaluateAbgabe(XtaAbgabeHandler abgabeHandler, List<ArchiveManagerCommand> pendingCommands) { - if (pendingCommands.size() > 1) { - LOG.warn("Multiple pending commands found for vorgang: %s.", abgabeHandler.getVorgangId()); - } - if (abgabeHandler.isSuccessfullyDone()) { - pendingCommands.forEach(this::publishCommandExecutedEvent); - } else { - pendingCommands.forEach(command -> publishCommandFailedEvent(abgabeHandler, command)); - } - } - - void publishCommandExecutedEvent(Command pendingCommand) { - eventPublisher.publishEvent(new CommandExecutedEvent(pendingCommand)); - } - - void publishCommandFailedEvent(XtaAbgabeHandler contentHandler, Command pendingCommand) { - eventPublisher.publishEvent(new CommandFailedEvent(pendingCommand.getId(), contentHandler.getFehlermeldung())); - } -} \ No newline at end of file diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/AbgabeImportBestaetigen0402TestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/AbgabeImportBestaetigen0402TestFactory.java similarity index 90% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/xta/AbgabeImportBestaetigen0402TestFactory.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/AbgabeImportBestaetigen0402TestFactory.java index 702fe6a830576279618bec3909ea57bea92176e1..de3c8ca0a071d6d3d0bb40f244659142c966fad2 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/AbgabeImportBestaetigen0402TestFactory.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/AbgabeImportBestaetigen0402TestFactory.java @@ -1,7 +1,8 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import org.w3c.dom.Document; +import de.ozgcloud.archive.common.xta.XtaFileXmlUtils; import de.xoev.xdomea.AbgabeImportBestaetigen0402; import lombok.SneakyThrows; diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileHelperTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileHelperTest.java similarity index 80% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileHelperTest.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileHelperTest.java index 453c1ef762bf069d5cc938a32b7f736db8a9eb3b..f3da5de675cf7db596bca119fe626dba60c24324 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileHelperTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileHelperTest.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import static org.assertj.core.api.Assertions.*; @@ -7,6 +7,9 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; +import de.ozgcloud.archive.common.xta.XtaFileHelper; +import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler; + class XtaFileHelperTest { @InjectMocks diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileTestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileTestFactory.java similarity index 95% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileTestFactory.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileTestFactory.java index 50f2e803d115b533b1243390ada269c4644bc36c..3f5bea53c7bceafa4d6994e428279f5b4b000d50 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileTestFactory.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileTestFactory.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import jakarta.activation.DataHandler; import jakarta.activation.FileDataSource; diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileXmlUtilsTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java similarity index 91% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileXmlUtilsTest.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java index 36230245fdf81643aa515654d64be3ef083db91a..e9cc6576f0eb92e31ca8b80dd14670716edad865 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaFileXmlUtilsTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -11,6 +11,8 @@ import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; import org.mockito.Mockito; +import de.ozgcloud.archive.common.xta.XtaFileType; +import de.ozgcloud.archive.common.xta.XtaFileXmlUtils; import de.ozgcloud.common.errorhandling.TechnicalException; class XtaFileXmlUtilsTest { diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaImportConfirmationHandlerTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandlerTest.java similarity index 91% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaImportConfirmationHandlerTest.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandlerTest.java index ea4e20ffbe2cd753176d79fdf00b39f5e51a3614..66e462a2df1007d8091bcc4a22f9cfd250ae9e2c 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaImportConfirmationHandlerTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandlerTest.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -11,7 +11,9 @@ import org.junit.jupiter.api.Test; import org.mockito.MockedStatic; import org.mockito.Mockito; -import de.ozgcloud.archive.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; +import de.ozgcloud.archive.common.xta.XtaFileXmlUtils; +import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler; +import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; import de.ozgcloud.xta.client.model.XtaFile; import de.xoev.xdomea.AbgabeImportBestaetigen0402; diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaMessageSchedulerTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaMessageSchedulerTest.java similarity index 79% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaMessageSchedulerTest.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaMessageSchedulerTest.java index 003441c4101272b2b2d7dafbf79ab28c0dc15088..f8c91f14a71d6e7e2d1d296ebcbb664fe00d8940 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaMessageSchedulerTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaMessageSchedulerTest.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import static org.mockito.Mockito.*; @@ -8,6 +8,9 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.archive.common.xta.XtaMessageScheduler; +import de.ozgcloud.archive.common.xta.XtaService; + class XtaMessageSchedulerTest { @Spy diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaMessageTestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaMessageTestFactory.java similarity index 91% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaMessageTestFactory.java rename to archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaMessageTestFactory.java index f81e067fd33128dcc9abf4835ae01d9e068c6bc6..2ab40253ff8a3ab8f8b4a36f979e4e07e29fb188 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaMessageTestFactory.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaMessageTestFactory.java @@ -1,4 +1,4 @@ -package de.ozgcloud.archive.xta; +package de.ozgcloud.archive.common.xta; import de.ozgcloud.xta.client.model.XtaFile; import de.ozgcloud.xta.client.model.XtaMessage; diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaServiceTest.java index 536adb305f6e1acdac5731ff29f1c78eca0fec9a..52c803ae7dcdef08876e1942e6614845fb4ab768 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaServiceTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaServiceTest.java @@ -5,18 +5,32 @@ import static org.junit.jupiter.api.Assertions.*; 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.AfterEach; 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.mockito.ArgumentCaptor; +import org.mockito.Captor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.Spy; - +import org.springframework.context.ApplicationEventPublisher; + +import de.ozgcloud.archive.common.command.ArchiveManagerCommand; +import de.ozgcloud.archive.common.command.CommandOrder; +import de.ozgcloud.archive.common.command.CommandService; +import de.ozgcloud.archive.common.command.CommandTestFactory; +import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; +import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; import de.ozgcloud.archive.vorgang.XdomeaXtaFileTestFactory; +import de.ozgcloud.command.CommandExecutedEvent; +import de.ozgcloud.command.CommandFailedEvent; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.xta.client.XtaClient; import de.ozgcloud.xta.client.exception.XtaClientException; @@ -34,6 +48,13 @@ class XtaServiceTest { @Mock private XtaClient xtaClient; + @Mock + private CommandService commandService; + @Mock + private ApplicationEventPublisher eventPublisher; + @Mock + private XtaFileHelper xtaFileHelper; + @Nested class TestSendXdomeaFile { @@ -148,12 +169,21 @@ class XtaServiceTest { private XtaService xtaService; + @Mock + private XtaFileHelper xtaFileHelper; + + @Mock + private CommandService commandService; + + @Mock + private ApplicationEventPublisher eventPublisher; + @Nested class TestOnConfiguredXtaClient { @BeforeEach void givenXtaClientConfigured() { - xtaService = spy(new XtaService(Optional.of(xtaClient))); + xtaService = spy(new XtaService(Optional.of(xtaClient), xtaFileHelper, commandService, eventPublisher)); } @Test @@ -170,7 +200,7 @@ class XtaServiceTest { @BeforeEach void givenXtaClientNotConfigured() { - xtaService = spy(new XtaService(Optional.empty())); + xtaService = spy(new XtaService(Optional.empty(), xtaFileHelper, commandService, eventPublisher)); } @Test @@ -183,4 +213,224 @@ class XtaServiceTest { return xtaService.getXtaClient(); } } + + @DisplayName("Fetch messages") + @Nested + class TestFetchMessages { + + @BeforeEach + void mock() { + doReturn(xtaClient).when(service).getXtaClient(); + } + + @SneakyThrows + @Test + void shouldCallClient() { + service.fetchMessages(); + + verify(xtaClient).fetchMessages(any()); + } + + @SneakyThrows + @Test + void shouldThrowException() { + when(xtaClient.fetchMessages(any())).thenThrow(new XtaClientException("error-message")); + + assertThatThrownBy(() -> service.fetchMessages()).isInstanceOf(TechnicalException.class); + } + } + + @DisplayName("Consume message") + @Nested + class TestConsumeMessage { + + @Mock + private XtaImportConfirmationHandler xtaFileContentHandler; + + private final XtaMessage xtaMessage = XtaMessageTestFactory.create(); + + @Test + void shouldCallIsImportConfirmation() { + service.consumeMessage(xtaMessage); + + verify(service).isImportConfirmation(XtaMessageTestFactory.MESSAGE_FILE); + } + + @DisplayName("on import confirmation") + @Nested + class TestOnImportConfirmation { + + @Mock + private XtaAbgabeHandler abgabeHandler; + + @BeforeEach + void mock() { + doReturn(true).when(service).isImportConfirmation(any()); + when(xtaFileHelper.initImportConfirmationHandler(any())).thenReturn(xtaFileContentHandler); + when(xtaFileContentHandler.getAbgaben()).thenReturn(Stream.of(abgabeHandler, abgabeHandler)); + doNothing().when(service).handleAbgabe(any()); + } + + @Test + void shouldInitContentHandler() { + service.consumeMessage(xtaMessage); + + verify(xtaFileHelper).initImportConfirmationHandler(XtaMessageTestFactory.MESSAGE_FILE); + } + + @DisplayName("should handle import confirmation if type from document is matching") + @Test + void shouldCallHandleAbgabe() { + service.consumeMessage(xtaMessage); + + verify(service, times(2)).handleAbgabe(abgabeHandler); + } + } + + @DisplayName("should not handle message if its not an import confirmation") + @Test + void shouldNotProceed() { + doReturn(false).when(service).isImportConfirmation(any()); + + service.consumeMessage(xtaMessage); + + verify(service, never()).handleAbgabe(any()); + verify(xtaFileHelper, never()).initImportConfirmationHandler(any()); + } + } + + @DisplayName("Handle abgabe") + @Nested + class TestHandleAbgabe { + + @Mock + private XtaAbgabeHandler abgabeHandler; + + @BeforeEach + void mock() { + when(abgabeHandler.getVorgangId()).thenReturn(VorgangWithEingangTestFactory.ID); + when(commandService.findPending(any(), any())).thenReturn(Stream.empty()); + } + + @Test + void shouldGetVorgangId() { + handleImportConfirmation(); + + verify(abgabeHandler).getVorgangId(); + } + + @Test + void shouldCallCommandService() { + handleImportConfirmation(); + + verify(commandService).findPending(VorgangWithEingangTestFactory.ID, CommandOrder.ARCHIVE_VORGANG); + } + + @DisplayName("on existing pending commands") + @Nested + class TestOnExistingPendingCommands { + + private final ArchiveManagerCommand command = CommandTestFactory.create(); + private final List<ArchiveManagerCommand> commands = List.of(command); + + @BeforeEach + void mock() { + when(commandService.findPending(any(), any())).thenReturn(commands.stream()); + doNothing().when(service).evaluateAbgabe(any(), any()); + } + + @Test + void shouldCallEvaluateConfirmation() { + handleImportConfirmation(); + + verify(service).evaluateAbgabe(abgabeHandler, commands); + } + } + + @Test + void shouldNotCallEvaluateImportConfirmationOnEmptyList() { + handleImportConfirmation(); + + verify(service, never()).evaluateAbgabe(any(), any()); + } + + private void handleImportConfirmation() { + service.handleAbgabe(abgabeHandler); + } + } + + @DisplayName("Evaluate abgabe") + @Nested + class TestEvaluateConfirmation { + + @Mock + private XtaAbgabeHandler abgabeHandler; + + private final ArchiveManagerCommand command = CommandTestFactory.create(); + private final List<ArchiveManagerCommand> commands = List.of(command, command); + + @Test + void shouldCallIsSuccessfullyDone() { + service.evaluateAbgabe(abgabeHandler, commands); + + verify(abgabeHandler).isSuccessfullyDone(); + } + + @Test + void shouldCallPublishCommendExcecutedEvent() { + when(abgabeHandler.isSuccessfullyDone()).thenReturn(true); + + service.evaluateAbgabe(abgabeHandler, commands); + + verify(service, times(2)).publishCommandExecutedEvent(command); + } + + @Test + void shouldCallPublishCommandFailedEvent() { + when(abgabeHandler.isSuccessfullyDone()).thenReturn(false); + + service.evaluateAbgabe(abgabeHandler, commands); + + verify(service, times(2)).publishCommandFailedEvent(abgabeHandler, command); + } + + @DisplayName("on successfully done import confirmation") + @Nested + class TestPublishCommandExcutedEvent { + + @Captor + private ArgumentCaptor<CommandExecutedEvent> commandExecutedEventCaptor; + + @DisplayName("should publish command executed event") + @Test + void shouldPublishCommandExecutedEvent() { + service.publishCommandExecutedEvent(command); + + verify(eventPublisher).publishEvent(commandExecutedEventCaptor.capture()); + assertThat(commandExecutedEventCaptor.getValue().getCommand()).isEqualTo(command); + } + } + + @DisplayName("on failed import confirmation") + @Nested + class TestPublishCommandFailedEvent { + + @Captor + private ArgumentCaptor<CommandFailedEvent> commandFailedEventCaptor; + + private final ArchiveManagerCommand command = CommandTestFactory.create(); + + @DisplayName("should publish command failed event") + @Test + void shouldPublishCommandFailedEvent() { + when(abgabeHandler.getFehlermeldung()).thenReturn(AbgabeImportBestaetigen0402TestFactory.FEHLERMELDUNG); + + service.publishCommandFailedEvent(abgabeHandler, command); + + verify(eventPublisher).publishEvent(commandFailedEventCaptor.capture()); + assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(CommandTestFactory.ID); + assertThat(commandFailedEventCaptor.getValue().getErrorMessage()).isEqualTo(AbgabeImportBestaetigen0402TestFactory.FEHLERMELDUNG); + } + } + } } diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaServiceTest.java deleted file mode 100644 index eca8e2904fa8840c4f730e55c21e0c72883026e0..0000000000000000000000000000000000000000 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/xta/XtaServiceTest.java +++ /dev/null @@ -1,263 +0,0 @@ -package de.ozgcloud.archive.xta; - -import static org.assertj.core.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.*; - -import java.util.List; -import java.util.stream.Stream; - -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.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; -import org.springframework.context.ApplicationEventPublisher; - -import de.ozgcloud.archive.common.command.ArchiveManagerCommand; -import de.ozgcloud.archive.common.command.CommandOrder; -import de.ozgcloud.archive.common.command.CommandService; -import de.ozgcloud.archive.common.command.CommandTestFactory; -import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; -import de.ozgcloud.archive.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; -import de.ozgcloud.command.CommandExecutedEvent; -import de.ozgcloud.command.CommandFailedEvent; -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.xta.client.XtaClient; -import de.ozgcloud.xta.client.exception.XtaClientException; -import de.ozgcloud.xta.client.model.XtaMessage; -import lombok.SneakyThrows; - -class XtaServiceTest { - - @Spy - @InjectMocks - private XtaService service; - @Mock - private XtaClient client; - @Mock - private CommandService commandService; - @Mock - private ApplicationEventPublisher eventPublisher; - @Mock - private XtaFileHelper xtaFileHelper; - - @DisplayName("Fetch messages") - @Nested - class TestFetchMessages { - - @SneakyThrows - @Test - void shouldCallClient() { - service.fetchMessages(); - - verify(client).fetchMessages(any()); - } - - @SneakyThrows - @Test - void shouldThrowException() { - when(client.fetchMessages(any())).thenThrow(new XtaClientException("error-message")); - - assertThatThrownBy(() -> service.fetchMessages()).isInstanceOf(TechnicalException.class); - } - } - - @DisplayName("Consume message") - @Nested - class TestConsumeMessage { - - @Mock - private XtaImportConfirmationHandler xtaFileContentHandler; - - private final XtaMessage xtaMessage = XtaMessageTestFactory.create(); - - @Test - void shouldCallIsImportConfirmation() { - service.consumeMessage(xtaMessage); - - verify(service).isImportConfirmation(XtaMessageTestFactory.MESSAGE_FILE); - } - - @DisplayName("on import confirmation") - @Nested - class TestOnImportConfirmation { - - @Mock - private XtaAbgabeHandler abgabeHandler; - - @BeforeEach - void mock() { - doReturn(true).when(service).isImportConfirmation(any()); - when(xtaFileHelper.initImportConfirmationHandler(any())).thenReturn(xtaFileContentHandler); - when(xtaFileContentHandler.getAbgaben()).thenReturn(Stream.of(abgabeHandler, abgabeHandler)); - doNothing().when(service).handleAbgabe(any()); - } - - @Test - void shouldInitContentHandler() { - service.consumeMessage(xtaMessage); - - verify(xtaFileHelper).initImportConfirmationHandler(XtaMessageTestFactory.MESSAGE_FILE); - } - - @DisplayName("should handle import confirmation if type from document is matching") - @Test - void shouldCallHandleAbgabe() { - service.consumeMessage(xtaMessage); - - verify(service, times(2)).handleAbgabe(abgabeHandler); - } - } - - @DisplayName("should not handle message if its not an import confirmation") - @Test - void shouldNotProceed() { - doReturn(false).when(service).isImportConfirmation(any()); - - service.consumeMessage(xtaMessage); - - verify(service, never()).handleAbgabe(any()); - verify(xtaFileHelper, never()).initImportConfirmationHandler(any()); - } - } - - @DisplayName("Handle abgabe") - @Nested - class TestHandleAbgabe { - - @Mock - private XtaAbgabeHandler abgabeHandler; - - @BeforeEach - void mock() { - when(abgabeHandler.getVorgangId()).thenReturn(VorgangWithEingangTestFactory.ID); - when(commandService.findPending(any(), any())).thenReturn(Stream.empty()); - } - - @Test - void shouldGetVorgangId() { - handleImportConfirmation(); - - verify(abgabeHandler).getVorgangId(); - } - - @Test - void shouldCallCommandService() { - handleImportConfirmation(); - - verify(commandService).findPending(VorgangWithEingangTestFactory.ID, CommandOrder.ARCHIVE_VORGANG); - } - - @DisplayName("on existing pending commands") - @Nested - class TestOnExistingPendingCommands { - - private final ArchiveManagerCommand command = CommandTestFactory.create(); - private final List<ArchiveManagerCommand> commands = List.of(command); - - @BeforeEach - void mock() { - when(commandService.findPending(any(), any())).thenReturn(commands.stream()); - doNothing().when(service).evaluateAbgabe(any(), any()); - } - - @Test - void shouldCallEvaluateConfirmation() { - handleImportConfirmation(); - - verify(service).evaluateAbgabe(abgabeHandler, commands); - } - } - - @Test - void shouldNotCallEvaluateImportConfirmationOnEmptyList() { - handleImportConfirmation(); - - verify(service, never()).evaluateAbgabe(any(), any()); - } - - private void handleImportConfirmation() { - service.handleAbgabe(abgabeHandler); - } - } - - @DisplayName("Evaluate abgabe") - @Nested - class TestEvaluateConfirmation { - - @Mock - private XtaAbgabeHandler abgabeHandler; - - private final ArchiveManagerCommand command = CommandTestFactory.create(); - private final List<ArchiveManagerCommand> commands = List.of(command, command); - - @Test - void shouldCallIsSuccessfullyDone() { - service.evaluateAbgabe(abgabeHandler, commands); - - verify(abgabeHandler).isSuccessfullyDone(); - } - - @Test - void shouldCallPublishCommendExcecutedEvent() { - when(abgabeHandler.isSuccessfullyDone()).thenReturn(true); - - service.evaluateAbgabe(abgabeHandler, commands); - - verify(service, times(2)).publishCommandExecutedEvent(command); - } - - @Test - void shouldCallPublishCommandFailedEvent() { - when(abgabeHandler.isSuccessfullyDone()).thenReturn(false); - - service.evaluateAbgabe(abgabeHandler, commands); - - verify(service, times(2)).publishCommandFailedEvent(abgabeHandler, command); - } - - @DisplayName("on successfully done import confirmation") - @Nested - class TestPublishCommandExcutedEvent { - - @Captor - private ArgumentCaptor<CommandExecutedEvent> commandExecutedEventCaptor; - - @DisplayName("should publish command executed event") - @Test - void shouldPublishCommandExecutedEvent() { - service.publishCommandExecutedEvent(command); - - verify(eventPublisher).publishEvent(commandExecutedEventCaptor.capture()); - assertThat(commandExecutedEventCaptor.getValue().getCommand()).isEqualTo(command); - } - } - - @DisplayName("on failed import confirmation") - @Nested - class TestPublishCommandFailedEvent { - - @Captor - private ArgumentCaptor<CommandFailedEvent> commandFailedEventCaptor; - - private final ArchiveManagerCommand command = CommandTestFactory.create(); - - @DisplayName("should publish command failed event") - @Test - void shouldPublishCommandFailedEvent() { - when(abgabeHandler.getFehlermeldung()).thenReturn(AbgabeImportBestaetigen0402TestFactory.FEHLERMELDUNG); - - service.publishCommandFailedEvent(abgabeHandler, command); - - verify(eventPublisher).publishEvent(commandFailedEventCaptor.capture()); - assertThat(commandFailedEventCaptor.getValue().getSource()).isEqualTo(CommandTestFactory.ID); - assertThat(commandFailedEventCaptor.getValue().getErrorMessage()).isEqualTo(AbgabeImportBestaetigen0402TestFactory.FEHLERMELDUNG); - } - } - } -} \ No newline at end of file