diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java index 01e930e0cdfee68c2ce4c5eb3dab4813100e13b6..30cb6d5e030a9de48c1ecac7e53fdff1e7c32606 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/FeatureToggleProperties.java @@ -13,7 +13,7 @@ import lombok.Setter; public class FeatureToggleProperties { /** - * Enable vorgang export(XDomea) feature. + * Enable vorgang export(xdomea) feature. */ private boolean vorgangExport = false; diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java index d2058d91426c4c70004aae05f9dd5f47fc3bee41..af27e007db7a9f7cf6e530ab0be9442a0af1f6fd 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java @@ -13,18 +13,18 @@ import javax.xml.datatype.DatatypeConfigurationException; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; -import org.springframework.stereotype.Component; - import de.ozgcloud.common.errorhandling.TechnicalException; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import lombok.extern.log4j.Log4j2; -@Component @Log4j2 +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class DateConverter { private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.GERMAN); - public Optional<XMLGregorianCalendar> convertGermanFormatToISO(String dateStr) { + public static Optional<XMLGregorianCalendar> convertGermanFormatToISO(String dateStr) { try { if (nonNull(dateStr)) { return Optional.of(createDatatypeFactory().newXMLGregorianCalendar(LocalDate.parse(dateStr, DATE_TIME_FORMATTER).toString())); @@ -35,7 +35,7 @@ public class DateConverter { return Optional.empty(); } - public XMLGregorianCalendar toXmlGregorianCalendar(ZonedDateTime date) { + public static XMLGregorianCalendar toXmlGregorianCalendar(ZonedDateTime date) { try { if (nonNull(date)) { return createDatatypeFactory().newXMLGregorianCalendar(GregorianCalendar.from(date)); @@ -46,7 +46,7 @@ public class DateConverter { return null; } - DatatypeFactory createDatatypeFactory() { + static DatatypeFactory createDatatypeFactory() { try { return DatatypeFactory.newInstance(); } catch (DatatypeConfigurationException e) { diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DateiformatCode.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java similarity index 72% rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DateiformatCode.java rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java index 5042e73ea5b7578281de666e1e1e2c92e532cf70..b68bc80926cd283240a9f08a60ecfcfab2e8f285 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DateiformatCode.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateiformatCode.java @@ -1,19 +1,18 @@ -package de.ozgcloud.alfa.file; +package de.ozgcloud.alfa.common; import de.xoev.xdomea.DateiformatCodeType; +import lombok.Getter; +import lombok.RequiredArgsConstructor; -enum DateiformatCode { +@RequiredArgsConstructor +@Getter +public enum DateiformatCode { PDF("vCBzR", "018"); static final String LIST_URI = "urn:xoev-de:xdomea:codeliste:dateiformat"; final String listVersionID; final String code; - DateiformatCode(String listVersionID, String code) { - this.listVersionID = listVersionID; - this.code = code; - } - public DateiformatCodeType createDateiformatCodeType() { var dateiformatCode = new DateiformatCodeType(); dateiformatCode.setCode(code); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java index 498d74d5aeb964da5e994d149075503aa181ff1c..069f37f3027879d431531ef82ed09efec33a473d 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/ExportFilenameGenerator.java @@ -1,17 +1,13 @@ package de.ozgcloud.alfa.common; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - import de.ozgcloud.alfa.common.file.OzgFile; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; -@Component +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class ExportFilenameGenerator { - @Autowired - private UUIDConverter uuidConverter; - - public String generateExportFilename(OzgFile ozgFile) { - return String.format("%s_%s", uuidConverter.fromObjectId(ozgFile.getId().toString()), ozgFile.getName()); + public static String generateExportFilename(OzgFile ozgFile) { + return String.format("%s_%s", UUIDConverter.fromObjectId(ozgFile.getId().toString()), ozgFile.getName()); } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..ac48de62dda65cb160e37d62a03be7583ff7ab37 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java @@ -0,0 +1,45 @@ +package de.ozgcloud.alfa.common; + +import java.time.ZonedDateTime; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.xoev.xdomea.PrimaerdokumentType; + +public class PrimaerdokumentTypeBuilder { + + private OzgFile ozgFile; + private String ersteller; + private ZonedDateTime createdAt; + + public static PrimaerdokumentTypeBuilder builder() { + return new PrimaerdokumentTypeBuilder(); + } + + public PrimaerdokumentTypeBuilder withOzgFile(OzgFile ozgFile) { + this.ozgFile = ozgFile; + return this; + } + + public PrimaerdokumentTypeBuilder withErsteller(String ersteller) { + this.ersteller = ersteller; + return this; + } + + public PrimaerdokumentTypeBuilder withCreatedAt(ZonedDateTime createdAt) { + this.createdAt = createdAt; + return this; + } + + public PrimaerdokumentType build() { + if (ozgFile == null) { + throw new IllegalStateException("Can not build Primaerdokument when ozg file is null"); + } + + var primaerdokumentType = new PrimaerdokumentType(); + primaerdokumentType.setDateiname(ExportFilenameGenerator.generateExportFilename(ozgFile)); + primaerdokumentType.setDateinameOriginal(ozgFile.getName()); + primaerdokumentType.setErsteller(ersteller); + primaerdokumentType.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(createdAt)); + return primaerdokumentType; + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java index 0261329e9b724af6c396ace0a453f57fc7288042..85c84b421c0cf3d916e3ba2c70a372abd268d5d5 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/UUIDConverter.java @@ -3,15 +3,17 @@ package de.ozgcloud.alfa.common; import java.util.regex.Pattern; import org.apache.commons.lang3.StringUtils; -import org.springframework.stereotype.Component; -@Component +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) public class UUIDConverter { private static final Pattern UUID_SPLIT_PATTERN = Pattern.compile( "^([a-fA-F0-9]{8})([a-fA-F0-9]{4})([a-fA-F0-9]{4})([a-fA-F0-9]{4})([a-fA-F0-9]+)$"); - public String fromObjectId(String objectId) { + public static String fromObjectId(String objectId) { var matcher = UUID_SPLIT_PATTERN.matcher(objectId); if (matcher.find()) { var lastGroup = StringUtils.leftPad(matcher.group(5), 12, "0"); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeCreator.java deleted file mode 100644 index 3f7b8db4492f288ad2b9bceb2c7dc0ab496294f2..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeCreator.java +++ /dev/null @@ -1,61 +0,0 @@ -package de.ozgcloud.alfa.export; - -import java.util.stream.Stream; - -import de.xoev.xdomea.AbgabeAbgabe0401; -import de.xoev.xdomea.AkteType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.VorgangType; - -class AbgabeCreator { - - private AbgabeAbgabe0401 abgabeType; - - private AbgabeCreator() { - abgabeType = new AbgabeAbgabe0401(); - } - - public AbgabeCreator withKopf(NkAbgabeType kopfType) { - abgabeType.setKopf(kopfType); - return this; - } - - public AbgabeCreator withVorgang(VorgangType vorgangType) { - getSchriftgutobjekt().setVorgang(vorgangType); - return this; - } - - public AbgabeCreator withDokumentTypes(Stream<DokumentType> dokumentTypes) { - var vorgang = getVorgang(); - if (vorgang == null) { - throw new IllegalStateException("Cannot set documentTypes because Vorgang is null"); - } - dokumentTypes.forEach(vorgang.getDokument()::add); - return this; - } - - public AbgabeCreator withAkteType(AkteType akteType) { - getSchriftgutobjekt().setAkte(akteType); - return this; - } - - public AbgabeAbgabe0401 create() { - return abgabeType; - } - - private AbgabeAbgabe0401.Schriftgutobjekt getSchriftgutobjekt() { - if (abgabeType.getSchriftgutobjekt().isEmpty()) { - abgabeType.getSchriftgutobjekt().add(new AbgabeAbgabe0401.Schriftgutobjekt()); - } - return abgabeType.getSchriftgutobjekt().get(0); - } - - private VorgangType getVorgang() { - return getSchriftgutobjekt().getVorgang(); - } - - static AbgabeCreator createAbgabeCreator() { - return new AbgabeCreator(); - } -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java index a31bf073b13e5293927f8c708e974215baafe495..8840c0ac344b8d8d84fde3d7d48a96ec76794267 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java @@ -3,13 +3,15 @@ package de.ozgcloud.alfa.export; import java.util.HashMap; import java.util.Map; -import org.springframework.beans.factory.annotation.Autowired; +import jakarta.xml.bind.Marshaller; + import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.oxm.jaxb.Jaxb2Marshaller; -import jakarta.xml.bind.Marshaller; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Configuration class ExportConfiguration { @@ -17,8 +19,7 @@ class ExportConfiguration { static final String PROPERTY_NAMESPACE_PREFIX_MAPPER = "org.glassfish.jaxb.namespacePrefixMapper"; static final String CONTEXT_PATH = "de.xoev.xdomea"; - @Autowired - private XDomeaNamespacePrefixMapper prefixMapper; + private final XdomeaNamespacePrefixMapper prefixMapper; @Bean Jaxb2Marshaller marshaller() { diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java index 1d23b29d2200e28b0b6863243b31721ca8345db4..e241271bba7b6ef3c375866639eda13f7d369ab7 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportData.java @@ -1,6 +1,6 @@ package de.ozgcloud.alfa.export; -import java.util.stream.Stream; +import java.util.List; import de.ozgcloud.alfa.common.file.OzgFile; import de.xoev.xdomea.AbgabeAbgabe0401; @@ -16,6 +16,6 @@ class ExportData { private String exportFilename; private AbgabeAbgabe0401 abgabe; - private Stream<OzgFile> exportFiles; + private List<OzgFile> exportFiles; } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java index 7f63a5a48685328ddd6f41ca86d2f1bd52df6e2b..efc201e0be72099cfa5f53361e6cfa038b41875f 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java @@ -6,38 +6,38 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Optional; import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import org.springframework.beans.factory.annotation.Autowired; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import de.ozgcloud.alfa.common.ExportFilenameGenerator; import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.file.ExportFileService; +import de.ozgcloud.alfa.vorgang.Eingang; +import de.ozgcloud.alfa.vorgang.EingangHeader; import de.ozgcloud.alfa.vorgang.ExportVorgangService; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.errorhandling.TechnicalException; import de.xoev.xdomea.AbgabeAbgabe0401; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Service class ExportService { static final String EXPORT_FILENAME_SUFFIX = "_Abgabe.Abgabe.0401.xml"; private static final String EXPORT_FILENAME_TEMPLATE = "%s" + EXPORT_FILENAME_SUFFIX; - @Autowired - private XDomeaXmlMarshaller xDomeaXmlMarshaller; + private final XdomeaXmlMarshaller xDomeaXmlMarshaller; - @Autowired - private ExportFileService exportFileService; - - @Autowired - private ExportVorgangService exportVorgangService; - - @Autowired - private ExportFilenameGenerator exportFilenameGenerator; + private final ExportFileService exportFileService; + private final ExportVorgangService exportVorgangService; public void writeExport(String vorgangId, String filenameId, OutputStream out) { var exportData = collectExportData(vorgangId, filenameId); @@ -46,16 +46,25 @@ class ExportService { } ExportData collectExportData(String vorgangId, String filenameId) { - var vorgangWithEingang = exportVorgangService.getVorgang(vorgangId); - var ozgFiles = exportFileService.getAllPdfs(vorgangWithEingang.getEingang().getId()); - var abgabe = AbgabeCreator.createAbgabeCreator() - .withKopf(exportVorgangService.createKopf(vorgangWithEingang)) - .withVorgang(exportVorgangService.createVorgangType(vorgangWithEingang)) - .withAkteType(exportVorgangService.createAkteType(vorgangWithEingang)) - .withDokumentTypes( - exportFileService.createDokumentTypes(ozgFiles.stream(), vorgangWithEingang.getEingang().getHeader().getFormEngineName())) - .create(); - return ExportData.builder().abgabe(abgabe).exportFilename(buildXmlFilename(filenameId)).exportFiles(ozgFiles.stream()).build(); + var vorgang = exportVorgangService.getVorgang(vorgangId); + var representations = exportFileService.getRepresentations(vorgang).toList(); + var attachments = exportFileService.getAttachments(vorgang).toList(); + var formEngineName = getFormEngineName(vorgang); + var abgabe = XdomeaNachrichtBuilder.builder() + .withKopf(exportVorgangService.createKopf(vorgang)) + .withVorgang(exportVorgangService.createVorgangType(vorgang)) + .withAktenzeichen(exportVorgangService.createAkteType(vorgang)) + .withRepresentations(exportFileService.createDokumentTypes(representations, formEngineName).toList()) + .withAttachments(exportFileService.createDokumentTypes(attachments, formEngineName).toList()) + .build(); + var exportFiles = Stream.concat(representations.stream(), attachments.stream()).toList(); + return ExportData.builder().abgabe(abgabe).exportFilename(buildXmlFilename(filenameId)).exportFiles(exportFiles).build(); + } + + String getFormEngineName(VorgangWithEingang vorgang) { + return Optional.ofNullable(vorgang.getEingang()) + .map(Eingang::getHeader) + .map(EingangHeader::getFormEngineName).orElse(StringUtils.EMPTY); } String buildXmlFilename(String filenameId) { @@ -73,7 +82,7 @@ class ExportService { putFilesIntoZip(exportData.getExportFiles(), zipOutputStream); return file; } catch (Exception e) { - throw new TechnicalException("Error creating XDomea zip file", e); + throw new TechnicalException("Error creating xdomea zip file", e); } } @@ -84,13 +93,13 @@ class ExportService { zipOutputStream.closeEntry(); } - private void putFilesIntoZip(Stream<OzgFile> ozgFiles, ZipOutputStream zipOutputStream) { + private void putFilesIntoZip(List<OzgFile> ozgFiles, ZipOutputStream zipOutputStream) { ozgFiles.forEach(ozgFile -> putOzgFileIntoZip(ozgFile, zipOutputStream)); } void putOzgFileIntoZip(OzgFile ozgFile, ZipOutputStream zipOutputStream) { try { - var entry = new ZipEntry(exportFilenameGenerator.generateExportFilename(ozgFile)); + var entry = new ZipEntry(ExportFilenameGenerator.generateExportFilename(ozgFile)); zipOutputStream.putNextEntry(entry); exportFileService.writeOzgFile(ozgFile.getId(), zipOutputStream); zipOutputStream.closeEntry(); @@ -103,7 +112,7 @@ class ExportService { try (var fileInputStream = new FileInputStream(file)) { fileInputStream.transferTo(outputStream); } catch (Exception e) { - throw new TechnicalException("Error writing XDomea zip file to output stream", e); + throw new TechnicalException("Error writing xdomea zip file to output stream", e); } } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java index 8dc8154f42b755de40f1c9b7addf1316e6dc15db..052b36cd92c182aad9838aefe8f108b358af4e65 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangController.java @@ -2,7 +2,6 @@ package de.ozgcloud.alfa.export; import java.util.UUID; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -12,6 +11,9 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @RestController @RequestMapping(ExportVorgangController.PATH) public class ExportVorgangController { @@ -20,8 +22,7 @@ public class ExportVorgangController { private static final String EXPORT_FILENAME_TEMPLATE = "%s_Abgabe.Abgabe.0401.xdomea"; - @Autowired - private ExportService xDomeaService; + private final ExportService xDomeaService; @GetMapping(value = "{vorgangId}", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public ResponseEntity<StreamingResponseBody> exportToXdomea(@PathVariable String vorgangId) { diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java index 7d23f894644d0325cf32ad4af81c25536503cb5b..28184ab2ecfec34797cee5261605f1cde264d7b4 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportVorgangProcessor.java @@ -4,7 +4,6 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; import java.util.Objects; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.LinkRelation; import org.springframework.hateoas.server.RepresentationModelProcessor; @@ -13,14 +12,15 @@ import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class ExportVorgangProcessor implements RepresentationModelProcessor<EntityModel<VorgangWithEingang>> { static final LinkRelation REL_EXPORT = LinkRelation.of("export"); - @Autowired - private FeatureToggleProperties featureToggleProperties; + private final FeatureToggleProperties featureToggleProperties; @Override public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaMedienart.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java similarity index 74% rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaMedienart.java rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java index 12c1500798df429f6d2619c35c16a4bce54e532d..42338a5e6befc601a62735b18d700dfee7fcc795 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaMedienart.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaMedienart.java @@ -1,12 +1,12 @@ package de.ozgcloud.alfa.export; -enum XDomeaMedienart { +enum XdomeaMedienart { ELEKTRONISCHES_DOKUMENT("001"); private String code; - XDomeaMedienart(String code) { + XdomeaMedienart(String code) { this.code = code; } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..50adf69cc56c4f60726e072cdd6ac09e278f473e --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java @@ -0,0 +1,74 @@ +package de.ozgcloud.alfa.export; + +import java.util.List; + +import de.xoev.xdomea.AbgabeAbgabe0401; +import de.xoev.xdomea.AbgabeAbgabe0401.Schriftgutobjekt; +import de.xoev.xdomea.AkteType; +import de.xoev.xdomea.DokumentType; +import de.xoev.xdomea.NkAbgabeType; +import de.xoev.xdomea.VorgangType; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +class XdomeaNachrichtBuilder { + + private VorgangType vorgang; + private NkAbgabeType kopf; + private List<DokumentType> representations = List.of(); + private List<DokumentType> attachments = List.of(); + private AkteType aktenzeichen; + + public static XdomeaNachrichtBuilder builder() { + return new XdomeaNachrichtBuilder(); + } + + public XdomeaNachrichtBuilder withKopf(NkAbgabeType kopf) { + this.kopf = kopf; + return this; + } + + public XdomeaNachrichtBuilder withVorgang(VorgangType vorgangType) { + this.vorgang = vorgangType; + return this; + } + + public XdomeaNachrichtBuilder withAktenzeichen(AkteType akteType) { + this.aktenzeichen = akteType; + return this; + } + + public XdomeaNachrichtBuilder withRepresentations(List<DokumentType> representations) { + this.representations = representations; + return this; + } + + public XdomeaNachrichtBuilder withAttachments(List<DokumentType> attachments) { + this.attachments = attachments; + return this; + } + + public AbgabeAbgabe0401 build() { + var schriftgutobjekt = createSchriftgutobjekt(); + addVorgangDokumente(); + + var abgabeType = new AbgabeAbgabe0401(); + abgabeType.setKopf(kopf); + abgabeType.getSchriftgutobjekt().add(schriftgutobjekt); + return abgabeType; + } + + private Schriftgutobjekt createSchriftgutobjekt() { + var schriftgutobjekt = new Schriftgutobjekt(); + schriftgutobjekt.setVorgang(vorgang); + schriftgutobjekt.setAkte(aktenzeichen); + return schriftgutobjekt; + } + + void addVorgangDokumente() { + representations.forEach(vorgang.getDokument()::add); + attachments.forEach(vorgang.getDokument()::add); + } + +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaNamespacePrefixMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java similarity index 96% rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaNamespacePrefixMapper.java rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java index 81bb3fd6a3188265b05f3d731bd096a6a78ae8b8..08894a2387b574d9616faebb9eac3d15603f772c 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaNamespacePrefixMapper.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNamespacePrefixMapper.java @@ -6,7 +6,7 @@ import org.glassfish.jaxb.runtime.marshaller.NamespacePrefixMapper; import org.springframework.stereotype.Component; @Component -class XDomeaNamespacePrefixMapper extends NamespacePrefixMapper { +class XdomeaNamespacePrefixMapper extends NamespacePrefixMapper { static final String XDOMEA_NAMESPACE_URI = "urn:xoev-de:xdomea:schema:3.0.0"; static final String XDOMEA_NAMESPACE_PREFIX = "xdomea"; diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaProperties.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java similarity index 84% rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaProperties.java rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java index fa2898bed501872596eca02a1d45a3c822fc256a..c2f59b1d50bca5d9902a5bc6defec49015edc1a3 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaProperties.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaProperties.java @@ -10,10 +10,10 @@ import lombok.Setter; @Setter @Configuration @ConfigurationProperties("ozgcloud.xdomea") -public class XDomeaProperties { +public class XdomeaProperties { /** - * XDomea Behoerdenschluessel. + * xdomea Behoerdenschluessel. */ private String behoerdenschluessel; } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaXmlMarshaller.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java similarity index 75% rename from alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaXmlMarshaller.java rename to alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java index 746c2d540de9a78c1d99e2c2458161b8510c154f..441bd579380934ebdfe3d26a587d92afe4f711b5 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaXmlMarshaller.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaXmlMarshaller.java @@ -4,17 +4,17 @@ import java.io.StringWriter; import javax.xml.transform.stream.StreamResult; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.oxm.jaxb.Jaxb2Marshaller; import org.springframework.stereotype.Component; import de.xoev.xdomea.AbgabeAbgabe0401; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component -public class XDomeaXmlMarshaller { +public class XdomeaXmlMarshaller { - @Autowired - private Jaxb2Marshaller marshaller; + private final Jaxb2Marshaller marshaller; public String marshal(AbgabeAbgabe0401 abgabe) { var stringWriter = new StringWriter(); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java new file mode 100644 index 0000000000000000000000000000000000000000..625313a85d2365950b6e7d0295bc8bb520b9ff72 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java @@ -0,0 +1,100 @@ +package de.ozgcloud.alfa.file; + +import org.apache.commons.lang3.StringUtils; + +import de.ozgcloud.alfa.common.DateiformatCode; +import de.ozgcloud.alfa.common.PrimaerdokumentTypeBuilder; +import de.ozgcloud.alfa.common.UUIDConverter; +import de.ozgcloud.alfa.common.file.OzgFile; +import de.xoev.xdomea.AllgemeineMetadatenType; +import de.xoev.xdomea.DokumentType; +import de.xoev.xdomea.FormatType; +import de.xoev.xdomea.IdentifikationObjektType; +import de.xoev.xdomea.MediumCodeType; +import de.xoev.xdomea.PrimaerdokumentType; +import de.xoev.xdomea.VersionType; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public class DokumentTypeBuilder { + + static final String VERSION_NUMMER = "1"; + static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001"; + + private Long ordinalNumber; + private String formEngineName; + private OzgFile ozgFile; + + public static DokumentTypeBuilder builder() { + return new DokumentTypeBuilder(); + } + + public DokumentTypeBuilder withOrdinalNumber(Long ordinalNumber) { + this.ordinalNumber = ordinalNumber; + return this; + } + + public DokumentTypeBuilder withFormEngineName(String formEngineName) { + this.formEngineName = formEngineName; + return this; + } + + public DokumentTypeBuilder withOzgFile(OzgFile ozgFile) { + this.ozgFile = ozgFile; + return this; + } + + public DokumentType build() { + var dokumentType = new DokumentType(); + dokumentType.setIdentifikation(createIdentifikation()); + dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten()); + dokumentType.getVersion().add(createVersionType()); + dokumentType.getVersion().get(0).getFormat().get(0).setPrimaerdokument(createPrimaerdokument()); + return dokumentType; + } + + VersionType createVersionType() { + var versionType = new VersionType(); + versionType.setNummer(VERSION_NUMMER); + versionType.getFormat().add(createFormatType()); + return versionType; + } + + FormatType createFormatType() { + var formatType = new FormatType(); + formatType.setName(DateiformatCode.PDF.createDateiformatCodeType()); + formatType.setSonstigerName(StringUtils.EMPTY); + formatType.setVersion(StringUtils.EMPTY); + return formatType; + } + + IdentifikationObjektType createIdentifikation() { + var identifikation = new IdentifikationObjektType(); + identifikation.setID(UUIDConverter.fromObjectId(ozgFile.getId().toString())); + identifikation.setNummerImUebergeordnetenContainer(ordinalNumber); + return identifikation; + } + + AllgemeineMetadatenType createAllgemeineMetadaten() { + var allgemeineMetadaten = new AllgemeineMetadatenType(); + allgemeineMetadaten.setBetreff(ozgFile.getName()); + allgemeineMetadaten.setKennzeichen(StringUtils.EMPTY); + allgemeineMetadaten.setBemerkung(StringUtils.EMPTY); + allgemeineMetadaten.setMedium(createMediumCode()); + return allgemeineMetadaten; + } + + private MediumCodeType createMediumCode() { + var mediumCode = new MediumCodeType(); + mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE); + return mediumCode; + } + + PrimaerdokumentType createPrimaerdokument() { + return PrimaerdokumentTypeBuilder.builder() + .withOzgFile(ozgFile) + .withErsteller(formEngineName) + .build(); + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeCreator.java deleted file mode 100644 index f86626bb5f5c4499c9d813b01686c0f50f7c17ce..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeCreator.java +++ /dev/null @@ -1,100 +0,0 @@ -package de.ozgcloud.alfa.file; - -import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Stream; - -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import de.ozgcloud.alfa.common.ExportFilenameGenerator; -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.FormatType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.MediumCodeType; -import de.xoev.xdomea.PrimaerdokumentType; -import de.xoev.xdomea.VersionType; - -@Component -class DokumentTypeCreator { - - static final String VERSION_NUMMER = "1"; - static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001"; - - @Autowired - private UUIDConverter uuidConverter; - - @Autowired - private ExportFilenameGenerator exportFilenameGenerator; - - public Stream<DokumentType> create(Stream<OzgFile> ozgFiles, String formEngineName) { - final var ordinalNumberGenerator = new AtomicInteger(1); - return ozgFiles.map(ozgFile -> createDokumentType(new MappingData(ozgFile, ordinalNumberGenerator.getAndIncrement(), formEngineName))); - } - - DokumentType createDokumentType(MappingData mappingData) { - var dokumentType = new DokumentType(); - dokumentType.setIdentifikation(createIdentifikation(mappingData)); - dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten(mappingData)); - - var versionType = createVersionType(); - dokumentType.getVersion().add(versionType); - - var formatType = createFormatType(); - versionType.getFormat().add(formatType); - - var primaerdokumentType = createPrimaerdokumentType(mappingData); - formatType.setPrimaerdokument(primaerdokumentType); - - return dokumentType; - } - - IdentifikationObjektType createIdentifikation(MappingData mappingData) { - var identifikation = new IdentifikationObjektType(); - identifikation.setID(uuidConverter.fromObjectId(mappingData.ozgFile().getId().toString())); - identifikation.setNummerImUebergeordnetenContainer(Long.valueOf(mappingData.dokumentOrdinalNumber())); - return identifikation; - } - - AllgemeineMetadatenType createAllgemeineMetadaten(MappingData mappingData) { - var allgemeineMetadaten = new AllgemeineMetadatenType(); - allgemeineMetadaten.setBetreff(mappingData.ozgFile().getName()); - allgemeineMetadaten.setKennzeichen(StringUtils.EMPTY); - allgemeineMetadaten.setBemerkung(StringUtils.EMPTY); - allgemeineMetadaten.setMedium(createMediumCode()); - return allgemeineMetadaten; - } - - private MediumCodeType createMediumCode() { - var mediumCode = new MediumCodeType(); - mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE); - return mediumCode; - } - - private VersionType createVersionType() { - var versionType = new VersionType(); - versionType.setNummer(VERSION_NUMMER); - return versionType; - } - - private FormatType createFormatType() { - var formatType = new FormatType(); - formatType.setName(DateiformatCode.PDF.createDateiformatCodeType()); - formatType.setSonstigerName(StringUtils.EMPTY); - formatType.setVersion(StringUtils.EMPTY); - return formatType; - } - - private PrimaerdokumentType createPrimaerdokumentType(MappingData mappingData) { - var primaerdokumentType = new PrimaerdokumentType(); - primaerdokumentType.setDateiname(exportFilenameGenerator.generateExportFilename(mappingData.ozgFile())); - primaerdokumentType.setDateinameOriginal(mappingData.ozgFile().getName()); - primaerdokumentType.setErsteller(mappingData.formEngineName()); - return primaerdokumentType; - } - - record MappingData (OzgFile ozgFile, int dokumentOrdinalNumber, String formEngineName) {} -} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java index c196597c3074a43243b137b08a25d2165832fcf9..a468860b4f11ee63ad9296d4c0037b5bc6552bd5 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/ExportFileService.java @@ -2,10 +2,11 @@ package de.ozgcloud.alfa.file; import java.io.OutputStream; import java.util.List; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicLong; import java.util.function.Predicate; import java.util.stream.Stream; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @@ -13,30 +14,41 @@ import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; import de.ozgcloud.alfa.common.binaryfile.FileId; import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.common.file.OzgFileService; +import de.ozgcloud.alfa.vorgang.Eingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.xoev.xdomea.DokumentType; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Service public class ExportFileService { private static final Predicate<OzgFile> IS_PDF_FILE = file -> MediaType.APPLICATION_PDF_VALUE.equals(file.getContentType()); - @Autowired - private OzgFileService ozgFileService; + private final OzgFileService ozgFileService; + private final BinaryFileService binaryFileService; - @Autowired - private BinaryFileService binaryFileService; - - @Autowired - private DokumentTypeCreator dokumentTypeCreator; + public Stream<OzgFile> getRepresentations(VorgangWithEingang vorgang) { + return Optional.ofNullable(vorgang.getEingang()) + .map(Eingang::getId).stream() + .flatMap(ozgFileService::getRepresentationsByEingang) + .filter(IS_PDF_FILE); + } - public List<OzgFile> getAllPdfs(String eingangId) { - var representations = ozgFileService.getRepresentationsByEingang(eingangId); - var attachments = ozgFileService.getAttachmentsByEingang(eingangId); - return Stream.concat(representations, attachments).filter(IS_PDF_FILE).toList(); + public Stream<OzgFile> getAttachments(VorgangWithEingang vorgang) { + return Optional.ofNullable(vorgang.getEingang()) + .map(Eingang::getId).stream() + .flatMap(ozgFileService::getAttachmentsByEingang) + .filter(IS_PDF_FILE); } - public Stream<DokumentType> createDokumentTypes(Stream<OzgFile> ozgFileStream, String formEngineName) { - return dokumentTypeCreator.create(ozgFileStream, formEngineName); + public Stream<DokumentType> createDokumentTypes(List<OzgFile> ozgFiles, String formEngineName) { + var ordinalNumberGenerator = new AtomicLong(1); + return ozgFiles.stream().map(ozgFile -> DokumentTypeBuilder.builder() + .withOrdinalNumber(ordinalNumberGenerator.getAndIncrement()) + .withFormEngineName(formEngineName) + .withOzgFile(ozgFile) + .build()); } public void writeOzgFile(FileId fileId, OutputStream outputStream) { diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java new file mode 100644 index 0000000000000000000000000000000000000000..547d58ab0e021d411c1c9e16af3db8096906febe --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/historie/ExportHistorieService.java @@ -0,0 +1,10 @@ +package de.ozgcloud.alfa.historie; + +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Service +public class ExportHistorieService { +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java index f300fcfa08105ab88e30e3c0f1d31dab44e219cc..05b2f17709d3e4c2a8c26d1fbce3c7315a20b078 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungTypeCreator.java @@ -2,19 +2,19 @@ package de.ozgcloud.alfa.vorgang; import java.util.Collections; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class AnwendungsspezifischeErweiterungTypeCreator { static final String KENNUNG = "IDOZGCloud1234567"; static final String NAME = "Anwendungsspezifische Erweiterung OZGCloud Basis"; - @Autowired - private FeldGruppeTypeCreator feldGruppeTypeCreator; + private final FeldGruppeTypeCreator feldGruppeTypeCreator; public AnwendungsspezifischeErweiterungType create(VorgangWithEingang vorgang) { var ozgcloudErweiterungType = new AnwendungsspezifischeErweiterungType(); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java index ed8527d1309fa29b33767e88ba6cb819d49d2c14..2af8e7cd35c3b5eac78704fa035c3a9aece954e6 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/AnwendungsspezifischeErweiterungXMLTypeCreator.java @@ -1,15 +1,15 @@ package de.ozgcloud.alfa.vorgang; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.xoev.xdomea.AnwendungsspezifischeErweiterungXMLType; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component public class AnwendungsspezifischeErweiterungXMLTypeCreator { - @Autowired - private FormDataMapper formDataMapper; + private final FormDataMapper formDataMapper; public AnwendungsspezifischeErweiterungXMLType create(VorgangWithEingang vorgang) { var erweiterungXmlType = new AnwendungsspezifischeErweiterungXMLType(); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java index 086a3097893f17956ec76a0e291a2bf5ad99d207..49ae46dc6950161c2121bb7fc395a07cf96317ae 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/ExportVorgangService.java @@ -4,7 +4,6 @@ import java.util.Optional; import java.util.UUID; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.xoev.xdomea.AkteType; @@ -12,18 +11,16 @@ import de.xoev.xdomea.AllgemeineMetadatenType; import de.xoev.xdomea.IdentifikationObjektType; import de.xoev.xdomea.NkAbgabeType; import de.xoev.xdomea.VorgangType; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Service public class ExportVorgangService { - @Autowired - private VorgangService vorgangService; + private final VorgangService vorgangService; - @Autowired - private VorgangTypeCreator vorgangTypeCreator; - - @Autowired - private KopfCreator kopfCreator; + private final VorgangTypeCreator vorgangTypeCreator; + private final KopfCreator kopfCreator; public VorgangWithEingang getVorgang(String vorgangId) { return vorgangService.findVorgangWithEingang(vorgangId); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java index 04e32a6a67bb855d1d29a621748a4698df013cdd..b5b8a45e9e650bc8e193de707b082ec057e8758f 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java @@ -9,7 +9,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.DateConverter; @@ -19,17 +18,15 @@ import de.xoev.xdomea.AntragsdatenItemType; import de.xoev.xdomea.AntragsdatenMultiValueFieldType; import de.xoev.xdomea.AntragsdatenSingleValueFieldType; import de.xoev.xdomea.DatatypeType; -import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class FormDataMapper { - @Autowired - private DatatypeMapper datatypeMapper; - @Autowired - private DateConverter dateConverter; + private final DatatypeMapper datatypeMapper; - public Antragsdaten toAntragsdaten(@NotNull VorgangWithEingang vorgang) { + public Antragsdaten toAntragsdaten(VorgangWithEingang vorgang) { var antragsdaten = new Antragsdaten(); antragsdaten.getItem().addAll(mapFormData(vorgang)); antragsdaten.getItem().addAll(mapOtherData(vorgang)); @@ -97,7 +94,7 @@ class FormDataMapper { Object formatValue(DatatypeType datatype, Object value) { return switch (datatype) { case STRING -> String.valueOf(value); - case DATETIME -> dateConverter.toXmlGregorianCalendar((ZonedDateTime) value); + case DATETIME -> DateConverter.toXmlGregorianCalendar((ZonedDateTime) value); default -> value; }; } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java index 8521f74b3b600a85b4e19c85813c0caebb7f011f..6b305598131217a6727b21dbf2cd2e514471d806 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreator.java @@ -6,13 +6,14 @@ import java.util.function.Predicate; import javax.xml.datatype.XMLGregorianCalendar; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.DateConverter; import de.xoev.xdomea.GeburtType; import de.xoev.xdomea.KontaktType; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KontaktTypeCreator { @@ -20,11 +21,7 @@ class KontaktTypeCreator { private static final Predicate<Antragsteller> HAS_NACHNAME = antragsteller -> StringUtils.isNotBlank(antragsteller.getNachname()); private static final Predicate<Antragsteller> HAS_ANREDE = antragsteller -> StringUtils.isNotBlank(antragsteller.getAnrede()); - @Autowired - private NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator; - - @Autowired - private DateConverter dateConverter; + private final NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator; public Optional<KontaktType> create(VorgangWithEingang vorgang) { return getAntragstellerIfHasRequiredData(vorgang).map(this::toKontaktType); @@ -38,7 +35,7 @@ class KontaktTypeCreator { KontaktType toKontaktType(Antragsteller antragsteller) { var kontakt = new KontaktType(); kontakt.setName(nameNatuerlichePersonTypeCreator.create(antragsteller)); - var geburtsdatumIso = dateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum()); + var geburtsdatumIso = DateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum()); kontakt.setGeburt(createGeburtType(geburtsdatumIso)); return kontakt; } @@ -54,7 +51,7 @@ class KontaktTypeCreator { } private boolean hasValidGeburtsdatum(Antragsteller antragsteller) { - return dateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum()).isPresent(); + return DateConverter.convertGermanFormatToISO(antragsteller.getGeburtsdatum()).isPresent(); } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java index 9ca24c46586dd757ea0b258476e5c6d36119c200..a31903a23072ed69eac7f8537ea16171d052e36a 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/KopfCreator.java @@ -3,11 +3,10 @@ package de.ozgcloud.alfa.vorgang; import java.time.ZoneOffset; import java.time.ZonedDateTime; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.export.XDomeaProperties; +import de.ozgcloud.alfa.export.XdomeaProperties; import de.xoev.xdomea.BehoerdenkennungType; import de.xoev.xdomea.Code; import de.xoev.xdomea.KontaktType; @@ -15,7 +14,9 @@ import de.xoev.xdomea.NachrichtentypCodeType; import de.xoev.xdomea.NkAbgabeType; import de.xoev.xdomea.OrganisationseinheitType; import de.xoev.xdomea.SystemType; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class KopfCreator { @@ -27,16 +28,13 @@ class KopfCreator { static final String NACHRICHTENTYP_ABGABE_ABGABE_TYPE_CODE = "0401"; static final String PRODUKT_NAME = "OZG-Cloud"; - @Autowired - private XDomeaProperties xDomeaProperties; - @Autowired - private DateConverter dateConverter; + private final XdomeaProperties xDomeaProperties; public NkAbgabeType createKopf(VorgangWithEingang vorgang) { var nkAbgabeType = new NkAbgabeType(); nkAbgabeType.setProzessID(vorgang.getId()); nkAbgabeType.setNachrichtentyp(createNachrichtentyp()); - nkAbgabeType.setErstellungszeitpunkt(dateConverter.toXmlGregorianCalendar(ZonedDateTime.now(ZoneOffset.UTC))); + nkAbgabeType.setErstellungszeitpunkt(DateConverter.toXmlGregorianCalendar(ZonedDateTime.now(ZoneOffset.UTC))); nkAbgabeType.setAbsender(createAbsender(vorgang.getEingang().getZustaendigeStelle().getOrganisationseinheitenId())); nkAbgabeType.setEmpfaenger(createKontaktType()); nkAbgabeType.setSendendesSystem(creeateSendendesSystem()); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java index 8a07a45db170d28ac7ccdc593daf143c845b284a..11b5a0502926d5b23aa29665cd47b64cf93c5c37 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/VorgangTypeCreator.java @@ -3,28 +3,24 @@ package de.ozgcloud.alfa.vorgang; import java.util.UUID; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.xoev.xdomea.AllgemeineMetadatenType; import de.xoev.xdomea.IdentifikationObjektType; import de.xoev.xdomea.MediumCodeType; import de.xoev.xdomea.VorgangType; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor @Component class VorgangTypeCreator { static final Long NUMMER_IM_UEBERGEORDNETEN_CONTAINER = 1L; static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001"; - @Autowired - private AnwendungsspezifischeErweiterungTypeCreator anwendungsspezifischeErweiterungTypeCreator; - - @Autowired - private AnwendungsspezifischeErweiterungXMLTypeCreator anwendungsspezifischeErweiterungXMLTypeCreator; - - @Autowired - private KontaktTypeCreator kontaktTypeCreator; + private final AnwendungsspezifischeErweiterungTypeCreator anwendungsspezifischeErweiterungTypeCreator; + private final AnwendungsspezifischeErweiterungXMLTypeCreator anwendungsspezifischeErweiterungXMLTypeCreator; + private final KontaktTypeCreator kontaktTypeCreator; public VorgangType create(VorgangWithEingang vorgangWithEingang) { var vorgang = new VorgangType(); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java index 0c924375c0e67c38aee383b9f69d8479553c18cb..d6673fc2325d7ef87fed22b5d7c920812308d5b0 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateConverterTest.java @@ -13,7 +13,6 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import org.mockito.InjectMocks; import org.mockito.MockedStatic; import org.mockito.Mockito; @@ -21,9 +20,6 @@ import de.ozgcloud.common.errorhandling.TechnicalException; class DateConverterTest { - @InjectMocks - private DateConverter converter; - @Nested class TestConvertGermanFormatToISO { @@ -57,7 +53,7 @@ class DateConverterTest { } private Optional<XMLGregorianCalendar> callConverter(String dateStr) { - return converter.convertGermanFormatToISO(dateStr); + return DateConverter.convertGermanFormatToISO(dateStr); } } @@ -69,7 +65,7 @@ class DateConverterTest { try (MockedStatic<DatatypeFactory> datatypeFactory = Mockito.mockStatic(DatatypeFactory.class)) { datatypeFactory.when(DatatypeFactory::newInstance).thenThrow(DatatypeConfigurationException.class); - assertThatThrownBy(() -> converter.createDatatypeFactory()).isInstanceOf(TechnicalException.class); + assertThatThrownBy(() -> DateConverter.createDatatypeFactory()).isInstanceOf(TechnicalException.class); } } } @@ -81,7 +77,7 @@ class DateConverterTest { void shouldConvertZonedDateTime() { var date = ZonedDateTime.now(); - var xmlGregorianCalendar = converter.toXmlGregorianCalendar(date); + var xmlGregorianCalendar = DateConverter.toXmlGregorianCalendar(date); assertThat(xmlGregorianCalendar.getYear()).isEqualTo(date.getYear()); assertThat(xmlGregorianCalendar.getMonth()).isEqualTo(date.getMonthValue()); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DateiformatCodeTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java similarity index 96% rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DateiformatCodeTest.java rename to alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java index 2bc5492714bb1ee3a0e19d9e237624ec16d382c8..1046b0606bee88d99e2d7856ae8df31aa37534d1 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DateiformatCodeTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/DateiformatCodeTest.java @@ -1,4 +1,4 @@ -package de.ozgcloud.alfa.file; +package de.ozgcloud.alfa.common; import static org.assertj.core.api.Assertions.*; diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/FormaTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormTypeTestFactory.java similarity index 60% rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/FormaTypeTestFactory.java rename to alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormTypeTestFactory.java index fb1e2746723ac3384c94845b1fe1f4abc362c744..da7e15a4d08aa00085d957dc7b4b24a80568014f 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/FormaTypeTestFactory.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/FormTypeTestFactory.java @@ -1,8 +1,8 @@ -package de.ozgcloud.alfa.file; +package de.ozgcloud.alfa.common; import de.xoev.xdomea.FormatType; -public class FormaTypeTestFactory { +public class FormTypeTestFactory { public static FormatType create() { return new FormatType(); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..51447d711d95bd24c947899d9339d36b03e548c1 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java @@ -0,0 +1,104 @@ +package de.ozgcloud.alfa.common; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.time.ZonedDateTime; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; + +class PrimaerdokumentTypeBuilderTest { + + private final PrimaerdokumentTypeBuilder builder = PrimaerdokumentTypeBuilder.builder().withOzgFile(OzgFileTestFactory.create()); + + @Nested + class TestBuild { + + private MockedStatic<ExportFilenameGenerator> exportFilenameGeneratorMockedStatic; + + private static final String ERSTELLER = "Ersteller"; + private static final String GENERATED_FILE_NAME = "file_name"; + private static final ZonedDateTime CREATED_AT = ZonedDateTime.now(); + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + @BeforeEach + void setUp() { + exportFilenameGeneratorMockedStatic = mockStatic(ExportFilenameGenerator.class); + exportFilenameGeneratorMockedStatic.when(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(GENERATED_FILE_NAME); + } + + @AfterEach + void tearDown() { + exportFilenameGeneratorMockedStatic.close(); + } + + @Test + void shouldGenerateExportFilename() { + builder.withOzgFile(ozgFile).build(); + + exportFilenameGeneratorMockedStatic.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)); + } + + @Test + void shouldHaveDateiname() { + var primaerdokumentType = builder.withOzgFile(ozgFile).build(); + + assertThat(primaerdokumentType.getDateiname()).isEqualTo(GENERATED_FILE_NAME); + } + + @Test + void shouldNotHaveDateiname() { + var primaerdokumentType = builder.build(); + + assertThat(primaerdokumentType.getDateiname()).isNull(); + } + + @Test + void shouldHaveDateinameOriginal() { + var primaerdokumentType = builder.withOzgFile(ozgFile).build(); + + assertThat(primaerdokumentType.getDateinameOriginal()).isEqualTo(OzgFileTestFactory.NAME); + } + + @Test + void shouldHaveErsteller() { + var primaerdokumentType = builder.withErsteller(ERSTELLER).build(); + + assertThat(primaerdokumentType.getErsteller()).isEqualTo(ERSTELLER); + } + + @Test + void shouldNotHaveErsteller() { + var primaerdokumentType = builder.build(); + + assertThat(primaerdokumentType.getErsteller()).isNull(); + } + + @Test + void shouldHaveDatumUhrzeit() { + var primaerdokumentType = builder.withCreatedAt(CREATED_AT).build(); + + assertThat(primaerdokumentType.getDatumUhrzeit()).isEqualTo(DateConverter.toXmlGregorianCalendar(CREATED_AT)); + } + + @Test + void shouldNotHaveDatumUhrzeit() { + var primaerdokumentType = builder.build(); + + assertThat(primaerdokumentType.getDatumUhrzeit()).isNull(); + } + + @Test + void shouldThrowIllegalgStateException() { + assertThatThrownBy(() -> builder.withOzgFile(null).build()).isInstanceOf(IllegalStateException.class); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/PrimaerdokumentTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java similarity index 62% rename from alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/PrimaerdokumentTypeTestFactory.java rename to alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java index 10ab0639a2dfe6302a3ea5cde212430d3855d717..9ea20bb8172b6528091a928726a3e4beff46448c 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/PrimaerdokumentTypeTestFactory.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeTestFactory.java @@ -1,8 +1,8 @@ -package de.ozgcloud.alfa.file; +package de.ozgcloud.alfa.common; import de.xoev.xdomea.PrimaerdokumentType; -class PrimaerdokumentTypeTestFactory { +public class PrimaerdokumentTypeTestFactory { public static PrimaerdokumentType create() { return new PrimaerdokumentType(); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java index 1e1bb167e2a1aad5dc12b6be510028361f083e50..098eb70e6f0fa46f2fff02c0cd9ab19f95ba0d17 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/TestUtils.java @@ -1,5 +1,11 @@ package de.ozgcloud.alfa.common; +import static org.mockito.Mockito.*; + +import java.util.List; +import java.util.function.Consumer; +import java.util.stream.Stream; + public class TestUtils { public static final String UUID_REGEX = "[0-9a-f]{8,8}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{4,4}-[0-9a-f]{12,12}"; @@ -8,4 +14,9 @@ public class TestUtils { return String.format("^%s%s$", UUID_REGEX, suffix); } + public static <T> void mockStreamToList(List<T> list, Consumer<Stream<T>> mock) { + var mockStream = mock(Stream.class); + when(mockStream.toList()).thenReturn(list); + mock.accept(mockStream); + } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..8baf8b26e6691208b3c292c1189a4d04a34bab87 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/VersionTypeTestFactory.java @@ -0,0 +1,12 @@ +package de.ozgcloud.alfa.common; + +import de.xoev.xdomea.VersionType; + +public class VersionTypeTestFactory { + + public static VersionType create() { + var versionType = new VersionType(); + versionType.getFormat().add(FormTypeTestFactory.create()); + return versionType; + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeCreatorTest.java deleted file mode 100644 index 7efbe6cbcca7da55609df8d49d136d518d106134..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeCreatorTest.java +++ /dev/null @@ -1,69 +0,0 @@ -package de.ozgcloud.alfa.export; - -import static org.assertj.core.api.Assertions.*; - -import java.util.List; - -import org.junit.jupiter.api.Test; - -import de.xoev.xdomea.AkteType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.NkAbgabeType; -import de.xoev.xdomea.VorgangType; - -public class AbgabeCreatorTest { - - private final AbgabeCreator abgabeCreator = AbgabeCreator.createAbgabeCreator(); - private final NkAbgabeType kopfType = new NkAbgabeType(); - private final VorgangType vorgangType = new VorgangType(); - private final List<DokumentType> dokumentTypes = List.of(new DokumentType(), new DokumentType()); - - @Test - void shouldSetKopf() { - var abgabeType = abgabeCreator.withKopf(kopfType).create(); - - assertThat(abgabeType.getKopf()).isEqualTo(kopfType); - } - - @Test - void shoulAddOneSchriftgutobjekt() { - var abgabeType = abgabeCreator.withVorgang(vorgangType).create(); - - assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(1); - } - - @Test - void shouldAddOnlyOneSchriftgutobjekt() { - var abgabeType = abgabeCreator.withVorgang(vorgangType).withVorgang(vorgangType).create(); - - assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(1); - } - - @Test - void shouldSetVorgang() { - var abgabeType = abgabeCreator.withVorgang(vorgangType).create(); - - assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang()).isEqualTo(vorgangType); - } - - @Test - void shouldAddDokumentTypes() { - var abgabeType = abgabeCreator.withVorgang(vorgangType).withDokumentTypes(dokumentTypes.stream()).create(); - - assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(dokumentTypes); - } - - @Test - void shouldThrowExceptionIfVorgangNotSet() { - assertThatThrownBy(() -> abgabeCreator.withDokumentTypes(dokumentTypes.stream())).isExactlyInstanceOf(IllegalStateException.class); - } - - @Test - void shouldSetAkteType() { - var akteType = new AkteType(); - - var abgabeType = abgabeCreator.withAkteType(akteType).create(); - - assertThat(abgabeType.getSchriftgutobjekt().get(0).getAkte()).isEqualTo(akteType); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..a13852e5a7eb4ad6cf42af49f7cf983d81a0e8a1 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AkteTypeTestFactory.java @@ -0,0 +1,10 @@ +package de.ozgcloud.alfa.export; + +import de.xoev.xdomea.AkteType; + +public class AkteTypeTestFactory { + + public static AkteType create() { + return new AkteType(); + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java index ea207d98c6d2ef4494aaf13ed8766a35124bf780..4dc62c958303b3a467bd9c32a432df417fcdab87 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportConfigurationTest.java @@ -5,6 +5,8 @@ import static org.mockito.Mockito.*; import java.util.Map; +import jakarta.xml.bind.Marshaller; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -13,8 +15,6 @@ import org.mockito.Mock; import org.mockito.Spy; import org.springframework.oxm.jaxb.Jaxb2Marshaller; -import jakarta.xml.bind.Marshaller; - class ExportConfigurationTest { @Spy @@ -22,7 +22,7 @@ class ExportConfigurationTest { private ExportConfiguration configuration; @Mock - private XDomeaNamespacePrefixMapper prefixMapper; + private XdomeaNamespacePrefixMapper prefixMapper; @Nested class TestCreateMarshallerProperties { diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java index 4843d830ed6dc1f31db0b27359c2352c9bcf6d90..b6b8549770ace6c03514451fc6a5ab115af2b50f 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportDataTestFactory.java @@ -1,6 +1,6 @@ package de.ozgcloud.alfa.export; -import java.util.stream.Stream; +import java.util.List; import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.common.file.OzgFileTestFactory; @@ -20,6 +20,6 @@ class ExportDataTestFactory { return ExportData.builder() .exportFilename(EXPORT_FILENAME) .abgabe(ABGABE) - .exportFiles(Stream.of(OZG_FILE)); + .exportFiles(List.of(OZG_FILE)); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java index 229903bef4f56342d5e68f432ac0d03814aa6055..1b85ad584d8f2bea60f283e6f20be763731173de 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFilenameGeneratorTest.java @@ -3,11 +3,11 @@ package de.ozgcloud.alfa.export; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import org.junit.jupiter.api.AfterEach; 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 org.mockito.MockedStatic; import de.ozgcloud.alfa.common.ExportFilenameGenerator; import de.ozgcloud.alfa.common.TestUtils; @@ -17,11 +17,7 @@ import de.ozgcloud.alfa.common.file.OzgFileTestFactory; class ExportFilenameGeneratorTest { - @InjectMocks - private ExportFilenameGenerator generator; - - @Mock - private UUIDConverter uuidConverter; + private MockedStatic<UUIDConverter> uuidConverter; @Nested class TestGenerateExportFilename { @@ -32,14 +28,20 @@ class ExportFilenameGeneratorTest { @BeforeEach void init() { - when(uuidConverter.fromObjectId(ozgFile.getId().toString())).thenReturn(UUID); + uuidConverter = mockStatic(UUIDConverter.class); + uuidConverter.when(() -> UUIDConverter.fromObjectId(ozgFile.getId().toString())).thenReturn(UUID); + } + + @AfterEach + void cleanup() { + uuidConverter.close(); } @Test void shouldConvertObjectId() { callGenerator(); - verify(uuidConverter).fromObjectId(ozgFile.getId().toString()); + uuidConverter.verify(() -> UUIDConverter.fromObjectId(ozgFile.getId().toString())); } @Test @@ -50,7 +52,7 @@ class ExportFilenameGeneratorTest { } private String callGenerator() { - return generator.generateExportFilename(ozgFile); + return ExportFilenameGenerator.generateExportFilename(ozgFile); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java index 7f5909d46e0d2f6570859326f88c4d9990a8d869..de5eb64ef80434dd12d08b42bae0f0e8008c9bb9 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceITCase.java @@ -6,8 +6,8 @@ import static org.mockito.Mockito.*; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.util.HexFormat; -import java.util.List; import java.util.UUID; +import java.util.stream.Stream; import org.apache.commons.lang3.RandomStringUtils; import org.junit.jupiter.api.BeforeEach; @@ -21,6 +21,8 @@ import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.common.file.OzgFileTestFactory; import de.ozgcloud.alfa.file.ExportFileService; import de.ozgcloud.alfa.vorgang.ExportVorgangService; +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; import de.ozgcloud.common.test.ITCase; @@ -37,16 +39,20 @@ class ExportServiceITCase { @Nested class TestWriteExport { + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + @BeforeEach void setup() { - doReturn(VorgangWithEingangTestFactory.create()).when(exportVorgangService).getVorgang(anyString()); - doReturn(List.of(createOzgFile())).when(exportFileService).getAllPdfs(anyString()); + doReturn(vorgang).when(exportVorgangService).getVorgang(VorgangHeaderTestFactory.ID); + doReturn(Stream.of(createOzgFile())).when(exportFileService).getRepresentations(vorgang); + doReturn(Stream.of(createOzgFile())).when(exportFileService).getAttachments(vorgang); doNothing().when(exportFileService).writeOzgFile(any(), any()); } @Test void shouldNotThrowException() { - assertDoesNotThrow(() -> exportService.writeExport(UUID.randomUUID().toString(), UUID.randomUUID().toString(), new ByteArrayOutputStream())); + assertDoesNotThrow( + () -> exportService.writeExport(VorgangHeaderTestFactory.ID, UUID.randomUUID().toString(), new ByteArrayOutputStream())); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java index 5cb5123e7fb35b8ec94ae9a8a4c42a634e4e80c8..d1e6e41a4bc5354cd9891f94900baef47c35d54d 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java @@ -1,7 +1,7 @@ package de.ozgcloud.alfa.export; -import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static de.ozgcloud.alfa.common.TestUtils.*; +import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -11,7 +11,6 @@ import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.UUID; -import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -36,6 +35,7 @@ import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.EingangTestFactory; import de.ozgcloud.alfa.vorgang.ExportVorgangService; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangTypeTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; import de.ozgcloud.common.errorhandling.TechnicalException; @@ -53,7 +53,7 @@ class ExportServiceTest { private ExportService service; @Mock - private XDomeaXmlMarshaller XDomeaXmlMarshaller; + private XdomeaXmlMarshaller xdomeaXmlMarshaller; @Mock private ExportFileService exportFileService; @@ -61,9 +61,6 @@ class ExportServiceTest { @Mock private ExportVorgangService exportVorgangService; - @Mock - private ExportFilenameGenerator exportFilenameGenerator; - @DisplayName("Write exportToXdomea") @Nested class TestWriteExport { @@ -111,38 +108,66 @@ class ExportServiceTest { @Nested class TestCollectExportData { + private MockedStatic<XdomeaNachrichtBuilder> xdomeaNachrichtBuilderMockedStatic; + private static final String FILENAME_ID = UUID.randomUUID().toString(); private static final String FILE_NAME = "file.zip"; private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final VorgangType vorgangType = new VorgangType(); - private final NkAbgabeType kopfType = new NkAbgabeType(); - private final Stream<OzgFile> ozgFiles = Stream.of(OzgFileTestFactory.create()); - private final Stream<DokumentType> dokumentTypes = Stream.of(DokumentTypeTestFactory.create()); - private final AbgabeAbgabe0401 abgabeAbgabe0401 = AbgabeAbgabe0401TestFactory.create(); - - private MockedStatic<AbgabeCreator> abgabeCreatorStatic; + private final VorgangType vorgangType = VorgangTypeTestFactory.create(); + private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create(); + private final AbgabeAbgabe0401 abgabe = AbgabeAbgabe0401TestFactory.create(); + private final AkteType akteType = AkteTypeTestFactory.create(); + private final List<OzgFile> representations = List.of(OzgFileTestFactory.create()); + private final List<OzgFile> attachments = List.of(OzgFileTestFactory.create()); + private final List<DokumentType> representationsDokumentTypes = List.of(DokumentTypeTestFactory.create()); + private final List<DokumentType> attachmentsDokumentTypes = List.of(DokumentTypeTestFactory.create()); - @Spy - private AbgabeCreator abgabeCreator; + @Mock + private XdomeaNachrichtBuilder xdomeaNachrichtBuilder; @BeforeEach void setUp() { - when(exportVorgangService.getVorgang(any())).thenReturn(vorgang); - when(exportVorgangService.createVorgangType(any())).thenReturn(vorgangType); - when(exportVorgangService.createKopf(any())).thenReturn(kopfType); - List<OzgFile> ozgFileList = mock(List.class); - when(ozgFileList.stream()).thenReturn(ozgFiles); - when(exportFileService.getAllPdfs(any())).thenReturn(ozgFileList); - when(exportFileService.createDokumentTypes(any(), any())).thenReturn(dokumentTypes); - doReturn(FILE_NAME).when(service).buildXmlFilename(any()); - abgabeCreatorStatic = mockStatic(AbgabeCreator.class); - abgabeCreatorStatic.when(AbgabeCreator::createAbgabeCreator).thenReturn(abgabeCreator); - doReturn(abgabeAbgabe0401).when(abgabeCreator).create(); + setUpVorgangService(); + setUpXdomeaNachrichtBuilder(); + setUpExportFileService(); + + doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID); + doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang); + + } + + private void setUpVorgangService() { + when(exportVorgangService.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); + when(exportVorgangService.createVorgangType(vorgang)).thenReturn(vorgangType); + when(exportVorgangService.createKopf(vorgang)).thenReturn(kopfType); + when(exportVorgangService.createAkteType(vorgang)).thenReturn(akteType); + } + + private void setUpXdomeaNachrichtBuilder() { + xdomeaNachrichtBuilderMockedStatic = mockStatic(XdomeaNachrichtBuilder.class); + when(xdomeaNachrichtBuilder.withKopf(kopfType)).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.withVorgang(vorgangType)).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.withAktenzeichen(akteType)).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.withRepresentations(representationsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.withAttachments(attachmentsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); + xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe); + } + + private void setUpExportFileService() { + mockStreamToList(representations, stream -> when(exportFileService.getRepresentations(vorgang)).thenReturn(stream)); + mockStreamToList(attachments, stream -> when(exportFileService.getAttachments(vorgang)).thenReturn(stream)); + mockStreamToList(representationsDokumentTypes, + stream -> + when(exportFileService.createDokumentTypes(representations, EingangHeaderTestFactory.FORM_ENGINE_NAME)) + .thenReturn(stream)); + mockStreamToList(attachmentsDokumentTypes, stream -> + when(exportFileService.createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(stream)); } @AfterEach - void cleanup() { - abgabeCreatorStatic.close(); + void tearDown() { + xdomeaNachrichtBuilderMockedStatic.close(); } @Test @@ -160,10 +185,17 @@ class ExportServiceTest { } @Test - void shouldGetPdfFiles() { + void shouldGetRepresentations() { callService(); - verify(exportFileService).getAllPdfs(EingangTestFactory.ID); + verify(exportFileService).getRepresentations(vorgang); + } + + @Test + void shouldGetAttachments() { + callService(); + + verify(exportFileService).getAttachments(vorgang); } @Test @@ -181,10 +213,17 @@ class ExportServiceTest { } @Test - void shouldCreateDokumentTypes() { + void shouldCreateRepresentationsDokumentTypes() { callService(); - verify(exportFileService).createDokumentTypes(ozgFiles, EingangHeaderTestFactory.FORM_ENGINE_NAME); + verify(exportFileService).createDokumentTypes(representations, EingangHeaderTestFactory.FORM_ENGINE_NAME); + } + + @Test + void shouldCreateAttachmentsDokumentTypes() { + callService(); + + verify(exportFileService).createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME); } @Test @@ -198,45 +237,49 @@ class ExportServiceTest { void shouldSetKopf() { callService(); - verify(abgabeCreator).withKopf(kopfType); + verify(xdomeaNachrichtBuilder).withKopf(kopfType); } @Test void shouldSetVorgang() { callService(); - verify(abgabeCreator).withVorgang(vorgangType); + verify(xdomeaNachrichtBuilder).withVorgang(vorgangType); } @Test - void shouldSetDokumentTypes() { + void shouldSetRepresentations() { callService(); - verify(abgabeCreator).withDokumentTypes(dokumentTypes); + verify(xdomeaNachrichtBuilder).withRepresentations(representationsDokumentTypes); } @Test - void shouldSetAkteType() { - var akteType = new AkteType(); - when(exportVorgangService.createAkteType(vorgang)).thenReturn(akteType); + void shouldSetAttachments() { + callService(); + verify(xdomeaNachrichtBuilder).withAttachments(attachmentsDokumentTypes); + } + + @Test + void shouldSetAktenzeichen() { callService(); - verify(abgabeCreator).withAkteType(akteType); + verify(xdomeaNachrichtBuilder).withAktenzeichen(akteType); } @Test void shouldCreateAbgabe() { callService(); - verify(abgabeCreator).create(); + verify(xdomeaNachrichtBuilder).build(); } @Test void shouldContainAbgabe() { var exportData = callService(); - assertThat(exportData.getAbgabe()).isEqualTo(abgabeAbgabe0401); + assertThat(exportData.getAbgabe()).isEqualTo(abgabe); } @Test @@ -250,13 +293,16 @@ class ExportServiceTest { void shouldContainExportExportFiles() { var exportData = callService(); - assertThat(exportData.getExportFiles()).isEqualTo(ozgFiles); + assertThat(exportData.getExportFiles()) + .hasSize(2) + .containsAll(representations) + .containsAll(attachments); + } private ExportData callService() { return service.collectExportData(VorgangHeaderTestFactory.ID, FILENAME_ID); } - } @DisplayName("Build xml Filename") @@ -279,14 +325,14 @@ class ExportServiceTest { @BeforeEach void init() { - when(XDomeaXmlMarshaller.marshal(any())).thenReturn(XML_STRING); + when(xdomeaXmlMarshaller.marshal(any())).thenReturn(XML_STRING); } @Test void shouldCallXmlMarshaller() { callService(); - verify(XDomeaXmlMarshaller).marshal(ExportDataTestFactory.ABGABE); + verify(xdomeaXmlMarshaller).marshal(ExportDataTestFactory.ABGABE); } @Test @@ -420,6 +466,8 @@ class ExportServiceTest { @Nested class TestPutOzgFileIntoZip { + private MockedStatic<ExportFilenameGenerator> exportFilenameGenerator; + @Mock private ZipOutputStream zipOutputStream; @@ -430,14 +478,20 @@ class ExportServiceTest { @BeforeEach void setUp() { - when(exportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(OzgFileTestFactory.NAME); + exportFilenameGenerator = mockStatic(ExportFilenameGenerator.class); + exportFilenameGenerator.when(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(OzgFileTestFactory.NAME); + } + + @AfterEach + void cleanUp() { + exportFilenameGenerator.close(); } @Test void shouldGenerateExportFilename() { callService(); - verify(exportFilenameGenerator).generateExportFilename(ozgFile); + exportFilenameGenerator.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)); } @SneakyThrows @@ -470,4 +524,35 @@ class ExportServiceTest { } } + + @Nested + class TestGetFormEngineName { + + @Test + void shouldReturnEmptyStringOnNullEingang() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); + + var formEngineName = service.getFormEngineName(vorgang); + + assertThat(formEngineName).isEmpty(); + } + + @Test + void shouldReturnEmptyStringOnNullEingangHeader() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().header(null).build()).build(); + + var formEngineName = service.getFormEngineName(vorgang); + + assertThat(formEngineName).isEmpty(); + } + + @Test + void shouldReturnFormEngineName() { + VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + + var formEngineName = service.getFormEngineName(vorgang); + + assertThat(formEngineName).isEqualTo(EingangHeaderTestFactory.FORM_ENGINE_NAME); + } + } } \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java index 23b527f9e770d1eb366469f71889ac5ac4a2e6e5..61ee1269d53784bb31df5c85fdc192c667cdf338 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportVorgangControllerTest.java @@ -70,7 +70,7 @@ class ExportVorgangControllerTest { } @Test - void shouldCallXDomeaService() throws Exception { + void shouldCallXdomeaService() throws Exception { doRequest(); verify(xDomeaService).writeExport(eq(VorgangHeaderTestFactory.ID), filenameIdArgumentCaptor.capture(), any()); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java index 9a57bd3ac67e6c24087658c88e978b2de2bfc757..1261762b14a1ae7278b4489016faef0187f53374 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NamespacePrefixMapperTest.java @@ -9,17 +9,17 @@ import org.junit.jupiter.api.Test; class NamespacePrefixMapperTest { - private XDomeaNamespacePrefixMapper prefixMapper = new XDomeaNamespacePrefixMapper(); + private XdomeaNamespacePrefixMapper prefixMapper = new XdomeaNamespacePrefixMapper(); @DisplayName("Get preferred prefix") @Nested class TestGetPreferredPrefix { @Test - void shouldReturnXDomeaPrefix() { - var prefix = prefixMapper.getPreferredPrefix(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_URI, StringUtils.EMPTY, false); + void shouldReturnXdomeaPrefix() { + var prefix = prefixMapper.getPreferredPrefix(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_URI, StringUtils.EMPTY, false); - assertThat(prefix).isEqualTo(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_PREFIX); + assertThat(prefix).isEqualTo(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_PREFIX); } @Test @@ -45,28 +45,28 @@ class NamespacePrefixMapperTest { void shouldContainsDinspec() { var uris = prefixMapper.getPreDeclaredNamespaceUris(); - assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_DINSPEC_URI); + assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_DINSPEC_URI); } @Test void shouldContainsGml() { var uris = prefixMapper.getPreDeclaredNamespaceUris(); - assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_GML_URI); + assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_GML_URI); } @Test void shouldContainsXoevCode() { var uris = prefixMapper.getPreDeclaredNamespaceUris(); - assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_CODE_URI); + assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_CODE_URI); } @Test void shouldContainsXoevLx() { var uris = prefixMapper.getPreDeclaredNamespaceUris(); - assertThat(uris).contains(XDomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_LC_URI); + assertThat(uris).contains(XdomeaNamespacePrefixMapper.XDOMEA_NAMESPACE_XOEV_LC_URI); } } } \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..e93a73419cc57dd0da460c220fe2e5fcaa7d3fa9 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/NkAbgabeTypeTestFactory.java @@ -0,0 +1,11 @@ +package de.ozgcloud.alfa.export; + +import de.xoev.xdomea.NkAbgabeType; + +public class NkAbgabeTypeTestFactory { + + public static NkAbgabeType create() { + return new NkAbgabeType(); + } + +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java index 27a76cf3903e7932b0e713159ad1a14730f891fe..f3da0c5f65cf046199af868553c39e19c413ce03 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java @@ -4,29 +4,25 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; import de.ozgcloud.alfa.common.TestUtils; import de.ozgcloud.alfa.common.UUIDConverter; class UUIDConverterTest { - @InjectMocks - private UUIDConverter converter; - @Nested class TestFromObjectId { @Test void shouldReturnUUID() { - var result = converter.fromObjectId("64a820d36285172ac02826d0"); + var result = UUIDConverter.fromObjectId("64a820d36285172ac02826d0"); assertThat(result).isEqualTo("64a820d3-6285-172a-c028-0000000026d0").matches(TestUtils.UUID_REGEX); } @Test void shouldThrowIllegalArgumentException() { - assertThatThrownBy(() -> converter.fromObjectId("abc")).isInstanceOf(IllegalArgumentException.class); + assertThatThrownBy(() -> UUIDConverter.fromObjectId("abc")).isInstanceOf(IllegalArgumentException.class); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e68698cd40f973d31472f1388373e50c531a3b52 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilderTest.java @@ -0,0 +1,56 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import de.ozgcloud.alfa.vorgang.VorgangTypeTestFactory; +import de.xoev.xdomea.DokumentType; +import de.xoev.xdomea.NkAbgabeType; +import de.xoev.xdomea.VorgangType; + +class XdomeaNachrichtBuilderTest { + + private final NkAbgabeType kopfType = NkAbgabeTypeTestFactory.create(); + private final VorgangType vorgangType = VorgangTypeTestFactory.create(); + private final List<DokumentType> representations = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create()); + private final List<DokumentType> attachments = List.of(DokumentTypeTestFactory.create(), DokumentTypeTestFactory.create()); + private final XdomeaNachrichtBuilder builder = XdomeaNachrichtBuilder.builder().withVorgang(vorgangType); + + @Test + void shoulAddOneSchriftgutobjekt() { + var abgabeType = builder.build(); + + assertThat(abgabeType.getSchriftgutobjekt()).size().isEqualTo(1); + } + + @Test + void shouldSetVorgang() { + var abgabeType = builder.build(); + + assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang()).isEqualTo(vorgangType); + } + + @Test + void shouldSetKopf() { + var abgabeType = builder.withKopf(kopfType).build(); + + assertThat(abgabeType.getKopf()).isEqualTo(kopfType); + } + + @Test + void shouldAddRepresentations() { + var abgabeType = builder.withRepresentations(representations).build(); + + assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(representations); + } + + @Test + void shouldAddAttachments() { + var abgabeType = builder.withAttachments(attachments).build(); + + assertThat(abgabeType.getSchriftgutobjekt().get(0).getVorgang().getDokument()).isEqualTo(attachments); + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java index ee8e68383fa4ee146e1d4136a17e7c965f484581..47e3c97c8f8bb27670b5bcde0b25a82700cb1148 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XmlMarshallerTest.java @@ -23,7 +23,7 @@ class XmlMarshallerTest { @Spy @InjectMocks - private XDomeaXmlMarshaller XDomeaXmlMarshaller; + private XdomeaXmlMarshaller xdomeaXmlMarshaller; @Mock private Jaxb2Marshaller marshaller; @@ -38,7 +38,7 @@ class XmlMarshallerTest { @Test void shouldMarshal() { - XDomeaXmlMarshaller.marshal(abgabe); + xdomeaXmlMarshaller.marshal(abgabe); verify(marshaller).marshal(eq(abgabe), streamResultArgumentCaptor.capture()); assertThat(streamResultArgumentCaptor.getValue().getWriter()).isInstanceOf(StringWriter.class); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java new file mode 100644 index 0000000000000000000000000000000000000000..332cfc515421594b8613b79ce54b31effcf7ec04 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java @@ -0,0 +1,304 @@ +package de.ozgcloud.alfa.file; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.apache.commons.lang3.RandomUtils; +import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.Mock; +import org.mockito.MockedStatic; + +import de.ozgcloud.alfa.common.DateiformatCode; +import de.ozgcloud.alfa.common.FormTypeTestFactory; +import de.ozgcloud.alfa.common.PrimaerdokumentTypeBuilder; +import de.ozgcloud.alfa.common.PrimaerdokumentTypeTestFactory; +import de.ozgcloud.alfa.common.TestUtils; +import de.ozgcloud.alfa.common.UUIDConverter; +import de.ozgcloud.alfa.common.VersionTypeTestFactory; +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; +import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory; +import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; +import de.xoev.xdomea.AllgemeineMetadatenType; +import de.xoev.xdomea.FormatType; +import de.xoev.xdomea.IdentifikationObjektType; +import de.xoev.xdomea.PrimaerdokumentType; +import de.xoev.xdomea.VersionType; + +class DokumentTypeBuilderTest { + + private static final Long DOKUMENT_ORDINAL_NUMBER = RandomUtils.nextLong(); + private static final String FORM_ENGINE_NAME = "DUMMY_NAME"; + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + private final DokumentTypeBuilder builder = spy(DokumentTypeBuilder.builder() + .withOzgFile(ozgFile) + .withFormEngineName(FORM_ENGINE_NAME) + .withOrdinalNumber(DOKUMENT_ORDINAL_NUMBER)); + + private MockedStatic<UUIDConverter> uuidConverter; + + @BeforeEach + void init() { + uuidConverter = mockStatic(UUIDConverter.class); + } + + @AfterEach + void cleanup() { + uuidConverter.close(); + } + + @Nested + class TestBuild { + + private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); + private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); + private final VersionType versionType = VersionTypeTestFactory.create(); + private final PrimaerdokumentType primaerdokument = PrimaerdokumentTypeTestFactory.create(); + + @BeforeEach + void setUp() { + doReturn(identifikationObjekt).when(builder).createIdentifikation(); + doReturn(versionType).when(builder).createVersionType(); + doReturn(allgemeineMetadaten).when(builder).createAllgemeineMetadaten(); + doReturn(primaerdokument).when(builder).createPrimaerdokument(); + } + + @Test + void shouldCreateIdentifikation() { + builder.build(); + + verify(builder).createIdentifikation(); + } + + @Test + void shouldHaveIdentifikation() { + var dokument = builder.build(); + + assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjekt); + } + + @Test + void shouldCreateAllgemeineMetadaten() { + builder.build(); + + verify(builder).createAllgemeineMetadaten(); + } + + @Test + void shouldHaveAllgemeineMetadaten() { + var dokument = builder.build(); + + assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten); + } + + @Test + void shouldCreateVersion() { + builder.build(); + + verify(builder).createVersionType(); + } + + @Test + void shouldHaveVersion() { + var dokumentType = builder.build(); + + assertThat(dokumentType.getVersion()).containsExactly(versionType); + } + + @Test + void shouldCreatePrimaerdokument() { + builder.build(); + + verify(builder).createPrimaerdokument(); + } + + @Test + void shouldHavePrimaerdokument() { + var dokument = builder.build(); + + assertThat(dokument.getVersion().get(0).getFormat().get(0).getPrimaerdokument()).isEqualTo(primaerdokument); + } + + } + + @Nested + class TestCreateIdentifikation { + + private final String FILE_UUID = "64a820d3-6285-172a-c028-0000000026d0"; + + @BeforeEach + void init() { + uuidConverter.when(() -> UUIDConverter.fromObjectId(OzgFileTestFactory.ID.toString())).thenReturn(FILE_UUID); + } + + @Test + void shouldConvertObjectId() { + builder.createIdentifikation(); + + uuidConverter.verify(() -> UUIDConverter.fromObjectId(OzgFileTestFactory.ID.toString())); + } + + @Test + void shouldHaveId() { + var identifikation = builder.createIdentifikation(); + + assertThat(identifikation.getID()).matches(TestUtils.UUID_REGEX).isEqualTo(FILE_UUID); + } + + @Test + void shouldHaveNummerImUebergeordnetenContainer() { + var identifikation = builder.createIdentifikation(); + + assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(DOKUMENT_ORDINAL_NUMBER); + } + } + + @Nested + class TestCreateAllgemeineMetadaten { + + @Test + void shouldHaveBetreff() { + var allgemeineMetadaten = builder.createAllgemeineMetadaten(); + + assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(OzgFileTestFactory.NAME); + } + + @Test + void shouldHaveEmptyKennzeichen() { + var allgemeineMetadaten = builder.createAllgemeineMetadaten(); + + assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty(); + } + + @Test + void shouldHaveEmptyBemerkung() { + var allgemeineMetadaten = builder.createAllgemeineMetadaten(); + + assertThat(allgemeineMetadaten.getBemerkung()).isEmpty(); + } + + @Test + void shouldHaveMedium() { + var allgemeineMetadaten = builder.createAllgemeineMetadaten(); + + assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(DokumentTypeBuilder.ALLGEMEINE_METADATEN_MEDIUM_CODE); + } + + } + + @Nested + class TestCreateFormatType { + + @Test + void shouldHaveName() { + var formatType = builder.createFormatType(); + + assertThat(formatType.getName().getCode()).isEqualTo(DateiformatCode.PDF.getCode()); + } + + @Test + void shouldHaveSonstinerNameEmptyString() { + var formatType = builder.createFormatType(); + + assertThat(formatType.getSonstigerName()).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldHaveVersionEmptyString() { + var formatType = builder.createFormatType(); + + assertThat(formatType.getVersion()).isEqualTo(StringUtils.EMPTY); + } + + } + + @Nested + class CreateVersionType { + + private final FormatType formatType = FormTypeTestFactory.create(); + + @BeforeEach + void setUp() { + doReturn(formatType).when(builder).createFormatType(); + } + + @Test + void shouldHaveNummer() { + var versionType = builder.createVersionType(); + + assertThat(versionType.getNummer()).isEqualTo(DokumentTypeBuilder.VERSION_NUMMER); + } + + @Test + void shouldCreateFormatType() { + builder.createVersionType(); + + verify(builder).createFormatType(); + } + + @Test + void shouldHaveFormat() { + var versionType = builder.createVersionType(); + + assertThat(versionType.getFormat()).first().isEqualTo(formatType); + } + } + + @Nested + class TestCreatePrimaerdokument { + + private MockedStatic<PrimaerdokumentTypeBuilder> primaerdokumentTypeBuilderMockedStatic; + @Mock + private PrimaerdokumentTypeBuilder primaerdokumentTypeBuilder; + + private final PrimaerdokumentType primaerdokumentType = PrimaerdokumentTypeTestFactory.create(); + + @BeforeEach + void setUp() { + primaerdokumentTypeBuilderMockedStatic = mockStatic(PrimaerdokumentTypeBuilder.class); + primaerdokumentTypeBuilderMockedStatic.when(PrimaerdokumentTypeBuilder::builder).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.withErsteller(FORM_ENGINE_NAME)).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.build()).thenReturn(primaerdokumentType); + } + + @AfterEach + void tearDown() { + primaerdokumentTypeBuilderMockedStatic.close(); + } + + @Test + void shouldCreatePrimaerdokumentWithOzgFile() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).withOzgFile(ozgFile); + } + + @Test + void shouldCreatePrimaerdokumentWithErsteller() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).withErsteller(FORM_ENGINE_NAME); + } + + @Test + void shouldBuildPrimaerdokument() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).build(); + } + + @Test + void shouldReturnBuildPrimaerdokument() { + var primaerdokument = builder.createPrimaerdokument(); + + assertThat(primaerdokument).isEqualTo(primaerdokument); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeCreatorTest.java deleted file mode 100644 index c2061791699c876777ec156f2958653611478847..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeCreatorTest.java +++ /dev/null @@ -1,286 +0,0 @@ -package de.ozgcloud.alfa.file; - -import static org.assertj.core.api.Assertions.*; -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.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.Spy; - -import de.ozgcloud.alfa.common.ExportFilenameGenerator; -import de.ozgcloud.alfa.common.TestUtils; -import de.ozgcloud.alfa.common.UUIDConverter; -import de.ozgcloud.alfa.common.file.OzgFile; -import de.ozgcloud.alfa.common.file.OzgFileTestFactory; -import de.ozgcloud.alfa.export.AllgemeineMetadatenTypeTestFactory; -import de.ozgcloud.alfa.export.IdentifikationObjektTypeTestFactory; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.DokumentType; -import de.xoev.xdomea.FormatType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.PrimaerdokumentType; -import de.xoev.xdomea.VersionType; - -class DokumentTypeCreatorTest { - - private static final int DOKUMENT_ORDINAL_NUMBER = 1; - private static final String FORM_ENGINE_NAME = "DUMMY_NAME"; - - private final OzgFile ozgFile = OzgFileTestFactory.create(); - private final DokumentTypeCreator.MappingData mappingData = new DokumentTypeCreator.MappingData(ozgFile, DOKUMENT_ORDINAL_NUMBER, FORM_ENGINE_NAME); - - @Spy - @InjectMocks - private DokumentTypeCreator creator; - - @Mock - private UUIDConverter uuidConverter; - - @Mock - private ExportFilenameGenerator exportFilenameGenerator; - - @Nested - class TestCreate { - - private final OzgFile ozgFile1 = OzgFileTestFactory.create(); - private final OzgFile ozgFile2 = OzgFileTestFactory.create(); - private final List<OzgFile> ozgFiles = List.of(ozgFile1, ozgFile2); - private final DokumentType dokumentType1 = new DokumentType(); - private final DokumentType dokumentType2 = new DokumentType(); - - @BeforeEach - void init() { - doReturn(dokumentType1, dokumentType2).when(creator).createDokumentType(any()); - } - - @Test - void shouldCallCreateDokumentType() { - create().toList(); // call toList() to finalize stream - - verify(creator).createDokumentType(new DokumentTypeCreator.MappingData(ozgFile1, 1, FORM_ENGINE_NAME)); - verify(creator).createDokumentType(new DokumentTypeCreator.MappingData(ozgFile2, 2, FORM_ENGINE_NAME)); - } - - @Test - void shouldReturnDocumentTypes() { - var dokumentTypes = create().toList(); - - assertThat(dokumentTypes.get(0)).isEqualTo(dokumentType1); - assertThat(dokumentTypes.get(1)).isEqualTo(dokumentType2); - } - - private Stream<DokumentType> create() { - return creator.create(ozgFiles.stream(), FORM_ENGINE_NAME); - } - } - - @Nested - class TestCreateDokumentType { - - private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); - private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); - - @BeforeEach - void init() { - doReturn(identifikationObjekt).when(creator).createIdentifikation(mappingData); - doReturn(allgemeineMetadaten).when(creator).createAllgemeineMetadaten(mappingData); - } - - @Test - void shouldCreateIdentifikation() { - create(); - - verify(creator).createIdentifikation(mappingData); - } - - @Test - void shouldHaveIdentifikation() { - var dokument = create(); - - assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjekt); - } - - @Test - void shouldCreateAllgemeineMetadaten() { - create(); - - verify(creator).createAllgemeineMetadaten(mappingData); - } - - @Test - void shouldHaveAllgemeineMetadaten() { - var dokument = create(); - - assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten); - } - - @Test - void shouldHaveVersion() { - var dokumentType = create(); - - assertThat(dokumentType.getVersion()).size().isEqualTo(1); - } - - @Nested - class TestVersion { - - @Test - void shouldHaveNummer() { - assertThat(getVersion().getNummer()).isEqualTo(DokumentTypeCreator.VERSION_NUMMER); - } - - @Test - void shouldHaveFormat() { - assertThat(getVersion().getFormat()).size().isEqualTo(1); - } - } - - @Nested - class TestFormat { - - @Test - void shouldHaveName() { - assertThat(getFormat().getName()).usingRecursiveComparison().isEqualTo(DateiformatCode.PDF.createDateiformatCodeType()); - } - - @Test - void shouldHaveSonstigerName() { - assertThat(getFormat().getSonstigerName()).isEmpty(); - } - - @Test - void shouldHaveVersion() { - assertThat(getFormat().getVersion()).isEmpty(); - } - - @Test - void shouldHavePrimaerdokument() { - assertThat(getPrimaerdokument()).isNotNull(); - } - } - - @Nested - class TestPrimaerdokument { - - @BeforeEach - void init() { - when(exportFilenameGenerator.generateExportFilename(ozgFile)).thenReturn(ozgFile.getName()); - } - - @Test - void shouldGenerateExportFilename() { - create(); - - verify(exportFilenameGenerator).generateExportFilename(ozgFile); - } - - @Test - void shouldHaveDateiname() { - assertThat(getPrimaerdokument().getDateiname()).isEqualTo(ozgFile.getName()); - } - - @Test - void shouldHaveDateinameOriginal() { - assertThat(getPrimaerdokument().getDateinameOriginal()).isEqualTo(ozgFile.getName()); - } - - @Test - void shouldHaveErsteller() { - assertThat(getPrimaerdokument().getErsteller()).isEqualTo(FORM_ENGINE_NAME); - } - - } - - private VersionType getVersion() { - return create().getVersion().get(0); - } - - private FormatType getFormat() { - return getVersion().getFormat().get(0); - } - - private PrimaerdokumentType getPrimaerdokument() { - return getFormat().getPrimaerdokument(); - } - - private DokumentType create() { - return creator.createDokumentType(mappingData); - } - } - - @Nested - class TestCreateIdentifikation { - - private final String FILE_UUID = "64a820d3-6285-172a-c028-0000000026d0"; - - @BeforeEach - void init() { - when(uuidConverter.fromObjectId(OzgFileTestFactory.ID.toString())).thenReturn(FILE_UUID); - } - - @Test - void shouldConvertObjectId() { - create(); - - verify(uuidConverter).fromObjectId(OzgFileTestFactory.ID.toString()); - } - - @Test - void shouldHaveId() { - var identifikation = create(); - - assertThat(identifikation.getID()).matches(TestUtils.UUID_REGEX).isEqualTo(FILE_UUID); - } - - @Test - void shouldHaveNummerImUebergeordnetenContainer() { - var identifikation = create(); - - assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(DOKUMENT_ORDINAL_NUMBER); - } - - private IdentifikationObjektType create() { - return creator.createIdentifikation(mappingData); - } - } - - @Nested - class TestCreateAllgemeineMetadaten { - - @Test - void shouldHaveBetreff() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData); - - assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(OzgFileTestFactory.NAME); - } - - @Test - void shouldHaveKennzeichen() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData); - - assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty(); - } - - @Test - void shouldHaveBemerkung() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData); - - assertThat(allgemeineMetadaten.getBemerkung()).isEmpty(); - } - - @Test - void shouldHaveMedium() { - var allgemeineMetadaten = creator.createAllgemeineMetadaten(mappingData); - - assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(DokumentTypeCreator.ALLGEMEINE_METADATEN_MEDIUM_CODE); - } - - } - -} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java index 4a9ad191a63a1dc143bece4ce2caf39bbaf08e25..50f934dbbf5baa61a6c341138be5981111d54d32 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/ExportFileServiceTest.java @@ -4,13 +4,16 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import java.io.OutputStream; +import java.util.List; import java.util.stream.Stream; +import org.junit.jupiter.api.AfterEach; 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 org.mockito.MockedStatic; import org.springframework.http.MediaType; import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; @@ -18,7 +21,11 @@ import de.ozgcloud.alfa.common.binaryfile.FileId; import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.common.file.OzgFileService; import de.ozgcloud.alfa.common.file.OzgFileTestFactory; +import de.ozgcloud.alfa.export.DokumentTypeTestFactory; +import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.EingangTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; +import de.xoev.xdomea.DokumentType; class ExportFileServiceTest { @@ -32,39 +39,108 @@ class ExportFileServiceTest { private BinaryFileService binaryFileService; @Nested - class TestGetAllPdfs { + class TestGetRepresentations { private final OzgFile representationPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build(); private final OzgFile representationXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build(); - private final OzgFile attachmentPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build(); - private final OzgFile attachmentXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build(); - @BeforeEach - void init() { - when(ozgFileService.getRepresentationsByEingang(EingangTestFactory.ID)).thenReturn( - Stream.of(representationPdfFile, representationXmlFile)); - when(ozgFileService.getAttachmentsByEingang(EingangTestFactory.ID)).thenReturn(Stream.of(attachmentXmlFile, attachmentPdfFile)); + @Nested + class OnAvailableVorgangData { + + @BeforeEach + void init() { + when(ozgFileService.getRepresentationsByEingang(EingangTestFactory.ID)).thenReturn( + Stream.of(representationPdfFile, representationXmlFile)); + } + + @Test + void shouldLoadRepresentations() { + service.getRepresentations(VorgangWithEingangTestFactory.create()).toList(); + + verify(ozgFileService).getRepresentationsByEingang(EingangTestFactory.ID); + } + + @Test + void shouldReturnPdfs() { + var representations = service.getRepresentations(VorgangWithEingangTestFactory.create()); + + assertThat(representations).hasSize(1).containsExactlyInAnyOrder(representationPdfFile); + } } - @Test - void shouldLoadRepresentations() { - service.getAllPdfs(EingangTestFactory.ID); + @Nested + class OnMissingVorgangData { + + @Test + void shouldReturnEmptyOnMissingEingang() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); + + var representations = service.getRepresentations(vorgang); + + assertThat(representations).isEmpty(); + } + + @Test + void shouldReturnEmptyOnMissingEingangId() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().id(null).build()).build(); + + var representations = service.getRepresentations(vorgang); + + assertThat(representations).isEmpty(); + } - verify(ozgFileService).getRepresentationsByEingang(EingangTestFactory.ID); } - @Test - void shouldLoadAttachments() { - service.getAllPdfs(EingangTestFactory.ID); + } + + @Nested + class TestGetAttachments { + + private final OzgFile attachmentPdfFile = OzgFileTestFactory.createBuilder().contentType(MediaType.APPLICATION_PDF_VALUE).build(); + private final OzgFile attachmentXmlFile = OzgFileTestFactory.createBuilder().contentType(MediaType.TEXT_XML_VALUE).build(); + + @Nested + class OnAvailableVorgangData { + + @BeforeEach + void init() { + when(ozgFileService.getAttachmentsByEingang(EingangTestFactory.ID)).thenReturn(Stream.of(attachmentXmlFile, attachmentPdfFile)); + } - verify(ozgFileService).getAttachmentsByEingang(EingangTestFactory.ID); + @Test + void shouldLoadAttachments() { + service.getAttachments(VorgangWithEingangTestFactory.create()).toList(); + + verify(ozgFileService).getAttachmentsByEingang(EingangTestFactory.ID); + } + + @Test + void shouldReturnPdfs() { + var ozgFiles = service.getAttachments(VorgangWithEingangTestFactory.create()); + + assertThat(ozgFiles).hasSize(1).containsExactlyInAnyOrder(attachmentPdfFile); + } } - @Test - void shouldReturnPdfs() { - var ozgFiles = service.getAllPdfs(EingangTestFactory.ID); + @Nested + class OnMissingVorgangData { + @Test + void shouldReturnEmptyOnMissingEingang() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); + + var attachments = service.getAttachments(vorgang); + + assertThat(attachments).isEmpty(); + } + + @Test + void shouldReturnEmptyOnMissingEingangId() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().id(null).build()).build(); + + var attachments = service.getAttachments(vorgang); - assertThat(ozgFiles).hasSize(2).containsExactlyInAnyOrder(attachmentPdfFile, representationPdfFile); + assertThat(attachments).isEmpty(); + } } } @@ -84,4 +160,67 @@ class ExportFileServiceTest { } } + @Nested + class TestCreateDokumentType { + + private MockedStatic<DokumentTypeBuilder> dokumentTypeBuilderMockedStatic; + + @Mock + private DokumentTypeBuilder dokumentTypeBuilder; + + private final OzgFile ozgFile = OzgFileTestFactory.create(); + private final DokumentType dokumentType = DokumentTypeTestFactory.create(); + + @BeforeEach + void setUp() { + dokumentTypeBuilderMockedStatic = mockStatic(DokumentTypeBuilder.class); + dokumentTypeBuilderMockedStatic.when(DokumentTypeBuilder::builder).thenReturn(dokumentTypeBuilder); + + when(dokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(dokumentTypeBuilder); + when(dokumentTypeBuilder.withOrdinalNumber(1L)).thenReturn(dokumentTypeBuilder); + when(dokumentTypeBuilder.withFormEngineName(EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(dokumentTypeBuilder); + when(dokumentTypeBuilder.build()).thenReturn(dokumentType); + } + + @AfterEach + void tearDown() { + dokumentTypeBuilderMockedStatic.close(); + } + + @Test + void shouldBuild() { + service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); + + verify(dokumentTypeBuilder).build(); + } + + @Test + void shouldSetOzgFile() { + service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); + + verify(dokumentTypeBuilder).withOzgFile(ozgFile); + } + + @Test + void shouldSetOrdinalNumber() { + service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); + + verify(dokumentTypeBuilder).withOrdinalNumber(1L); + } + + @Test + void shouldSetFormEngineName() { + service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME).toList(); + + verify(dokumentTypeBuilder).withFormEngineName(EingangHeaderTestFactory.FORM_ENGINE_NAME); + } + + @Test + void shouldReturnDokumentTypes() { + var dokumentTypes = service.createDokumentTypes(List.of(ozgFile), EingangHeaderTestFactory.FORM_ENGINE_NAME); + + assertThat(dokumentTypes).containsExactly(dokumentType); + } + } + } \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/VersionTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/VersionTypeTestFactory.java deleted file mode 100644 index 66ab10bf99d38d853a0d6ccb6716fcd45ad3d9e0..0000000000000000000000000000000000000000 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/VersionTypeTestFactory.java +++ /dev/null @@ -1,10 +0,0 @@ -package de.ozgcloud.alfa.file; - -import de.xoev.xdomea.VersionType; - -class VersionTypeTestFactory { - - public static VersionType create() { - return new VersionType(); - } -} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java index de427e7c0ae4f5de644f8f737f2dbcb0fbd4dc49..637eabe623a23b20161a6acf1cd103839c1bb3f1 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java @@ -35,8 +35,6 @@ class FormDataMapperTest { @Mock private DatatypeMapper datatypeMapper; - @Mock - private DateConverter dateConverter; @Nested class TestToAntragsdaten { @@ -451,11 +449,13 @@ class FormDataMapperTest { @Test void shouldFormatDateTimeType() { - var dateTime = ZonedDateTime.now(); + try (var dateConverter = mockStatic(DateConverter.class)) { + var dateTime = ZonedDateTime.now(); - formDataMapper.formatValue(DatatypeType.DATETIME, dateTime); + formDataMapper.formatValue(DatatypeType.DATETIME, dateTime); - verify(dateConverter).toXmlGregorianCalendar(dateTime); + dateConverter.verify(() -> DateConverter.toXmlGregorianCalendar(dateTime)); + } } @Test diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java index c232ce356b7fd6f9ee86d0ad17b05cf7d3349e4b..f049b71e5ebbd7159c692ed3a945ca033b8b29d8 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KontaktTypeCreatorTest.java @@ -1,16 +1,19 @@ package de.ozgcloud.alfa.vorgang; import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import java.util.Optional; import javax.xml.datatype.XMLGregorianCalendar; +import org.junit.jupiter.api.AfterEach; 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 org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.Spy; @@ -28,9 +31,6 @@ class KontaktTypeCreatorTest { @Mock private NameNatuerlichePersonTypeCreator nameNatuerlichePersonTypeCreator; - @Mock - private DateConverter dateConverter; - @Nested class TestCreate { @@ -42,8 +42,8 @@ class KontaktTypeCreatorTest { @BeforeEach void setUp() { - Mockito.doReturn(Optional.of(vorgang.getEingang().getAntragsteller())).when(creator).getAntragstellerIfHasRequiredData(vorgang); - Mockito.doReturn(kontaktType).when(creator).toKontaktType(vorgang.getEingang().getAntragsteller()); + doReturn(Optional.of(vorgang.getEingang().getAntragsteller())).when(creator).getAntragstellerIfHasRequiredData(vorgang); + doReturn(kontaktType).when(creator).toKontaktType(vorgang.getEingang().getAntragsteller()); } @Test @@ -77,7 +77,7 @@ class KontaktTypeCreatorTest { @BeforeEach void setUp() { - Mockito.doReturn(Optional.empty()).when(creator).getAntragstellerIfHasRequiredData(vorgang); + doReturn(Optional.empty()).when(creator).getAntragstellerIfHasRequiredData(vorgang); } @Test @@ -98,6 +98,7 @@ class KontaktTypeCreatorTest { @Mock private XMLGregorianCalendar geburtsdatum; + private MockedStatic<DateConverter> dateConverter; private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); private final NameNatuerlichePersonType nameNatuerlichePerson = NameNatuerlichePersonTypeTestFactory.create(); @@ -105,9 +106,20 @@ class KontaktTypeCreatorTest { @BeforeEach void setUp() { - Mockito.when(nameNatuerlichePersonTypeCreator.create(vorgang.getEingang().getAntragsteller())).thenReturn(nameNatuerlichePerson); - Mockito.when(dateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)).thenReturn(Optional.of(geburtsdatum)); - Mockito.doReturn(geburtType).when(creator).createGeburtType(Optional.of(geburtsdatum)); + when(nameNatuerlichePersonTypeCreator.create(vorgang.getEingang().getAntragsteller())).thenReturn(nameNatuerlichePerson); + doReturn(geburtType).when(creator).createGeburtType(Optional.of(geburtsdatum)); + setUpDateConverter(); + } + + void setUpDateConverter() { + dateConverter = mockStatic(DateConverter.class); + dateConverter.when(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)) + .thenReturn(Optional.of(geburtsdatum)); + } + + @AfterEach + void cleanUp() { + dateConverter.close(); } @Test @@ -128,7 +140,7 @@ class KontaktTypeCreatorTest { void shouldCallDateConverter() { callCreator(vorgang); - Mockito.verify(dateConverter).convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR); + dateConverter.verify(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)); } @Test @@ -190,11 +202,13 @@ class KontaktTypeCreatorTest { @Test void shouldBeEmptyIfNoneOfRequiredDataExists() { - Mockito.when(dateConverter.convertGermanFormatToISO(null)).thenReturn(Optional.empty()); + try (var dateConverter = mockStatic(DateConverter.class)) { + dateConverter.when(() -> DateConverter.convertGermanFormatToISO(null)).thenReturn(Optional.empty()); - var antragsteller = callCreator(buildVorgang(Antragsteller.builder().build())); + var antragsteller = callCreator(buildVorgang(Antragsteller.builder().build())); - assertThat(antragsteller).isEmpty(); + assertThat(antragsteller).isEmpty(); + } } @Test @@ -220,11 +234,15 @@ class KontaktTypeCreatorTest { @Test void shouldNotBeEmptyIfHasGeburtsdatum() { - Mockito.when(dateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)).thenReturn(Optional.of(geburtsdatum)); + try (var dateConverter = mockStatic(DateConverter.class)) { + dateConverter.when(() -> DateConverter.convertGermanFormatToISO(AntragstellerTestFactory.GEBURTSDATUM_STR)) + .thenReturn(Optional.of(geburtsdatum)); - var antragsteller = callCreator(buildVorgang(Antragsteller.builder().geburtsdatum(AntragstellerTestFactory.GEBURTSDATUM_STR).build())); + var antragsteller = callCreator( + buildVorgang(Antragsteller.builder().geburtsdatum(AntragstellerTestFactory.GEBURTSDATUM_STR).build())); - assertThat(antragsteller).isNotEmpty(); + assertThat(antragsteller).isNotEmpty(); + } } private Optional<Antragsteller> callCreator(VorgangWithEingang vorgang) { diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java index fab8514b0e509308e40b725fcab69545433c904b..1bce187cf0a5b5374f18273a56d90000bff3a931 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/KopfCreatorTest.java @@ -12,11 +12,10 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.Spy; import de.ozgcloud.alfa.common.DateConverter; -import de.ozgcloud.alfa.export.XDomeaProperties; +import de.ozgcloud.alfa.export.XdomeaProperties; import de.xoev.xdomea.BehoerdenkennungType; import de.xoev.xdomea.Code; import de.xoev.xdomea.KontaktType; @@ -32,7 +31,7 @@ class KopfCreatorTest { private KopfCreator creator; @Mock - private XDomeaProperties xDomeaProperties; + private XdomeaProperties xDomeaProperties; @Mock private DateConverter dateConverter; @@ -60,11 +59,11 @@ class KopfCreatorTest { @Test void shouldSetErstellungszeitpunkt() { - try (var zonedDateTime = Mockito.mockStatic(ZonedDateTime.class)) { + try (var zonedDateTime = mockStatic(ZonedDateTime.class); var dateConverter = mockStatic(DateConverter.class)) { zonedDateTime.when(() -> ZonedDateTime.now(ZoneOffset.UTC)).thenReturn(CREATION_TIME); var expectedValue = mock(XMLGregorianCalendar.class); - when(dateConverter.toXmlGregorianCalendar(CREATION_TIME)).thenReturn(expectedValue); + dateConverter.when(() -> DateConverter.toXmlGregorianCalendar(CREATION_TIME)).thenReturn(expectedValue); var kopf = createKopf();