diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java new file mode 100644 index 0000000000000000000000000000000000000000..770f2257667bfa88aaf74787e6fc005cac7fbb49 --- /dev/null +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReader.java @@ -0,0 +1,33 @@ +package de.ozgcloud.archive.common.xta; + +import java.io.IOException; + +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; + +import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.xta.client.model.XtaFile; + +class XtaFileReader<T> { + + private final Unmarshaller unmarshaller; + + XtaFileReader(Class<T> clazz) { + try { + unmarshaller = JAXBContext.newInstance(clazz).createUnmarshaller(); + } catch (JAXBException e) { + throw new TechnicalException("Error reading xta file content", e); + } + } + + @SuppressWarnings("unchecked") + public T read(XtaFile xtaFile) { + try { + return (T) unmarshaller.unmarshal(xtaFile.content().getInputStream()); + } catch (JAXBException | IOException e) { + throw new TechnicalException("Error on reading file %s.".formatted(xtaFile.name()), e); + } + } + +} 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 new file mode 100644 index 0000000000000000000000000000000000000000..8cd4ed861b7fa8cd821d2f56f29733847c273a27 --- /dev/null +++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileReaderTest.java @@ -0,0 +1,55 @@ +package de.ozgcloud.archive.common.xta; + +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; + +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.Unmarshaller; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import de.ozgcloud.common.errorhandling.TechnicalException; +import de.ozgcloud.common.test.ReflectionTestUtils; +import de.ozgcloud.xta.client.model.XtaFile; +import de.xoev.xdomea.AbgabeImportBestaetigen0402; +import lombok.SneakyThrows; + +class XtaFileReaderTest { + + @Nested + class TestConstruction { + + @Test + @SneakyThrows + void shouldSetUnmarshaller() { + var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + + assertThat(ReflectionTestUtils.getField(reader, "unmarshaller", Unmarshaller.class)).usingRecursiveComparison() + .isEqualTo(JAXBContext.newInstance(AbgabeImportBestaetigen0402.class).createUnmarshaller()); + } + } + + @Nested + class TestRead { + + @Test + @SneakyThrows + void shouldReadContent() { + var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + + var abgabe = reader.read(XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH)); + + assertThat(abgabe).usingRecursiveComparison().isEqualTo(AbgabeImportBestaetigen0402TestFactory.create()); + } + + @Test + @SneakyThrows + void shouldThrowTechnicalException() { + var reader = new XtaFileReader<AbgabeImportBestaetigen0402>(AbgabeImportBestaetigen0402.class); + XtaFile unknownFile = XtaFileTestFactory.create(); + + assertThrows(TechnicalException.class, () -> reader.read(unknownFile)); + } + } +}