Skip to content
Snippets Groups Projects
Commit 2bcc2d62 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-4238 OZG-4359 implement null safety for Eingangsdaten

parent 875b3354
No related branches found
No related tags found
No related merge requests found
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)));
......
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)));
}
}
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;
}
......
......@@ -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
......
......@@ -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);
......
......@@ -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 {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment