diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeader.java b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeader.java index 9b701e231c2108190bd93c7ac969ab7a80cc89e0..2a52a44273b9131774cdeab95bf968d1948c8678 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeader.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/vorgang/EingangHeader.java @@ -41,4 +41,5 @@ public class EingangHeader { private String customerId; private String client; private String clientId; + private String formEngineName; } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapperTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapperTest.java index a046aa542c3610d65ecd1cf7b27121e5f078e5d6..343dcaf5ce9b50d92c72d67721a6d465aae719ee 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapperTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderMapperTest.java @@ -50,6 +50,13 @@ class EingangHeaderMapperTest { assertThat(eingang.getRequestId()).isEqualTo(GrpcEingangHeaderTestFactory.REQUEST_ID); } + @Test + void shouldMapFormEngineName() { + var eingang = callMapper(); + + assertThat(eingang.getFormEngineName()).isEqualTo(GrpcEingangHeaderTestFactory.FORM_ENGINE_NAME); + } + private EingangHeader callMapper() { return mapper.toEingangHeader(GrpcEingangHeaderTestFactory.create()); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderTestFactory.java index 0ddbf2ebebda91c5f0ecc570d4ebf90084c953ba..cb7cde735df4f3d45b8615fb6dc17dfc53732ee2 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/EingangHeaderTestFactory.java @@ -29,12 +29,13 @@ public class EingangHeaderTestFactory { public static final String CREATED_AT_STR = "2020-01-10T10:30:00Z"; public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); + public static final String FORM_ENGINE_NAME = "AFM"; public static EingangHeader create() { return createBuilder().build(); } public static EingangHeader.EingangHeaderBuilder createBuilder() { - return EingangHeader.builder().createdAt(CREATED_AT); + return EingangHeader.builder().createdAt(CREATED_AT).formEngineName(FORM_ENGINE_NAME); } } \ No newline at end of file diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangHeaderTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangHeaderTestFactory.java index ffb62f0b4e0b5465c7c45bf8dc1223d297e03386..3f19726f0c68a31b94efe606aff29d9d08c6bad6 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangHeaderTestFactory.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/vorgang/GrpcEingangHeaderTestFactory.java @@ -42,6 +42,7 @@ public class GrpcEingangHeaderTestFactory { private final static String CUSTOMER_ID = UUID.randomUUID().toString(); private final static String CLIENT = LoremIpsum.getInstance().getName(); private final static String CLIENT_ID = UUID.randomUUID().toString(); + public final static String FORM_ENGINE_NAME = "AFM"; public static GrpcEingangHeader create() { return createBuilder().build(); @@ -57,6 +58,7 @@ public class GrpcEingangHeaderTestFactory { .setCustomer(CUSTOMER) .setCustomerId(CUSTOMER_ID) .setClient(CLIENT) - .setClientId(CLIENT_ID); + .setClientId(CLIENT_ID) + .setFormEngineName(FORM_ENGINE_NAME); } } \ No newline at end of file diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401Creator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401Creator.java new file mode 100644 index 0000000000000000000000000000000000000000..e47a7eb2ac47d2380c2b07484122c89e9ac6b86e --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401Creator.java @@ -0,0 +1,26 @@ +package de.ozgcloud.alfa.export; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.xoev.xdomea.AbgabeAbgabe0401; + +@Component +class AbgabeAbgabe0401Creator { + + @Autowired + private SchriftgutobjektCreator schriftgutobjektCreator; + + @Autowired + private AnwendungsspezifischeErweiterungMapper anwendungsspezifischeErweiterungMapper; + + public AbgabeAbgabe0401 createAbgabe(VorgangWithEingang vorgang) { + var erweiterung = anwendungsspezifischeErweiterungMapper.map(vorgang); + + var abgabe = new AbgabeAbgabe0401(); + abgabe.getSchriftgutobjekt().add(schriftgutobjektCreator.createSchriftgutobjekt(vorgang, erweiterung)); + return abgabe; + } + +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DateiformatCode.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DateiformatCode.java new file mode 100644 index 0000000000000000000000000000000000000000..c7f4b8f86717fb9646e9a32f8b1b28318297c278 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DateiformatCode.java @@ -0,0 +1,24 @@ +package de.ozgcloud.alfa.export; + +import de.xoev.xdomea.DateiformatCodeType; + +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); + dateiformatCode.setListURI(LIST_URI); + dateiformatCode.setListVersionID(listVersionID); + return dateiformatCode; + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DokumentTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DokumentTypeCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..240735b34501fe979d02f97e8b45a7f848faf3db --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DokumentTypeCreator.java @@ -0,0 +1,70 @@ +package de.ozgcloud.alfa.export; + +import java.util.ArrayList; +import java.util.List; +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.file.OzgFile; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.xoev.xdomea.AllgemeineMetadatenType; +import de.xoev.xdomea.DokumentType; +import de.xoev.xdomea.IdentifikationObjektType; +import de.xoev.xdomea.MediumCodeType; + +@Component +class DokumentTypeCreator { + + static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001"; + + @Autowired + private ExportFileService exportFileService; + + @Autowired + private UUIDConverter uuidConverter; + + @Autowired + private VersionTypeCreator versionTypeCreator; + + public Stream<DokumentType> createDokumentTypen(VorgangWithEingang vorgang) { + var ozgFiles = exportFileService.getAllPdfs(vorgang.getEingang().getId()).toList(); + List<DokumentType> dokumenten = new ArrayList<>(ozgFiles.size()); + for (var i = 0; i < ozgFiles.size(); i++) { + dokumenten.add(createDokumentType(i + 1, vorgang, ozgFiles.get(i))); + } + return dokumenten.stream(); + } + + DokumentType createDokumentType(int dokumentOrdinalNumber, VorgangWithEingang vorgang, OzgFile ozgFile) { + var dokument = new DokumentType(); + dokument.setIdentifikation(createIdentifikation(dokumentOrdinalNumber, ozgFile.getId().toString())); + dokument.setAllgemeineMetadaten(createAllgemeineMetadaten(ozgFile)); + dokument.getVersion().add(versionTypeCreator.createVersionType(vorgang, ozgFile)); + return dokument; + } + + IdentifikationObjektType createIdentifikation(int dokumentOrdinalNumber, String fileId) { + var identifikation = new IdentifikationObjektType(); + identifikation.setID(uuidConverter.fromObjectId(fileId)); + identifikation.setNummerImUebergeordnetenContainer(Long.valueOf(dokumentOrdinalNumber)); + return identifikation; + } + + AllgemeineMetadatenType createAllgemeineMetadaten(OzgFile ozgFile) { + 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; + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportFileService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportFileService.java new file mode 100644 index 0000000000000000000000000000000000000000..163ae563403e615c1f3c8eaba1e493fad643101f --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportFileService.java @@ -0,0 +1,26 @@ +package de.ozgcloud.alfa.export; + +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; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileService; + +@Service +class ExportFileService { + + private static final Predicate<OzgFile> IS_PDF_FILE = file -> file.getContentType().equals(MediaType.APPLICATION_PDF_VALUE); + + @Autowired + private OzgFileService ozgFileService; + + public Stream<OzgFile> getAllPdfs(String eingangId) { + var representations = ozgFileService.getRepresentationsByEingang(eingangId); + var attachments = ozgFileService.getAttachmentsByEingang(eingangId); + return Stream.concat(representations, attachments).filter(IS_PDF_FILE); + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/FormatTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/FormatTypeCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..fa96295d753da3780a9f9f7ed5f6639309ac5034 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/FormatTypeCreator.java @@ -0,0 +1,25 @@ +package de.ozgcloud.alfa.export; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.xoev.xdomea.FormatType; + +@Component +class FormatTypeCreator { + + @Autowired + private PrimaerdokumentTypeCreator primaerdokumentTypeCreator; + + public FormatType createFormatType(VorgangWithEingang vorgang, OzgFile ozgFile) { + var format = new FormatType(); + format.setPrimaerdokument(primaerdokumentTypeCreator.createPrimaerdokumentType(vorgang, ozgFile)); + format.setName(DateiformatCode.PDF.createDateiformatCodeType()); + format.setSonstigerName(StringUtils.EMPTY); + format.setVersion(StringUtils.EMPTY); + return format; + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..eb2878a6743cb451eae8412552e5ca2be7725f30 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreator.java @@ -0,0 +1,27 @@ +package de.ozgcloud.alfa.export; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.xoev.xdomea.PrimaerdokumentType; + +@Component +class PrimaerdokumentTypeCreator { + + @Autowired + private UUIDConverter uuidConverter; + + public PrimaerdokumentType createPrimaerdokumentType(VorgangWithEingang vorgang, OzgFile ozgFile) { + var primaerdokument = new PrimaerdokumentType(); + primaerdokument.setDateiname(createDateiname(ozgFile)); + primaerdokument.setDateinameOriginal(ozgFile.getName()); + primaerdokument.setErsteller(vorgang.getEingang().getHeader().getFormEngineName()); + return primaerdokument; + } + + String createDateiname(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/export/SchriftgutobjektCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/SchriftgutobjektCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..aa49273d7ff0b1bb012ecf2f900fb31f456f792a --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/SchriftgutobjektCreator.java @@ -0,0 +1,22 @@ +package de.ozgcloud.alfa.export; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.xoev.xdomea.AbgabeAbgabe0401.Schriftgutobjekt; +import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; + +@Component +class SchriftgutobjektCreator { + + @Autowired + private VorgangTypeCreator vorgangTypeCreator; + + public Schriftgutobjekt createSchriftgutobjekt(VorgangWithEingang vorgang, AnwendungsspezifischeErweiterungType erweiterung) { + var schritftgutobjekt = new Schriftgutobjekt(); + schritftgutobjekt.setVorgang(vorgangTypeCreator.createVorgangType(vorgang, erweiterung)); + return schritftgutobjekt; + } + +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/UUIDConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/UUIDConverter.java new file mode 100644 index 0000000000000000000000000000000000000000..ad28c0ea96923a9567330fed9fa1bea30cc3f15c --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/UUIDConverter.java @@ -0,0 +1,23 @@ +package de.ozgcloud.alfa.export; + +import java.util.regex.Pattern; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +@Component +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) { + var matcher = UUID_SPLIT_PATTERN.matcher(objectId); + if (matcher.find()) { + var lastGroup = StringUtils.leftPad(matcher.group(5), 12, "0"); + return String.format("%s-%s-%s-%s-%s", matcher.group(1), matcher.group(2), matcher.group(3), matcher.group(4), lastGroup); + } + throw new IllegalArgumentException(String.format("Invalid object id %s", objectId)); + } + +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/VersionTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/VersionTypeCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..ca91a6714794dce0261877e75540dcd46f29fc14 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/VersionTypeCreator.java @@ -0,0 +1,24 @@ +package de.ozgcloud.alfa.export; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.xoev.xdomea.VersionType; + +@Component +class VersionTypeCreator { + + static final String NUMMER = "1"; + + @Autowired + private FormatTypeCreator formatTypeCreator; + + public VersionType createVersionType(VorgangWithEingang vorgang, OzgFile ozgFile) { + var version = new VersionType(); + version.setNummer(NUMMER); + version.getFormat().add(formatTypeCreator.createFormatType(vorgang, ozgFile)); + return version; + } +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/VorgangTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/VorgangTypeCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..3dc73649b576bed5ca7f349c0b79b27152025fa0 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/VorgangTypeCreator.java @@ -0,0 +1,56 @@ +package de.ozgcloud.alfa.export; + +import java.util.UUID; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.xoev.xdomea.AllgemeineMetadatenType; +import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; +import de.xoev.xdomea.IdentifikationObjektType; +import de.xoev.xdomea.MediumCodeType; +import de.xoev.xdomea.VorgangType; + +@Component +class VorgangTypeCreator { + + static final Long NUMMER_IM_UEBERGEORDNETEN_CONTAINER = 1L; + static final String ALLGEMEINE_METADATEN_MEDIUM_CODE = "001"; + + @Autowired + private DokumentTypeCreator dokumentTypeCreator; + + public VorgangType createVorgangType(VorgangWithEingang vorgangWithEingang, AnwendungsspezifischeErweiterungType erweiterung) { + var vorgang = new VorgangType(); + vorgang.setAnwendungsspezifischeErweiterung(erweiterung); + vorgang.setIdentifikation(createIdentifikation()); + vorgang.setAllgemeineMetadaten(createAllgemeineMetadaten(vorgangWithEingang)); + vorgang.getDokument().addAll(dokumentTypeCreator.createDokumentTypen(vorgangWithEingang).toList()); + return vorgang; + } + + IdentifikationObjektType createIdentifikation() { + var identifikation = new IdentifikationObjektType(); + identifikation.setID(UUID.randomUUID().toString()); + identifikation.setNummerImUebergeordnetenContainer(NUMMER_IM_UEBERGEORDNETEN_CONTAINER); + return identifikation; + } + + AllgemeineMetadatenType createAllgemeineMetadaten(VorgangWithEingang vorgang) { + var allgemeineMetadaten = new AllgemeineMetadatenType(); + allgemeineMetadaten.setBetreff(vorgang.getName()); + allgemeineMetadaten.setKennzeichen(vorgang.getNummer()); + allgemeineMetadaten.setBemerkung(StringUtils.EMPTY); + allgemeineMetadaten.setMedium(createMediumCode()); + return allgemeineMetadaten; + } + + private MediumCodeType createMediumCode() { + var mediumCode = new MediumCodeType(); + mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE); + return mediumCode; + } + +} diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaService.java index 9ec571bd5be635ea746403fab49a435861e69a8b..e138d057359e76396ab7d09463c8ee81dcfd5962 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaService.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XDomeaService.java @@ -3,42 +3,32 @@ package de.ozgcloud.alfa.export; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; -import java.util.UUID; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.itvsh.kop.common.errorhandling.TechnicalException; import de.ozgcloud.alfa.vorgang.VorgangController; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; -import de.xoev.xdomea.AbgabeAbgabe0401; -import de.xoev.xdomea.AbgabeAbgabe0401.Schriftgutobjekt; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.MediumCodeType; -import de.xoev.xdomea.VorgangType; @Service class XDomeaService { static final String EXPORT_FILENAME_SUFFIX = "_Abgabe.Abgabe.0401.xml"; - static final Long NUMMER_IM_UEBERGEORDNETEN_CONTAINER = 1L; private static final String EXPORT_FILENAME_TEMPLATE = "%s" + EXPORT_FILENAME_SUFFIX; - @Autowired - private AnwendungsspezifischeErweiterungMapper anwendungsspezifischeErweiterungMapper; - @Autowired private XDomeaXmlMarshaller xDomeaXmlMarshaller; @Autowired private VorgangController vorgangController; + @Autowired + private AbgabeAbgabe0401Creator abgabeCreator; + public void writeExport(String vorgangId, String filenameId, OutputStream out) { var vorgang = vorgangController.getVorgang(vorgangId); try (var zipOutputStream = new ZipOutputStream(out)) { @@ -60,50 +50,6 @@ class XDomeaService { } String createXmlContent(VorgangWithEingang vorgang) { - var erweiterung = anwendungsspezifischeErweiterungMapper.map(vorgang); - var abgabe = buildAbgabe(vorgang, erweiterung); - return xDomeaXmlMarshaller.marshal(abgabe); - } - - AbgabeAbgabe0401 buildAbgabe(VorgangWithEingang vorgang, AnwendungsspezifischeErweiterungType erweiterung) { - var root = new AbgabeAbgabe0401(); - root.getSchriftgutobjekt().add(buildSchriftgutobjekt(vorgang, erweiterung)); - return root; - } - - Schriftgutobjekt buildSchriftgutobjekt(VorgangWithEingang vorgang, AnwendungsspezifischeErweiterungType erweiterung) { - var schritftgutobjekt = new Schriftgutobjekt(); - schritftgutobjekt.setVorgang(buildVorgangType(vorgang, erweiterung)); - return schritftgutobjekt; - } - - VorgangType buildVorgangType(VorgangWithEingang vorgangWithEingang, AnwendungsspezifischeErweiterungType erweiterung) { - var vorgang = new VorgangType(); - vorgang.setAnwendungsspezifischeErweiterung(erweiterung); - vorgang.setIdentifikation(buildIdentifikation()); - vorgang.setAllgemeineMetadaten(buildAllgemeineMetadaten(vorgangWithEingang)); - return vorgang; - } - - IdentifikationObjektType buildIdentifikation() { - var identifikation = new IdentifikationObjektType(); - identifikation.setID(UUID.randomUUID().toString()); - identifikation.setNummerImUebergeordnetenContainer(NUMMER_IM_UEBERGEORDNETEN_CONTAINER); - return identifikation; - } - - public AllgemeineMetadatenType buildAllgemeineMetadaten(VorgangWithEingang vorgang) { - var allgemeineMetadaten = new AllgemeineMetadatenType(); - allgemeineMetadaten.setBetreff(vorgang.getName()); - allgemeineMetadaten.setKennzeichen(vorgang.getNummer()); - allgemeineMetadaten.setBemerkung(StringUtils.EMPTY); - allgemeineMetadaten.setMedium(buildMediumCode()); - return allgemeineMetadaten; - } - - private MediumCodeType buildMediumCode() { - var mediumCode = new MediumCodeType(); - mediumCode.setCode(XDomeaMedienart.ELEKTRONISCHES_DOKUMENT.getCode()); - return mediumCode; + return xDomeaXmlMarshaller.marshal(abgabeCreator.createAbgabe(vorgang)); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401CreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401CreatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fb9780158500c6922aa7e5a05e369e80abaedcb0 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/AbgabeAbgabe0401CreatorTest.java @@ -0,0 +1,65 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +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 de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; +import de.xoev.xdomea.AbgabeAbgabe0401.Schriftgutobjekt; +import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; + +class AbgabeAbgabe0401CreatorTest { + + @InjectMocks + private AbgabeAbgabe0401Creator creator; + + @Mock + private SchriftgutobjektCreator schriftgutobjektCreator; + + @Mock + private AnwendungsspezifischeErweiterungMapper anwendungsspezifischeErweiterungMapper; + + @Nested + class TestCreateAbgabe { + + private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); + + private final AnwendungsspezifischeErweiterungType anwendungsspezifischeErweiterung = AnwendungsspezifischeErweiterungTypeTestFactory.create(); + private final Schriftgutobjekt schriftgutobjekt = SchriftgutobjektTestFactory.create(); + + @BeforeEach + void init() { + when(anwendungsspezifischeErweiterungMapper.map(vorgangWithEingang)).thenReturn(anwendungsspezifischeErweiterung); + } + + @Test + void shouldCallMapper() { + creator.createAbgabe(vorgangWithEingang); + + verify(anwendungsspezifischeErweiterungMapper).map(vorgangWithEingang); + } + + @Test + void shouldCreateSchriftgutobjekt() { + creator.createAbgabe(vorgangWithEingang); + + verify(schriftgutobjektCreator).createSchriftgutobjekt(vorgangWithEingang, anwendungsspezifischeErweiterung); + } + + @Test + void shouldHaveSchriftgutobjekt() { + doReturn(schriftgutobjekt).when(schriftgutobjektCreator).createSchriftgutobjekt(vorgangWithEingang, anwendungsspezifischeErweiterung); + + var abgabe = creator.createAbgabe(vorgangWithEingang); + + assertThat(abgabe.getSchriftgutobjekt().get(0)).isEqualTo(schriftgutobjekt); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DateiformatCodeTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DateiformatCodeTest.java new file mode 100644 index 0000000000000000000000000000000000000000..8fefefe8e4ae869abfc6a4242d233accb64cdef4 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DateiformatCodeTest.java @@ -0,0 +1,35 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +class DateiformatCodeTest { + + @Nested + class TestCreateDateiformatCodeType { + + @Test + void shouldHaveCode() { + var dateiformatCode = DateiformatCode.PDF.createDateiformatCodeType(); + + assertThat(dateiformatCode.getCode()).isEqualTo(DateiformatCode.PDF.code); + } + + @Test + void shouldHaveListURI() { + var dateiformatCode = DateiformatCode.PDF.createDateiformatCodeType(); + + assertThat(dateiformatCode.getListURI()).isEqualTo(DateiformatCode.LIST_URI); + } + + @Test + void shouldHaveListVersionID() { + var dateiformatCode = DateiformatCode.PDF.createDateiformatCodeType(); + + assertThat(dateiformatCode.getListVersionID()).isEqualTo(DateiformatCode.PDF.listVersionID); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeCreatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..743f719d02220b470dc129ad4151a68f4c8a8b17 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeCreatorTest.java @@ -0,0 +1,207 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.stream.Stream; + +import org.apache.commons.lang3.StringUtils; +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.TestUtils; +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; +import de.ozgcloud.alfa.vorgang.EingangTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; +import de.xoev.xdomea.AllgemeineMetadatenType; +import de.xoev.xdomea.DokumentType; +import de.xoev.xdomea.IdentifikationObjektType; +import de.xoev.xdomea.VersionType; + +class DokumentTypeCreatorTest { + + @Spy + @InjectMocks + private DokumentTypeCreator creator; + + @Mock + private ExportFileService exportFileService; + + @Mock + private UUIDConverter uuidConverter; + + @Mock + private VersionTypeCreator versionTypeCreator; + + @Nested + class CreateDokumentTypen { + + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + @BeforeEach + void init() { + when(exportFileService.getAllPdfs(EingangTestFactory.ID)).thenReturn(Stream.of(ozgFile)); + } + + @Test + void shouldLoadlAllPdfs() { + creator.createDokumentTypen(vorgang); + + verify(exportFileService).getAllPdfs(EingangTestFactory.ID); + } + + @Test + void shouldCreateDokumentType() { + creator.createDokumentTypen(vorgang); + + verify(creator).createDokumentType(1, vorgang, ozgFile); + } + + } + + @Nested + class CreateDokumentType { + + private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); + private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); + private final OzgFile ozgFile = OzgFileTestFactory.create(); + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private final VersionType version = VersionTypeTestFactory.create(); + private final int DOKUMENT_ORDINAL_NUMBER = 1; + + @BeforeEach + void init() { + doReturn(identifikationObjekt).when(creator).createIdentifikation(DOKUMENT_ORDINAL_NUMBER, OzgFileTestFactory.ID.toString()); + doReturn(allgemeineMetadaten).when(creator).createAllgemeineMetadaten(ozgFile); + + when(versionTypeCreator.createVersionType(vorgang, ozgFile)).thenReturn(version); + } + + @Test + void shouldCreateIdentifikation() { + create(); + + verify(creator).createIdentifikation(DOKUMENT_ORDINAL_NUMBER, OzgFileTestFactory.ID.toString()); + } + + @Test + void shouldHaveIdentifikation() { + var dokument = create(); + + assertThat(dokument.getIdentifikation()).isEqualTo(identifikationObjekt); + } + + @Test + void shouldCreateAllgemeineMetadaten() { + create(); + + verify(creator).createAllgemeineMetadaten(ozgFile); + } + + @Test + void shouldHaveAllgemeineMetadaten() { + var dokument = create(); + + assertThat(dokument.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten); + } + + @Test + void shouldCreateVersion() { + create(); + + verify(versionTypeCreator).createVersionType(vorgang, ozgFile); + } + + @Test + void shouldHaveVersion() { + var dokument = create(); + + assertThat(dokument.getVersion()).containsExactly(version); + } + + private DokumentType create() { + return creator.createDokumentType(DOKUMENT_ORDINAL_NUMBER, vorgang, ozgFile); + } + } + + @Nested + class TestCreateIdentifikation { + + private final String FILE_ID = "64a820d36285172ac02826d0"; + private final String FILE_UUID = "64a820d3-6285-172a-c028-0000000026d0"; + private final int DOKUMENT_ORDINAL_NUMBER = 1; + + @BeforeEach + void init() { + when(uuidConverter.fromObjectId(FILE_ID)).thenReturn(FILE_UUID); + } + + @Test + void shouldConvertObjectId() { + create(); + + verify(uuidConverter).fromObjectId(FILE_ID); + } + + @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(DOKUMENT_ORDINAL_NUMBER, FILE_ID); + } + } + + @Nested + class TestCreateAllgemeineMetadaten { + + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + @Test + void shouldHaveBetreff() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(ozgFile); + + assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(OzgFileTestFactory.NAME); + } + + @Test + void shouldHaveKennzeichen() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(ozgFile); + + assertThat(allgemeineMetadaten.getKennzeichen()).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldHaveBemerkung() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(ozgFile); + + assertThat(allgemeineMetadaten.getBemerkung()).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldHaveMedium() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(ozgFile); + + assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(VorgangTypeCreator.ALLGEMEINE_METADATEN_MEDIUM_CODE); + } + + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..8de8ed3e01318e4883481d704d6db97012b0c708 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeTestFactory.java @@ -0,0 +1,11 @@ +package de.ozgcloud.alfa.export; + +import de.xoev.xdomea.DokumentType; + +public class DokumentTypeTestFactory { + + public static DokumentType create() { + var dokument = new DokumentType(); + return dokument; + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFileServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFileServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..03f402b589ebf686e607e77ebba88c8a3203a9d2 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportFileServiceTest.java @@ -0,0 +1,65 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +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.springframework.http.MediaType; + +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.vorgang.EingangTestFactory; + +class ExportFileServiceTest { + + @InjectMocks + private ExportFileService service; + + @Mock + private OzgFileService ozgFileService; + + @Nested + class TestGetAllPdfs { + + 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)); + } + + @Test + void shouldLoadRepresentations() { + service.getAllPdfs(EingangTestFactory.ID); + + verify(ozgFileService).getRepresentationsByEingang(EingangTestFactory.ID); + } + + @Test + void shouldLoadAttachments() { + service.getAllPdfs(EingangTestFactory.ID); + + verify(ozgFileService).getAttachmentsByEingang(EingangTestFactory.ID); + } + + @Test + void shouldReturnPdfs() { + var ozgFiles = service.getAllPdfs(EingangTestFactory.ID); + + assertThat(ozgFiles).hasSize(2).containsExactlyInAnyOrder(attachmentPdfFile, representationPdfFile); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FormaTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FormaTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..b4c5902e19925829e206e4f3c6cd6d0e19098c3c --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FormaTypeTestFactory.java @@ -0,0 +1,10 @@ +package de.ozgcloud.alfa.export; + +import de.xoev.xdomea.FormatType; + +class FormaTypeTestFactory { + + public static FormatType create() { + return new FormatType(); + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FormatTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FormatTypeCreatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e639d7a8bfad0a703077225d6f2a354275669df3 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FormatTypeCreatorTest.java @@ -0,0 +1,78 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.apache.commons.lang3.StringUtils; +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.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; +import de.xoev.xdomea.PrimaerdokumentType; + +class FormatTypeCreatorTest { + + @Spy + @InjectMocks + private FormatTypeCreator creator; + + @Mock + private PrimaerdokumentTypeCreator primaerdokumentTypeCreator; + + @Nested + class TestCreateFormatType { + + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + private final PrimaerdokumentType primaerdokument = PrimaerdokumentTypeTestFactory.create(); + + @BeforeEach + void init() { + when(primaerdokumentTypeCreator.createPrimaerdokumentType(vorgang, ozgFile)).thenReturn(primaerdokument); + } + + @Test + void shouldCreatePrimaerdokument() { + creator.createFormatType(vorgang, ozgFile); + + verify(primaerdokumentTypeCreator).createPrimaerdokumentType(vorgang, ozgFile); + } + + @Test + void shouldHavePrimaerdokumentType() { + var format = creator.createFormatType(vorgang, ozgFile); + + assertThat(format.getPrimaerdokument()).isEqualTo(primaerdokument); + } + + @Test + void shouldHaveName() { + var format = creator.createFormatType(vorgang, ozgFile); + + assertThat(format.getName()).usingRecursiveComparison().isEqualTo(DateiformatCode.PDF.createDateiformatCodeType()); + } + + @Test + void shouldHaveSonstigerName() { + var format = creator.createFormatType(vorgang, ozgFile); + + assertThat(format.getSonstigerName()).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldHaveVersion() { + var format = creator.createFormatType(vorgang, ozgFile); + + assertThat(format.getVersion()).isEqualTo(StringUtils.EMPTY); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d2cea2a5a3374289b5f4c2d5b3a5a1bd31d907cc --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreatorTest.java @@ -0,0 +1,93 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +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.TestUtils; +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; +import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; + +class PrimaerdokumentTypeCreatorTest { + + @Spy + @InjectMocks + private PrimaerdokumentTypeCreator creator; + + @Mock + private UUIDConverter uuidConverter; + + @Nested + class TestCreatePrimaerdokumentType { + + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + @BeforeEach + void init() { + doReturn(ozgFile.getName()).when(creator).createDateiname(ozgFile); + } + + @Test + void shouldCreateDateiname() { + creator.createPrimaerdokumentType(vorgang, ozgFile); + + verify(creator).createDateiname(ozgFile); + } + + @Test + void shouldHaveDateiname() { + var primaerdokument = creator.createPrimaerdokumentType(vorgang, ozgFile); + + assertThat(primaerdokument.getDateiname()).isEqualTo(ozgFile.getName()); + } + + @Test + void shouldHaveDateinameOriginal() { + var primaerdokument = creator.createPrimaerdokumentType(vorgang, ozgFile); + + assertThat(primaerdokument.getDateinameOriginal()).isEqualTo(ozgFile.getName()); + } + + @Test + void shouldHaveErsteller() { + var primaerdokument = creator.createPrimaerdokumentType(vorgang, ozgFile); + + assertThat(primaerdokument.getErsteller()).isEqualTo(EingangHeaderTestFactory.FORM_ENGINE_NAME); + } + } + + @Nested + class TestCreateDateiname { + + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + @BeforeEach + void init() { + when(uuidConverter.fromObjectId(ozgFile.getId().toString())).thenReturn("64a820d3-6285-172a-c028-0000000026d0"); + } + + @Test + void shouldConvertObjectId() { + creator.createDateiname(ozgFile); + + verify(uuidConverter).fromObjectId(ozgFile.getId().toString()); + } + + @Test + void shouldCreate() { + var dateiname = creator.createDateiname(ozgFile); + + assertThat(dateiname).matches(String.format("^%s_%s$", TestUtils.UUID_REGEX, ozgFile.getName())); + } + } +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..f0ae78aaf77d4af8219bc90e920e504bc53f553b --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeTestFactory.java @@ -0,0 +1,10 @@ +package de.ozgcloud.alfa.export; + +import de.xoev.xdomea.PrimaerdokumentType; + +class PrimaerdokumentTypeTestFactory { + + public static PrimaerdokumentType create() { + return new PrimaerdokumentType(); + } +} diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/SchriftgutobjektCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/SchriftgutobjektCreatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..214e6a3a323b1addec2aebe02381a8849e196e34 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/SchriftgutobjektCreatorTest.java @@ -0,0 +1,50 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; +import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; +import de.xoev.xdomea.VorgangType; + +class SchriftgutobjektCreatorTest { + + @InjectMocks + private SchriftgutobjektCreator creator; + + @Mock + private VorgangTypeCreator vorgangTypeCreator; + + @Nested + class TestCreateSchriftgutObjekt { + + private final VorgangWithEingang vorgangWithEingang = VorgangWithEingangTestFactory.create(); + + private final VorgangType vorgang = VorgangTypeTestFactory.create(); + private final AnwendungsspezifischeErweiterungType anwendungsspezifischeErweiterung = AnwendungsspezifischeErweiterungTypeTestFactory.create(); + + @Test + void shouldCreateVorgangType() { + creator.createSchriftgutobjekt(vorgangWithEingang, anwendungsspezifischeErweiterung); + + verify(vorgangTypeCreator).createVorgangType(vorgangWithEingang, anwendungsspezifischeErweiterung); + } + + @Test + void shouldHaveVorgangType() { + doReturn(vorgang).when(vorgangTypeCreator).createVorgangType(vorgangWithEingang, anwendungsspezifischeErweiterung); + + var schriftgutobjekt = creator.createSchriftgutobjekt(vorgangWithEingang, anwendungsspezifischeErweiterung); + + assertThat(schriftgutobjekt.getVorgang()).isEqualTo(vorgang); + } + + } + +} \ No newline at end of file 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 new file mode 100644 index 0000000000000000000000000000000000000000..9d6e44fb53c75d36b71fcfd4e8e66ea90f07f188 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/UUIDConverterTest.java @@ -0,0 +1,32 @@ +package de.ozgcloud.alfa.export; + +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; + +class UUIDConverterTest { + + @InjectMocks + private UUIDConverter converter; + + @Nested + class TestFromObjectId { + + @Test + void shouldReturnUUID() { + var result = converter.fromObjectId("64a820d36285172ac02826d0"); + + assertThat(result).isEqualTo("64a820d3-6285-172a-c028-0000000026d0").matches(TestUtils.UUID_REGEX); + } + + @Test + void shouldThrowIllegalArgumentException() { + assertThatThrownBy(() -> converter.fromObjectId("abc")).isInstanceOf(IllegalArgumentException.class); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VersionTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VersionTypeCreatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..0a038a493dcb4cd44c7dc4a7c8f131e1ab0aa3d5 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VersionTypeCreatorTest.java @@ -0,0 +1,60 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +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 de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; +import de.xoev.xdomea.FormatType; + +class VersionTypeCreatorTest { + + @InjectMocks + private VersionTypeCreator creator; + + @Mock + private FormatTypeCreator formatTypeCreator; + + @Nested + class TestCreateVersionType { + + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private final OzgFile ozgFile = OzgFileTestFactory.create(); + private final FormatType formatType = FormaTypeTestFactory.create(); + + @BeforeEach + void init() { + when(formatTypeCreator.createFormatType(vorgang, ozgFile)).thenReturn(formatType); + } + + @Test + void shouldHaveNummer() { + var version = creator.createVersionType(vorgang, ozgFile); + + assertThat(version.getNummer()).isEqualTo(VersionTypeCreator.NUMMER); + } + + @Test + void shouldCreateFormatType() { + creator.createVersionType(vorgang, ozgFile); + + verify(formatTypeCreator).createFormatType(vorgang, ozgFile); + } + + @Test + void shouldHaveFormatType() { + var version = creator.createVersionType(vorgang, ozgFile); + + assertThat(version.getFormat()).containsExactly(formatType); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VersionTypeTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VersionTypeTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..b2ee1d70ad1e31e7d6f08e1ff589de41054987e2 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VersionTypeTestFactory.java @@ -0,0 +1,10 @@ +package de.ozgcloud.alfa.export; + +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/export/VorgangTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VorgangTypeCreatorTest.java new file mode 100644 index 0000000000000000000000000000000000000000..fb414919b4cb6094a663ac0c8f07328dfdf3d2e4 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/VorgangTypeCreatorTest.java @@ -0,0 +1,149 @@ +package de.ozgcloud.alfa.export; + +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; + +import java.util.stream.Stream; + +import org.apache.commons.lang3.StringUtils; +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.TestUtils; +import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.alfa.vorgang.VorgangWithEingang; +import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; +import de.xoev.xdomea.AllgemeineMetadatenType; +import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; +import de.xoev.xdomea.DokumentType; +import de.xoev.xdomea.IdentifikationObjektType; + +class VorgangTypeCreatorTest { + + @Spy + @InjectMocks + private VorgangTypeCreator creator; + + @Mock + private DokumentTypeCreator dokumentTypeCreator; + + @Nested + class TestCreateVorgangType { + + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + + private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); + private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); + private final AnwendungsspezifischeErweiterungType anwendungsspezifischeErweiterung = AnwendungsspezifischeErweiterungTypeTestFactory.create(); + private final DokumentType dokument = DokumentTypeTestFactory.create(); + + @BeforeEach + void init() { + doReturn(identifikationObjekt).when(creator).createIdentifikation(); + doReturn(allgemeineMetadaten).when(creator).createAllgemeineMetadaten(vorgang); + + when(dokumentTypeCreator.createDokumentTypen(vorgang)).thenReturn(Stream.of(dokument)); + } + + @Test + void shouldHaveAnwendungsspezifischeErweiterungType() { + var vorgangType = creator.createVorgangType(vorgang, anwendungsspezifischeErweiterung); + + assertThat(vorgangType.getAnwendungsspezifischeErweiterung()).isEqualTo(anwendungsspezifischeErweiterung); + } + + @Test + void shouldCallCreateIdentifikation() { + creator.createVorgangType(vorgang, anwendungsspezifischeErweiterung); + + verify(creator).createIdentifikation(); + } + + @Test + void shouldHaveIdentifikation() { + var vorgangType = creator.createVorgangType(vorgang, anwendungsspezifischeErweiterung); + + assertThat(vorgangType.getIdentifikation()).isEqualTo(identifikationObjekt); + } + + @Test + void shouldCallCreateAllgemeineMetadaten() { + creator.createVorgangType(vorgang, anwendungsspezifischeErweiterung); + + verify(creator).createAllgemeineMetadaten(vorgang); + } + + @Test + void shouldHaveAllgemeineMetadaten() { + var vorgangType = creator.createVorgangType(vorgang, anwendungsspezifischeErweiterung); + + assertThat(vorgangType.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten); + } + + @Test + void shouldCreateDokumenType() { + var vorgangType = creator.createVorgangType(vorgang, anwendungsspezifischeErweiterung); + + verify(dokumentTypeCreator).createDokumentTypen(vorgang); + assertThat(vorgangType.getDokument()).hasSize(1).containsExactly(dokument); + } + } + + @Nested + class TestCreateAllgemeineMetadaten { + + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + + @Test + void shouldHaveBetreff() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); + + assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(VorgangHeaderTestFactory.NAME); + } + + @Test + void shouldHaveKennzeichen() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); + + assertThat(allgemeineMetadaten.getKennzeichen()).isEqualTo(VorgangHeaderTestFactory.NUMMER); + } + + @Test + void shouldHaveBemerkung() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); + + assertThat(allgemeineMetadaten.getBemerkung()).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldHaveMedium() { + var allgemeineMetadaten = creator.createAllgemeineMetadaten(vorgang); + + assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(VorgangTypeCreator.ALLGEMEINE_METADATEN_MEDIUM_CODE); + } + + } + + @Nested + class TestCreateIdentifikation { + + @Test + void shouldHaveId() { + var identifikation = creator.createIdentifikation(); + + assertThat(identifikation.getID()).matches(TestUtils.UUID_REGEX); + } + + @Test + void shouldHaveNummerImUebergeordnetenContainer() { + var identifikation = creator.createIdentifikation(); + + assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(VorgangTypeCreator.NUMMER_IM_UEBERGEORDNETEN_CONTAINER); + } + } + +} \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XDomeaServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XDomeaServiceTest.java index 27bedb1b3d5c9324030b3e997e4bbed4e359694b..b6a74793cea29cc43281abbed69c6ebdf64b82aa 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XDomeaServiceTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/XDomeaServiceTest.java @@ -10,7 +10,6 @@ import java.io.IOException; import java.util.UUID; import java.util.zip.ZipOutputStream; -import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -26,11 +25,6 @@ import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; import de.xoev.xdomea.AbgabeAbgabe0401; -import de.xoev.xdomea.AbgabeAbgabe0401.Schriftgutobjekt; -import de.xoev.xdomea.AllgemeineMetadatenType; -import de.xoev.xdomea.AnwendungsspezifischeErweiterungType; -import de.xoev.xdomea.IdentifikationObjektType; -import de.xoev.xdomea.VorgangType; class XDomeaServiceTest { @@ -38,15 +32,15 @@ class XDomeaServiceTest { @InjectMocks private XDomeaService service; - @Mock - private AnwendungsspezifischeErweiterungMapper anwendungsspezifischeErweiterungMapper; - @Mock private XDomeaXmlMarshaller XDomeaXmlMarshaller; @Mock private VorgangController vorgangController; + @Mock + private AbgabeAbgabe0401Creator abgabeCreator; + @DisplayName("Write exportToXdomea") @Nested class TestWriteExport { @@ -131,24 +125,14 @@ class XDomeaServiceTest { private static final String XML_STRING = "<xml>"; private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - private final AnwendungsspezifischeErweiterungType anwendungsspezifischeErweiterung = AnwendungsspezifischeErweiterungTypeTestFactory - .create(); private final AbgabeAbgabe0401 abgabe = AbgabeAbgabe0401TestFactory.create(); @BeforeEach void init() { - when(anwendungsspezifischeErweiterungMapper.map(vorgang)).thenReturn(anwendungsspezifischeErweiterung); - doReturn(abgabe).when(service).buildAbgabe(eq(vorgang), any()); + doReturn(abgabe).when(abgabeCreator).createAbgabe(vorgang); when(XDomeaXmlMarshaller.marshal(any())).thenReturn(XML_STRING); } - @Test - void shouldCallMapper() { - service.createXmlContent(vorgang); - - verify(anwendungsspezifischeErweiterungMapper).map(vorgang); - } - @Test void shouldCallXmlMarshaller() { service.createXmlContent(vorgang); @@ -162,141 +146,12 @@ class XDomeaServiceTest { assertThat(result).isEqualTo(XML_STRING); } - } - - @DisplayName("Build abgabe") - @Nested - class TestBuildAbgabe { - - private final AnwendungsspezifischeErweiterungType type = AnwendungsspezifischeErweiterungTypeTestFactory.create(); - private final Schriftgutobjekt schriftgutObjekt = SchriftgutobjektTestFactory.create(); @Test - void shouldHaveSchriftgutobjekt() { - doReturn(schriftgutObjekt).when(service).buildSchriftgutobjekt(any(), any()); - - var abgabe = service.buildAbgabe(VorgangWithEingangTestFactory.create(), type); - - assertThat(abgabe.getSchriftgutobjekt().get(0)).isEqualTo(schriftgutObjekt); - } - - @DisplayName("build schriftgutobjekt") - @Nested - class TestBuildSchriftgutObjekt { - - private final VorgangType vorgang = VorgangTypeTestFactory.create(); - - @Test - void shouldHaveVorgangType() { - doReturn(vorgang).when(service).buildVorgangType(any(), any()); - - var schriftgutobjekt = service.buildSchriftgutobjekt(VorgangWithEingangTestFactory.create(), type); - - assertThat(schriftgutobjekt.getVorgang()).isEqualTo(vorgang); - } - - @DisplayName("build vorgangType") - @Nested - class TestBuildVorgangType { - - private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); - private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @BeforeEach - void init() { - doReturn(identifikationObjekt).when(service).buildIdentifikation(); - doReturn(allgemeineMetadaten).when(service).buildAllgemeineMetadaten(vorgang); - } - - @Test - void shouldHaveAnwendungsspezifischeErweiterungType() { - var vorgangType = service.buildVorgangType(vorgang, type); - - assertThat(vorgangType.getAnwendungsspezifischeErweiterung()).isEqualTo(type); - } - - @Test - void shouldCallBuildIdentifikation() { - service.buildVorgangType(vorgang, type); - - verify(service).buildIdentifikation(); - } - - @Test - void shouldHaveIdentifikation() { - var vorgangType = service.buildVorgangType(vorgang, type); - - assertThat(vorgangType.getIdentifikation()).isEqualTo(identifikationObjekt); - } - - @Test - void shouldCallBuildAllgemeineMetadaten() { - service.buildVorgangType(vorgang, type); - - verify(service).buildAllgemeineMetadaten(vorgang); - } - - @Test - void shouldHaveAllgemeineMetadaten() { - var vorgangType = service.buildVorgangType(vorgang, type); - - assertThat(vorgangType.getAllgemeineMetadaten()).isEqualTo(allgemeineMetadaten); - } - } - } - } - - @Nested - class TestBuildIdentifikation { - - @Test - void shouldHaveId() { - var identifikation = service.buildIdentifikation(); - - assertThat(identifikation.getID()).matches(TestUtils.UUID_REGEX); - } - - @Test - void shouldHaveNummerImUebergeordnetenContainer() { - var identifikation = service.buildIdentifikation(); - - assertThat(identifikation.getNummerImUebergeordnetenContainer()).isEqualTo(XDomeaService.NUMMER_IM_UEBERGEORDNETEN_CONTAINER); - } - } - - @Nested - class TestBuildAllgemeineMetadaten { - - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); - - @Test - void shouldHaveBetreff() { - var allgemeineMetadaten = service.buildAllgemeineMetadaten(vorgang); - - assertThat(allgemeineMetadaten.getBetreff()).isEqualTo(VorgangHeaderTestFactory.NAME); - } - - @Test - void shouldHaveKennzeichen() { - var allgemeineMetadaten = service.buildAllgemeineMetadaten(vorgang); - - assertThat(allgemeineMetadaten.getKennzeichen()).isEqualTo(VorgangHeaderTestFactory.NUMMER); - } - - @Test - void shouldHaveBemerkung() { - var allgemeineMetadaten = service.buildAllgemeineMetadaten(vorgang); - - assertThat(allgemeineMetadaten.getBemerkung()).isEqualTo(StringUtils.EMPTY); - } - - @Test - void shouldHaveMedium() { - var allgemeineMetadaten = service.buildAllgemeineMetadaten(vorgang); + void shouldCallAbgabeCreator() { + service.createXmlContent(vorgang); - assertThat(allgemeineMetadaten.getMedium().getCode()).isEqualTo(XDomeaMedienart.ELEKTRONISCHES_DOKUMENT.getCode()); + verify(abgabeCreator).createAbgabe(vorgang); } - } } \ No newline at end of file