From 29be1d2330b87c1476ee6f80383a24859832b3f7 Mon Sep 17 00:00:00 2001 From: Felix Reichenbach <felix.reichenbach@mgm-tp.com> Date: Thu, 2 Jan 2025 10:30:29 +0100 Subject: [PATCH] OZG-7038 use file reader instead of static utils --- .../archive/common/xta/XtaFileHelper.java | 2 +- .../archive/common/xta/XtaFileReader.java | 7 +- .../archive/common/xta/XtaFileXmlUtils.java | 18 --- .../xta/XtaImportConfirmationHandler.java | 15 ++- .../archive/quittung/QuittungService.java | 10 +- .../archive/common/xta/XtaFileHelperTest.java | 3 - .../archive/common/xta/XtaFileReaderTest.java | 15 ++- .../common/xta/XtaFileXmlUtilsTest.java | 2 - .../xta/XtaImportConfirmationHandlerTest.java | 114 +++++++++++------- .../archive/quittung/QuittungServiceTest.java | 14 +-- 10 files changed, 109 insertions(+), 91 deletions(-) rename archive-manager-server/src/{test => main}/java/de/ozgcloud/archive/common/xta/XtaFileReader.java (76%) diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileHelper.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileHelper.java index d87b3af..2e4f493 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileHelper.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileHelper.java @@ -8,6 +8,6 @@ import de.ozgcloud.xta.client.model.XtaFile; public class XtaFileHelper { public XtaImportConfirmationHandler initImportConfirmationHandler(XtaFile file) { - return XtaImportConfirmationHandler.initFrom(file); + return XtaImportConfirmationHandler.createFrom(file); } } \ No newline at end of file diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileReader.java similarity index 76% rename from archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java rename to archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileReader.java index 770f225..87320fb 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileReader.java @@ -8,12 +8,17 @@ import jakarta.xml.bind.Unmarshaller; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.xta.client.model.XtaFile; +import de.xoev.xdomea.AbgabeImportBestaetigen0402; class XtaFileReader<T> { private final Unmarshaller unmarshaller; - XtaFileReader(Class<T> clazz) { + public static XtaFileReader<AbgabeImportBestaetigen0402> createAbgabeImportBestaetigen0402Reader() { + return new XtaFileReader<>(AbgabeImportBestaetigen0402.class); + } + + private XtaFileReader(Class<T> clazz) { try { unmarshaller = JAXBContext.newInstance(clazz).createUnmarshaller(); } catch (JAXBException e) { diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java index 8f446a0..b1fa014 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java @@ -6,14 +6,9 @@ import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; -import jakarta.xml.bind.JAXBContext; -import jakarta.xml.bind.JAXBException; -import jakarta.xml.bind.Unmarshaller; - import org.w3c.dom.Document; import org.xml.sax.SAXException; -import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.xta.client.model.XtaFile; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -46,17 +41,4 @@ public class XtaFileXmlUtils { private static DocumentBuilder createDocumentBuilder() throws ParserConfigurationException { return DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder(); } - - public static <T> T read(XtaFile xtaFile, Class<T> clazz) { - try { - return XtaFileXmlUtils.unmarshalContent(xtaFile, JAXBContext.newInstance(clazz).createUnmarshaller()); - } catch (Exception e) { - throw new TechnicalException("Error reading xta file content", e); - } - } - - @SuppressWarnings("unchecked") - private static <T> T unmarshalContent(XtaFile xtaFile, Unmarshaller jaxbUnmarshaller) throws JAXBException, IOException { - return (T) jaxbUnmarshaller.unmarshal(xtaFile.content().getInputStream()); - } } \ No newline at end of file diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandler.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandler.java index d286cbb..e3c3476 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandler.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandler.java @@ -6,28 +6,27 @@ import java.util.stream.Stream; import de.ozgcloud.xta.client.model.XtaFile; import de.xoev.xdomea.AbgabeImportBestaetigen0402; import de.xoev.xdomea.ErfolgOderMisserfolgAbgabeType; -import lombok.Getter; import lombok.RequiredArgsConstructor; public class XtaImportConfirmationHandler { - @Getter private final AbgabeImportBestaetigen0402 importConfirmation; - public static XtaImportConfirmationHandler initFrom(XtaFile file) { + public static XtaImportConfirmationHandler createFrom(XtaFile file) { return new XtaImportConfirmationHandler(file); } private XtaImportConfirmationHandler(XtaFile file) { - importConfirmation = XtaFileXmlUtils.read(file, AbgabeImportBestaetigen0402.class); + importConfirmation = XtaFileReader.createAbgabeImportBestaetigen0402Reader().read(file); + } - public Stream<XtaAbgabeHandler> getAbgaben() { - return importConfirmation.getAbgegebenesObjekt().stream().map(XtaAbgabeHandler::new); + public Stream<XtaAbgabeAdapter> getAbgaben() { + return importConfirmation.getAbgegebenesObjekt().stream().map(XtaAbgabeAdapter::new); } @RequiredArgsConstructor - public static class XtaAbgabeHandler { + public static class XtaAbgabeAdapter { private final ErfolgOderMisserfolgAbgabeType abgabeType; @@ -35,7 +34,7 @@ public class XtaImportConfirmationHandler { return abgabeType.getIDSGO(); } - public boolean isSuccessfullyDone() { + public boolean isSuccessful() { return abgabeType.isErfolgreich(); } diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java index 0b34860..f80e00d 100644 --- a/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java +++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java @@ -12,7 +12,7 @@ import de.ozgcloud.archive.common.command.CommandService; import de.ozgcloud.archive.common.xta.XtaFileHelper; import de.ozgcloud.archive.common.xta.XtaFileType; import de.ozgcloud.archive.common.xta.XtaFileXmlUtils; -import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; +import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeAdapter; import de.ozgcloud.archive.common.xta.XtaService; import de.ozgcloud.command.Command; import de.ozgcloud.command.CommandExecutedEvent; @@ -48,7 +48,7 @@ class QuittungService { return XtaFileXmlUtils.isType(xtaFile, XtaFileType.IMPORT_CONFIRMATION); } - void handleAbgabe(XtaAbgabeHandler abgabeHandler) { + void handleAbgabe(XtaAbgabeAdapter abgabeHandler) { var vorgangId = abgabeHandler.getVorgangId(); var pendingCommands = findPendingArchiveVorgangCommands(vorgangId); @@ -63,11 +63,11 @@ class QuittungService { return commandService.findPending(vorgangId, CommandOrder.ARCHIVE_VORGANG).toList(); } - void evaluateAbgabe(XtaAbgabeHandler abgabeHandler, List<ArchiveManagerCommand> pendingCommands) { + void evaluateAbgabe(XtaAbgabeAdapter abgabeHandler, List<ArchiveManagerCommand> pendingCommands) { if (pendingCommands.size() > 1) { LOG.warn("Multiple pending commands found for vorgang: %s.", abgabeHandler.getVorgangId()); } - if (abgabeHandler.isSuccessfullyDone()) { + if (abgabeHandler.isSuccessful()) { pendingCommands.forEach(this::publishCommandExecutedEvent); } else { pendingCommands.forEach(command -> publishCommandFailedEvent(abgabeHandler, command)); @@ -78,7 +78,7 @@ class QuittungService { eventPublisher.publishEvent(new CommandExecutedEvent(pendingCommand)); } - void publishCommandFailedEvent(XtaAbgabeHandler contentHandler, Command pendingCommand) { + void publishCommandFailedEvent(XtaAbgabeAdapter contentHandler, Command pendingCommand) { eventPublisher.publishEvent(new CommandFailedEvent(pendingCommand.getId(), contentHandler.getFehlermeldung())); } } diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileHelperTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileHelperTest.java index f3da5de..5485f56 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileHelperTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileHelperTest.java @@ -7,9 +7,6 @@ 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/common/xta/XtaFileReaderTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java index 8cd4ed8..78fe015 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java @@ -18,12 +18,19 @@ import lombok.SneakyThrows; class XtaFileReaderTest { @Nested - class TestConstruction { + class TestCreateAbgabeImportBestaetigen0402Reader { + + @Test + void shouldCreateReader() { + var reader = XtaFileReader.createAbgabeImportBestaetigen0402Reader(); + + assertThat(reader).isExactlyInstanceOf(XtaFileReader.class); + } @Test @SneakyThrows void shouldSetUnmarshaller() { - var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + var reader = XtaFileReader.createAbgabeImportBestaetigen0402Reader(); assertThat(ReflectionTestUtils.getField(reader, "unmarshaller", Unmarshaller.class)).usingRecursiveComparison() .isEqualTo(JAXBContext.newInstance(AbgabeImportBestaetigen0402.class).createUnmarshaller()); @@ -36,7 +43,7 @@ class XtaFileReaderTest { @Test @SneakyThrows void shouldReadContent() { - var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + var reader = XtaFileReader.createAbgabeImportBestaetigen0402Reader(); var abgabe = reader.read(XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH)); @@ -46,7 +53,7 @@ class XtaFileReaderTest { @Test @SneakyThrows void shouldThrowTechnicalException() { - var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + var reader = XtaFileReader.createAbgabeImportBestaetigen0402Reader(); XtaFile unknownFile = XtaFileTestFactory.create(); assertThrows(TechnicalException.class, () -> reader.read(unknownFile)); diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java index e9cc657..9da78a0 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java @@ -11,8 +11,6 @@ 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/common/xta/XtaImportConfirmationHandlerTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandlerTest.java index 66e462a..7670320 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandlerTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaImportConfirmationHandlerTest.java @@ -2,18 +2,18 @@ package de.ozgcloud.archive.common.xta; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; -import java.util.function.Consumer; - +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.Mock; import org.mockito.MockedStatic; -import org.mockito.Mockito; -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.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeAdapter; +import de.ozgcloud.common.test.ReflectionTestUtils; import de.ozgcloud.xta.client.model.XtaFile; import de.xoev.xdomea.AbgabeImportBestaetigen0402; @@ -26,63 +26,93 @@ class XtaImportConfirmationHandlerTest { private final AbgabeImportBestaetigen0402 importConfirmation = AbgabeImportBestaetigen0402TestFactory.create(); private final XtaFile file = XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH); - @Test - void shouldReadFileContent() { - mockStatic(XtaFileXmlUtils.class, mock -> { - mock.when(() -> XtaFileXmlUtils.read(any(), any())).thenReturn(importConfirmation); - - var handler = initImportConfirmationHandler(); - - assertThat(handler.getImportConfirmation()).isEqualTo(importConfirmation); - }); - } + @Mock + private XtaFileReader<AbgabeImportBestaetigen0402> reader; - @Test - void shouldReturnAbgabenAsHandler() { - var handler = initImportConfirmationHandler(); + @Nested + class TestCreateFrom { - assertThat(handler.getAbgaben()).hasSize(1); - assertThat(handler.getAbgaben().findFirst()).isPresent().get().isInstanceOf(XtaAbgabeHandler.class); - } + @SuppressWarnings("rawtypes") + private MockedStatic<XtaFileReader> fileReaderStaticMock; - private <T> void mockStatic(Class<T> clazz, Consumer<MockedStatic<T>> mockConfigurer) { - try (var staticMock = Mockito.mockStatic(clazz, Mockito.CALLS_REAL_METHODS)) { - mockConfigurer.accept(staticMock); + @BeforeEach + void initMock() { + fileReaderStaticMock = mockStatic(XtaFileReader.class); + fileReaderStaticMock.when(XtaFileReader::createAbgabeImportBestaetigen0402Reader).thenReturn(reader); } - } - @DisplayName("Xta abgabe handler") - @Nested - class TestXtaAbgabeHandler { + @AfterEach + void closeMock() { + fileReaderStaticMock.close(); + } @Test - void shouldReturnVorgangId() { - var vorgangId = initAbgabeHandler().getVorgangId(); + void shouldReadFileContent() { + XtaImportConfirmationHandler.createFrom(file); - assertThat(vorgangId).isEqualTo(AbgabeImportBestaetigen0402TestFactory.VORGANG_ID); + verify(reader).read(file); } @Test - void shouldReturnIsSucessfullyDone() { - var isSuccessfullyDone = initAbgabeHandler().isSuccessfullyDone(); + void shouldSetImportConfirmation() { + when(reader.read(any())).thenReturn(importConfirmation); + + var confiHandler = XtaImportConfirmationHandler.createFrom(file); + + assertThat(ReflectionTestUtils.getField(confiHandler, "importConfirmation", AbgabeImportBestaetigen0402.class)) + .usingRecursiveComparison().isEqualTo(importConfirmation); - assertThat(isSuccessfullyDone).isEqualTo(AbgabeImportBestaetigen0402TestFactory.ERFOLGREICH); } + } + + @Nested + class TestGetAbgaben { + private final XtaFile file = XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH); + @Test - void shouldReturnErrorMessage() { - var errorMessage = initAbgabeHandler().getFehlermeldung(); + void shouldReturnAbgabenAsHandler() { + var handler = XtaImportConfirmationHandler.createFrom(file); - assertThat(errorMessage).isEqualTo(AbgabeImportBestaetigen0402TestFactory.FEHLERMELDUNG); + assertThat(handler.getAbgaben()).hasSize(1); + assertThat(handler.getAbgaben().findFirst()).isPresent().get().isInstanceOf(XtaAbgabeAdapter.class); } + } + } - private XtaAbgabeHandler initAbgabeHandler() { - return initImportConfirmationHandler().getAbgaben().findFirst().get(); - } + @DisplayName("Xta abgabe handler") + @Nested + class TestXtaAbgabeAdapter { + + private final XtaFile file = XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH); + + @Test + void shouldReturnVorgangId() { + var vorgangId = initAbgabeHandler().getVorgangId(); + + assertThat(vorgangId).isEqualTo(AbgabeImportBestaetigen0402TestFactory.VORGANG_ID); + } + + @Test + void shouldReturnIsSucessful() { + var isSuccessful = initAbgabeHandler().isSuccessful(); + + assertThat(isSuccessful).isEqualTo(AbgabeImportBestaetigen0402TestFactory.ERFOLGREICH); + } + + @Test + void shouldReturnErrorMessage() { + var errorMessage = initAbgabeHandler().getFehlermeldung(); + + assertThat(errorMessage).isEqualTo(AbgabeImportBestaetigen0402TestFactory.FEHLERMELDUNG); + } + + private XtaAbgabeAdapter initAbgabeHandler() { + return initImportConfirmationHandler().getAbgaben().findFirst().get(); } private XtaImportConfirmationHandler initImportConfirmationHandler() { - return XtaImportConfirmationHandler.initFrom(file); + return XtaImportConfirmationHandler.createFrom(file); } } } \ No newline at end of file diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java index a0494f1..e2c6e9c 100644 --- a/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java @@ -26,7 +26,7 @@ import de.ozgcloud.archive.common.command.CommandTestFactory; import de.ozgcloud.archive.common.xta.AbgabeImportBestaetigen0402TestFactory; import de.ozgcloud.archive.common.xta.XtaFileHelper; import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler; -import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeHandler; +import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeAdapter; import de.ozgcloud.archive.common.xta.XtaMessageTestFactory; import de.ozgcloud.archive.common.xta.XtaService; import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory; @@ -94,7 +94,7 @@ class QuittungServiceTest { class TestOnImportConfirmation { @Mock - private XtaAbgabeHandler abgabeHandler; + private XtaAbgabeAdapter abgabeHandler; @BeforeEach void mock() { @@ -137,7 +137,7 @@ class QuittungServiceTest { class TestHandleAbgabe { @Mock - private XtaAbgabeHandler abgabeHandler; + private XtaAbgabeAdapter abgabeHandler; @BeforeEach void mock() { @@ -197,7 +197,7 @@ class QuittungServiceTest { class TestEvaluateConfirmation { @Mock - private XtaAbgabeHandler abgabeHandler; + private XtaAbgabeAdapter abgabeHandler; private final ArchiveManagerCommand command = CommandTestFactory.create(); private final List<ArchiveManagerCommand> commands = List.of(command, command); @@ -206,12 +206,12 @@ class QuittungServiceTest { void shouldCallIsSuccessfullyDone() { service.evaluateAbgabe(abgabeHandler, commands); - verify(abgabeHandler).isSuccessfullyDone(); + verify(abgabeHandler).isSuccessful(); } @Test void shouldCallPublishCommendExcecutedEvent() { - when(abgabeHandler.isSuccessfullyDone()).thenReturn(true); + when(abgabeHandler.isSuccessful()).thenReturn(true); service.evaluateAbgabe(abgabeHandler, commands); @@ -220,7 +220,7 @@ class QuittungServiceTest { @Test void shouldCallPublishCommandFailedEvent() { - when(abgabeHandler.isSuccessfullyDone()).thenReturn(false); + when(abgabeHandler.isSuccessful()).thenReturn(false); service.evaluateAbgabe(abgabeHandler, commands); -- GitLab