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 index 240735b34501fe979d02f97e8b45a7f848faf3db..110c39b29c1320f72900a37af7f77e2b469895b1 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DokumentTypeCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/DokumentTypeCreator.java @@ -1,7 +1,9 @@ package de.ozgcloud.alfa.export; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; @@ -9,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.vorgang.Eingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.xoev.xdomea.AllgemeineMetadatenType; import de.xoev.xdomea.DokumentType; @@ -30,7 +33,8 @@ class DokumentTypeCreator { private VersionTypeCreator versionTypeCreator; public Stream<DokumentType> createDokumentTypen(VorgangWithEingang vorgang) { - var ozgFiles = exportFileService.getAllPdfs(vorgang.getEingang().getId()).toList(); + var ozgFiles = Optional.ofNullable(vorgang.getEingang()).map(Eingang::getId).map(exportFileService::getAllPdfs).map(Stream::toList) + .orElse(Collections.emptyList()); List<DokumentType> dokumenten = new ArrayList<>(ozgFiles.size()); for (var i = 0; i < ozgFiles.size(); i++) { dokumenten.add(createDokumentType(i + 1, vorgang, ozgFiles.get(i))); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreator.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreator.java index 2e4673d6394430f9518226a354125120fbfccd60..94ae9651d325f3b22392b32d00643492fbe124a2 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreator.java @@ -1,8 +1,11 @@ package de.ozgcloud.alfa.export; +import static java.util.Optional.*; + import java.time.format.DateTimeFormatter; import java.util.List; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -24,13 +27,14 @@ class FeldGruppeTypeCreator { } List<FeldType> createFeldType(VorgangWithEingang vorgang) { + var antragsteller = ofNullable(vorgang.getEingang()).flatMap(eingang -> ofNullable(eingang.getAntragsteller())); return List.of( ExportFelder.LEIKA_ID.createFeld(), ExportFelder.DATUM_ANTRAGSEINGANG.createFeld(DateTimeFormatter.ISO_DATE_TIME.format(vorgang.getCreatedAt())), - ExportFelder.NAME.createFeld(vorgang.getEingang().getAntragsteller().getNachname()), - ExportFelder.VORNAME.createFeld(vorgang.getEingang().getAntragsteller().getVorname()), - ExportFelder.GEBURTSDATUM.createFeld(vorgang.getEingang().getAntragsteller().getGeburtsdatum()), - ExportFelder.PLZ.createFeld(vorgang.getEingang().getAntragsteller().getPlz())); + ExportFelder.NAME.createFeld(antragsteller.flatMap(a -> ofNullable(a.getNachname())).orElse(StringUtils.EMPTY)), + ExportFelder.VORNAME.createFeld(antragsteller.flatMap(a -> ofNullable(a.getVorname())).orElse(StringUtils.EMPTY)), + ExportFelder.GEBURTSDATUM.createFeld(antragsteller.flatMap(a -> ofNullable(a.getGeburtsdatum())).orElse(StringUtils.EMPTY)), + ExportFelder.PLZ.createFeld(antragsteller.flatMap(a -> ofNullable(a.getPlz())).orElse(StringUtils.EMPTY))); } } 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 index eb2878a6743cb451eae8412552e5ca2be7725f30..948ef56d838bc653435e0bd1a206a20c6175963a 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreator.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreator.java @@ -1,5 +1,8 @@ package de.ozgcloud.alfa.export; +import static java.util.Optional.*; + +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -17,7 +20,9 @@ class PrimaerdokumentTypeCreator { var primaerdokument = new PrimaerdokumentType(); primaerdokument.setDateiname(createDateiname(ozgFile)); primaerdokument.setDateinameOriginal(ozgFile.getName()); - primaerdokument.setErsteller(vorgang.getEingang().getHeader().getFormEngineName()); + var formEngineName = ofNullable(vorgang.getEingang()).flatMap( + eingang -> ofNullable(eingang.getHeader()).flatMap(header -> ofNullable(header.getFormEngineName()))).orElse(StringUtils.EMPTY); + primaerdokument.setErsteller(formEngineName); return primaerdokument; } 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 index 743f719d02220b470dc129ad4151a68f4c8a8b17..dd36ce90a40d24afe89e9aae3c0b34c4cdfc41a4 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeCreatorTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/DokumentTypeCreatorTest.java @@ -45,13 +45,10 @@ class DokumentTypeCreatorTest { 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() { + mockExportFileService(); + creator.createDokumentTypen(vorgang); verify(exportFileService).getAllPdfs(EingangTestFactory.ID); @@ -59,11 +56,31 @@ class DokumentTypeCreatorTest { @Test void shouldCreateDokumentType() { + mockExportFileService(); + creator.createDokumentTypen(vorgang); verify(creator).createDokumentType(1, vorgang, ozgFile); } + @Test + void shouldNotLoadAnyPdf() { + creator.createDokumentTypen(VorgangWithEingang.builder().eingang(null).build()); + + verify(exportFileService, never()).getAllPdfs(EingangTestFactory.ID); + } + + @Test + void shouldReturnEmptyStreamIfEingangNull() { + var result = creator.createDokumentTypen(VorgangWithEingang.builder().eingang(null).build()); + + assertThat(result).isEmpty(); + } + + private void mockExportFileService() { + when(exportFileService.getAllPdfs(EingangTestFactory.ID)).thenReturn(Stream.of(ozgFile)); + } + } @Nested diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreatorTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreatorTest.java index c735caf9b7ef10e6a683024058bb1a65795bd062..b912df3f625cecfe171bbd8b37c1c5f4ae200e2b 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreatorTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/FeldGruppeTypeCreatorTest.java @@ -3,12 +3,14 @@ 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.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.Spy; import de.ozgcloud.alfa.vorgang.AntragstellerTestFactory; +import de.ozgcloud.alfa.vorgang.EingangTestFactory; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; @@ -179,32 +181,59 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveName() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getName).isEqualTo("Name"); } @Test void shouldNotHaveBeschreibung() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getBeschreibung).isNull(); } @Test void shouldHaveWert() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.NACHNAME); } + @Test + void shouldBeEmptyStringForNullEingang() { + var mapped = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullAntragsteller() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullNachname() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang( + EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().nachname(null).build()) + .build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + @DisplayName("DatentypCode") @Nested class TestDatentypCode { @Test void shouldHaveCode() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) .isEqualTo(DatentypCode.STRING.getCode()); @@ -212,7 +241,7 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveListURI() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); @@ -220,14 +249,14 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveListVersionID() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); } } - private FeldType create() { + private FeldType create(VorgangWithEingang vorgang) { return creator.createFeldType(vorgang).stream() .filter(feldType -> feldType.getName().equals(ExportFelder.NAME.getName())) .toList().get(0); @@ -240,32 +269,59 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveName() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getName).isEqualTo("Vorname"); } @Test void shouldHaveNotHaveBeschreibung() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getBeschreibung).isNull(); } @Test void shouldHaveWert() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.VORNAME); } + @Test + void shouldBeEmptyStringForNullEingang() { + var mapped = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullAntragsteller() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullVorname() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang( + EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().vorname(null).build()) + .build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + @DisplayName("DatentypCode") @Nested class TestDatentypCode { @Test void shouldHaveCode() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) .isEqualTo(DatentypCode.STRING.getCode()); @@ -273,7 +329,7 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveListURI() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); @@ -281,14 +337,14 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveListVersionID() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); } } - private FeldType create() { + private FeldType create(VorgangWithEingang vorgang) { return creator.createFeldType(vorgang).stream() .filter(feldType -> feldType.getName().equals(ExportFelder.VORNAME.getName())) .toList().get(0); @@ -301,39 +357,66 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveName() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getName).isEqualTo("Geburtsdatum"); } @Test void shouldHaveNotHaveBeschreibung() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getBeschreibung).isNull(); } @Test void shouldHaveWert() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.GEBURTSDATUM_STR); } + @Test + void shouldBeEmptyStringForNullEingang() { + var mapped = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullAntragsteller() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullGeburtsdatum() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang( + EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().geburtsdatum(null).build()) + .build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + @DisplayName("DatentypCode") @Nested class TestDatentypCode { @Test void shouldHaveCode() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode).isEqualTo(DatentypCode.DATE.getCode()); } @Test void shouldHaveListURI() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); @@ -341,14 +424,14 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveListVersionID() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); } } - private FeldType create() { + private FeldType create(VorgangWithEingang vorgang) { return creator.createFeldType(vorgang).stream() .filter(feldType -> feldType.getName().equals(ExportFelder.GEBURTSDATUM.getName())) .toList().get(0); @@ -361,32 +444,59 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveName() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getName).isEqualTo("PLZAntragsteller"); } @Test void shouldHaveNotHaveBeschreibung() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getBeschreibung).isNull(); } @Test void shouldHaveWert() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getWert).isEqualTo(AntragstellerTestFactory.PLZ); } + @Test + void shouldBeEmptyStringForNullEingang() { + var mapped = create(VorgangWithEingangTestFactory.createBuilder().eingang(null).build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullAntragsteller() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().antragsteller(null).build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullPlz() { + var mapped = create( + VorgangWithEingangTestFactory.createBuilder().eingang( + EingangTestFactory.createBuilder().antragsteller(AntragstellerTestFactory.createBuilder().plz(null).build()) + .build()) + .build()); + + assertThat(mapped).extracting(FeldType::getWert).isEqualTo(StringUtils.EMPTY); + } + @DisplayName("DatentypCode") @Nested class TestDatentypCode { @Test void shouldHaveCode() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getCode) .isEqualTo(DatentypCode.STRING.getCode()); @@ -394,7 +504,7 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveListURI() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListURI) .isEqualTo("urn:xoev-de:xdomea:codeliste:datentyp"); @@ -402,14 +512,14 @@ class FeldGruppeTypeCreatorTest { @Test void shouldHaveListVersionID() { - var mapped = create(); + var mapped = create(vorgang); assertThat(mapped).extracting(FeldType::getDatentyp).extracting(DatentypCodeType::getListVersionID).isEqualTo("1.1"); } } - private FeldType create() { + private FeldType create(VorgangWithEingang vorgang) { return creator.createFeldType(vorgang).stream() .filter(feldType -> feldType.getName().equals(ExportFelder.PLZ.getName())) .toList().get(0); 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 index d2cea2a5a3374289b5f4c2d5b3a5a1bd31d907cc..2a6d30db25db7301c9c2d32c2e649abe2954d63c 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreatorTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/PrimaerdokumentTypeCreatorTest.java @@ -3,6 +3,7 @@ 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; @@ -14,6 +15,7 @@ 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.EingangTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; @@ -66,6 +68,40 @@ class PrimaerdokumentTypeCreatorTest { } } + @Nested + class TestErsteller { + + private final OzgFile ozgFile = OzgFileTestFactory.create(); + + @Test + void shouldBeEmptyStringForNullEingang() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); + var primaerdokument = creator.createPrimaerdokumentType(vorgang, ozgFile); + + assertThat(primaerdokument.getErsteller()).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullEingangHeader() { + var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(EingangTestFactory.createBuilder().header(null).build()).build(); + + var primaerdokument = creator.createPrimaerdokumentType(vorgang, ozgFile); + + assertThat(primaerdokument.getErsteller()).isEqualTo(StringUtils.EMPTY); + } + + @Test + void shouldBeEmptyStringForNullFormEngineName() { + var vorgang = VorgangWithEingangTestFactory.createBuilder() + .eingang(EingangTestFactory.createBuilder().header(EingangHeaderTestFactory.createBuilder().formEngineName(null).build()).build()) + .build(); + + var primaerdokument = creator.createPrimaerdokumentType(vorgang, ozgFile); + + assertThat(primaerdokument.getErsteller()).isEqualTo(StringUtils.EMPTY); + } + } + @Nested class TestCreateDateiname {