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 d87b3af517e29b4184ebd805d0d0546125e5ff16..2e4f493eb3cc6909d22e617fd011e5977878c663 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 770f2257667bfa88aaf74787e6fc005cac7fbb49..87320fb68a027534135b88832b29e00ca6912ed4 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 8f446a0fe20819907b908b950fa90c9c65ba6df5..b1fa014a4390a3c9e96fac8e58f33ef309e42099 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 d286cbbfc1b5bf06a0d1d9d84fbaef3bd88778d3..e3c34763c0a196308f29c22271bdd01af34df828 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 0b3486004a39c1501026b22f64d3d409ba293e59..f80e00d71a0af61ccf86f2f3b703bc590ed16e2e 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 f3da5de675cf7db596bca119fe626dba60c24324..5485f56607185add07b0b74df6b510007104b3c1 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 8cd4ed861b7fa8cd821d2f56f29733847c273a27..78fe01559c3e4b56b5ec4e1025a400a8af95be18 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 e9cc6576f0eb92e31ca8b80dd14670716edad865..9da78a09c2fd11e1c138a3dda8b39a5f73b873b7 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 66e462a2df1007d8091bcc4a22f9cfd250ae9e2c..7670320b89e43a2e2df958b584e4d3e8f86ac512 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 a0494f18a387e72c159b632e649285191fa65b97..e2c6e9cd8d066e42cfceccacdf0edff16b2f44af 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);