diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java index b2e764890e9a0ba6997c4d3dff0e03e4aca51017..b97093224e299529603354f5f9a2d03172753cd6 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilder.java @@ -31,11 +31,13 @@ public class PrimaerdokumentTypeBuilder { } public PrimaerdokumentType build() { - var primaerdokument = new PrimaerdokumentType(); - if (ozgFile != null) { - primaerdokument.setDateiname(ExportFilenameGenerator.generateExportFilename(ozgFile)); - primaerdokument.setDateinameOriginal(ozgFile.getName()); + if (ozgFile == null) { + throw new IllegalStateException("Can not build Primaerdokument when ozg file is null"); } + + var primaerdokument = new PrimaerdokumentType(); + primaerdokument.setDateiname(ExportFilenameGenerator.generateExportFilename(ozgFile)); + primaerdokument.setDateinameOriginal(ozgFile.getName()); primaerdokument.setErsteller(ersteller); if (createdAt != null) { primaerdokument.setDatumUhrzeit(DateConverter.toXmlGregorianCalendar(createdAt)); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java index cc24f2e704bc7184fae776617db700bb6515771f..8840c0ac344b8d8d84fde3d7d48a96ec76794267 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportConfiguration.java @@ -5,11 +5,13 @@ import java.util.Map; import jakarta.xml.bind.Marshaller; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.oxm.jaxb.Jaxb2Marshaller; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor @Configuration class ExportConfiguration { @@ -17,8 +19,7 @@ class ExportConfiguration { static final String PROPERTY_NAMESPACE_PREFIX_MAPPER = "org.glassfish.jaxb.namespacePrefixMapper"; static final String CONTEXT_PATH = "de.xoev.xdomea"; - @Autowired - private XdomeaNamespacePrefixMapper prefixMapper; + private final XdomeaNamespacePrefixMapper prefixMapper; @Bean Jaxb2Marshaller marshaller() { diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java index 45dfdb51563cd3d7c0fe048fa9172fb154b252cb..1f0e6db45378dda2b1e8a2d07d99a071f03fb821 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/XdomeaNachrichtBuilder.java @@ -57,18 +57,26 @@ class XdomeaNachrichtBuilder { } public AbgabeAbgabe0401 build() { - representations.forEach(vorgang.getDokument()::add); - attachments.forEach(vorgang.getDokument()::add); - kommentare.forEach(vorgang.getDokument()::add); + var schriftgutobjekt = createSchriftgutobjekt(); + addVorgangDokumente(); var abgabeType = new AbgabeAbgabe0401(); abgabeType.setKopf(kopf); + abgabeType.getSchriftgutobjekt().add(schriftgutobjekt); + return abgabeType; + } + private Schriftgutobjekt createSchriftgutobjekt() { var schriftgutobjekt = new Schriftgutobjekt(); schriftgutobjekt.setVorgang(vorgang); schriftgutobjekt.setAkte(aktenzeichen); - abgabeType.getSchriftgutobjekt().add(schriftgutobjekt); - return abgabeType; + return schriftgutobjekt; + } + + void addVorgangDokumente() { + representations.forEach(vorgang.getDokument()::add); + attachments.forEach(vorgang.getDokument()::add); + kommentare.forEach(vorgang.getDokument()::add); } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java index 651f195bc7784f8a7f23dbea965da9686dd04a4b..e927b380f5a9ea4731a30347a20091404f23a0aa 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/file/DokumentTypeBuilder.java @@ -10,6 +10,7 @@ import de.xoev.xdomea.DokumentType; import de.xoev.xdomea.FormatType; import de.xoev.xdomea.IdentifikationObjektType; import de.xoev.xdomea.MediumCodeType; +import de.xoev.xdomea.PrimaerdokumentType; import de.xoev.xdomea.VersionType; import lombok.AccessLevel; import lombok.NoArgsConstructor; @@ -48,12 +49,7 @@ public class DokumentTypeBuilder { dokumentType.setIdentifikation(createIdentifikation()); dokumentType.setAllgemeineMetadaten(createAllgemeineMetadaten()); dokumentType.getVersion().add(createVersionType()); - dokumentType.getVersion().get(0).getFormat().get(0).setPrimaerdokument( - PrimaerdokumentTypeBuilder.builder() - .withOzgFile(ozgFile) - .withErsteller(formEngineName) - .build() - ); + dokumentType.getVersion().get(0).getFormat().get(0).setPrimaerdokument(createPrimaerdokument()); return dokumentType; } @@ -93,4 +89,11 @@ public class DokumentTypeBuilder { mediumCode.setCode(ALLGEMEINE_METADATEN_MEDIUM_CODE); return mediumCode; } + + PrimaerdokumentType createPrimaerdokument() { + return PrimaerdokumentTypeBuilder.builder() + .withOzgFile(ozgFile) + .withErsteller(formEngineName) + .build(); + } } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java index 9365c58f7075c8159f0b1ce2dba513d846c7c491..b5b8a45e9e650bc8e193de707b082ec057e8758f 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java @@ -9,8 +9,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import jakarta.validation.constraints.NotNull; - import org.springframework.stereotype.Component; import de.ozgcloud.alfa.common.DateConverter; @@ -28,7 +26,7 @@ class FormDataMapper { private final DatatypeMapper datatypeMapper; - public Antragsdaten toAntragsdaten(@NotNull VorgangWithEingang vorgang) { + public Antragsdaten toAntragsdaten(VorgangWithEingang vorgang) { var antragsdaten = new Antragsdaten(); antragsdaten.getItem().addAll(mapFormData(vorgang)); antragsdaten.getItem().addAll(mapOtherData(vorgang)); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java index 020607af3d231c567a66212f46c61f8bea63b671..6cb3903532e148f066ce17718fb90ef3e3580e0a 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/common/PrimaerdokumentTypeBuilderTest.java @@ -16,7 +16,7 @@ import de.ozgcloud.alfa.common.file.OzgFileTestFactory; class PrimaerdokumentTypeBuilderTest { - private final PrimaerdokumentTypeBuilder builder = PrimaerdokumentTypeBuilder.builder(); + private final PrimaerdokumentTypeBuilder builder = PrimaerdokumentTypeBuilder.builder().withOzgFile(OzgFileTestFactory.create()); @Nested class TestBuild { @@ -46,13 +46,6 @@ class PrimaerdokumentTypeBuilderTest { exportFilenameGeneratorMockedStatic.verify(() -> ExportFilenameGenerator.generateExportFilename(ozgFile)); } - @Test - void shouldNotGenerateExportFilename() { - builder.build(); - - exportFilenameGeneratorMockedStatic.verify(() -> ExportFilenameGenerator.generateExportFilename(null), never()); - } - @Test void shouldHaveDateiname() { var primaerdokumentType = builder.withOzgFile(ozgFile).build(); @@ -74,13 +67,6 @@ class PrimaerdokumentTypeBuilderTest { assertThat(primaerdokumentType.getDateinameOriginal()).isEqualTo(OzgFileTestFactory.NAME); } - @Test - void shouldNotHaveDateinameOriginal() { - var primaerdokumentType = builder.build(); - - assertThat(primaerdokumentType.getDateinameOriginal()).isNull(); - } - @Test void shouldHaveErsteller() { var primaerdokumentType = builder.withErsteller(ERSTELLER).build(); @@ -108,6 +94,11 @@ class PrimaerdokumentTypeBuilderTest { assertThat(primaerdokumentType.getDatumUhrzeit().getYear()).isNegative(); } + + @Test + void shouldThrowIllegalgStateException() { + assertThatThrownBy(() -> builder.withOzgFile(null).build()).isInstanceOf(IllegalStateException.class); + } } } \ No newline at end of file diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java index 3042b94e020f3c3e9d34240bc04407b90bfc7483..ff7fb7bdd34403759f8ca946d467d3b59ba1654e 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/export/ExportServiceTest.java @@ -110,6 +110,8 @@ class ExportServiceTest { @Nested class TestCollectExportData { + private MockedStatic<XdomeaNachrichtBuilder> xdomeaNachrichtBuilderMockedStatic; + private static final String FILENAME_ID = UUID.randomUUID().toString(); private static final String FILE_NAME = "file.zip"; private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); @@ -123,24 +125,40 @@ class ExportServiceTest { private final List<DokumentType> attachmentsDokumentTypes = List.of(DokumentTypeTestFactory.create()); private final List<DokumentType> kommentareDokumentTypes = List.of(DokumentTypeTestFactory.create()); - private final MockedStatic<XdomeaNachrichtBuilder> xdomeaNachrichtBuilderMockedStatic = mockStatic(XdomeaNachrichtBuilder.class); @Mock private XdomeaNachrichtBuilder xdomeaNachrichtBuilder; @BeforeEach void setUp() { + setUpVorgangService(); + setUpXdomeaNachrichtBuilder(); + setUpExportFileService(); + + doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID); + doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang); + + } + + private void setUpVorgangService() { when(exportVorgangService.getVorgang(VorgangHeaderTestFactory.ID)).thenReturn(vorgang); when(exportVorgangService.createVorgangType(vorgang)).thenReturn(vorgangType); when(exportVorgangService.createKopf(vorgang)).thenReturn(kopfType); when(exportVorgangService.createAkteType(vorgang)).thenReturn(akteType); + } + private void setUpXdomeaNachrichtBuilder() { + xdomeaNachrichtBuilderMockedStatic = mockStatic(XdomeaNachrichtBuilder.class); when(xdomeaNachrichtBuilder.withKopf(kopfType)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withVorgang(vorgangType)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withAktenzeichen(akteType)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withRepresentations(representationsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withAttachments(attachmentsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withKommentare(kommentareDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); + xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe); + } + private void setUpExportFileService() { mockStreamToList(representations, stream -> when(exportFileService.getRepresentations(vorgang)).thenReturn(stream)); mockStreamToList(attachments, stream -> when(exportFileService.getAttachments(vorgang)).thenReturn(stream)); mockStreamToList(representationsDokumentTypes, @@ -150,13 +168,6 @@ class ExportServiceTest { mockStreamToList(attachmentsDokumentTypes, stream -> when(exportFileService.createDokumentTypes(attachments, EingangHeaderTestFactory.FORM_ENGINE_NAME)).thenReturn(stream)); mockStreamToList(kommentareDokumentTypes, stream -> when(exportKommentarService.createDokumentTypes(vorgang)).thenReturn(stream)); - - doReturn(FILE_NAME).when(service).buildXmlFilename(FILENAME_ID); - doReturn(EingangHeaderTestFactory.FORM_ENGINE_NAME).when(service).getFormEngineName(vorgang); - - when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe); - - xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder); } @AfterEach @@ -529,7 +540,7 @@ class ExportServiceTest { class TestGetFormEngineName { @Test - void shouldReturnEmptyOnNullEingang() { + void shouldReturnEmptyStringOnNullEingang() { var vorgang = VorgangWithEingangTestFactory.createBuilder().eingang(null).build(); var formEngineName = service.getFormEngineName(vorgang); diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java index e77319c32f2fb2139f2345af96390e53265d94b4..4c22c5ed9f4d5614dac9e71114ad0f661d7b7eae 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/file/DokumentTypeBuilderTest.java @@ -54,31 +54,17 @@ class DokumentTypeBuilderTest { @Nested class TestBuild { - private MockedStatic<PrimaerdokumentTypeBuilder> primaerdokumentTypeBuilderMockedStatic; - @Mock - private PrimaerdokumentTypeBuilder primaerdokumentTypeBuilder; - private final IdentifikationObjektType identifikationObjekt = IdentifikationObjektTypeTestFactory.create(); private final AllgemeineMetadatenType allgemeineMetadaten = AllgemeineMetadatenTypeTestFactory.create(); private final VersionType versionType = VersionTypeTestFactory.create(); - private final PrimaerdokumentType primaerdokumentType = PrimaerdokumentTypeTestFactory.create(); + private final PrimaerdokumentType primaerdokument = PrimaerdokumentTypeTestFactory.create(); @BeforeEach void setUp() { - primaerdokumentTypeBuilderMockedStatic = mockStatic(PrimaerdokumentTypeBuilder.class); - primaerdokumentTypeBuilderMockedStatic.when(PrimaerdokumentTypeBuilder::builder).thenReturn(primaerdokumentTypeBuilder); - doReturn(identifikationObjekt).when(builder).createIdentifikation(); doReturn(versionType).when(builder).createVersionType(); doReturn(allgemeineMetadaten).when(builder).createAllgemeineMetadaten(); - when(primaerdokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(primaerdokumentTypeBuilder); - when(primaerdokumentTypeBuilder.withErsteller(FORM_ENGINE_NAME)).thenReturn(primaerdokumentTypeBuilder); - when(primaerdokumentTypeBuilder.build()).thenReturn(primaerdokumentType); - } - - @AfterEach - void tearDown() { - primaerdokumentTypeBuilderMockedStatic.close(); + doReturn(primaerdokument).when(builder).createPrimaerdokument(); } @Test @@ -124,32 +110,19 @@ class DokumentTypeBuilderTest { } @Test - void shouldPrimaerdokumentWithOzgFile() { - builder.build(); - - verify(primaerdokumentTypeBuilder).withOzgFile(ozgFile); - } - - @Test - void shouldPrimaerdokumentWithErsteller() { - builder.build(); - - verify(primaerdokumentTypeBuilder).withErsteller(FORM_ENGINE_NAME); - } - - @Test - void shouldBuildPrimaerdokumentType() { + void shouldCreatePrimaerdokument() { builder.build(); - verify(primaerdokumentTypeBuilder).build(); + verify(builder).createPrimaerdokument(); } @Test void shouldHavePrimaerdokument() { var dokument = builder.build(); - assertThat(dokument.getVersion().get(0).getFormat().get(0).getPrimaerdokument()).isEqualTo(primaerdokumentType); + assertThat(dokument.getVersion().get(0).getFormat().get(0).getPrimaerdokument()).isEqualTo(primaerdokument); } + } @Nested @@ -195,14 +168,14 @@ class DokumentTypeBuilderTest { } @Test - void shouldHaveKennzeichen() { + void shouldHaveEmptyKennzeichen() { var allgemeineMetadaten = builder.createAllgemeineMetadaten(); assertThat(allgemeineMetadaten.getKennzeichen()).isEmpty(); } @Test - void shouldHaveBemerkung() { + void shouldHaveEmptyBemerkung() { var allgemeineMetadaten = builder.createAllgemeineMetadaten(); assertThat(allgemeineMetadaten.getBemerkung()).isEmpty(); @@ -275,4 +248,56 @@ class DokumentTypeBuilderTest { } } + @Nested + class TestCreatePrimaerdokument { + + private MockedStatic<PrimaerdokumentTypeBuilder> primaerdokumentTypeBuilderMockedStatic; + @Mock + private PrimaerdokumentTypeBuilder primaerdokumentTypeBuilder; + + private final PrimaerdokumentType primaerdokumentType = PrimaerdokumentTypeTestFactory.create(); + + @BeforeEach + void setUp() { + primaerdokumentTypeBuilderMockedStatic = mockStatic(PrimaerdokumentTypeBuilder.class); + primaerdokumentTypeBuilderMockedStatic.when(PrimaerdokumentTypeBuilder::builder).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.withOzgFile(ozgFile)).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.withErsteller(FORM_ENGINE_NAME)).thenReturn(primaerdokumentTypeBuilder); + when(primaerdokumentTypeBuilder.build()).thenReturn(primaerdokumentType); + } + + @AfterEach + void tearDown() { + primaerdokumentTypeBuilderMockedStatic.close(); + } + + @Test + void shouldCreatePrimaerdokumentWithOzgFile() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).withOzgFile(ozgFile); + } + + @Test + void shouldCreatePrimaerdokumentWithErsteller() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).withErsteller(FORM_ENGINE_NAME); + } + + @Test + void shouldBuildPrimaerdokument() { + builder.createPrimaerdokument(); + + verify(primaerdokumentTypeBuilder).build(); + } + + @Test + void shouldReturnBuildPrimaerdokument() { + var primaerdokument = builder.createPrimaerdokument(); + + assertThat(primaerdokument).isEqualTo(primaerdokument); + } + } + } \ No newline at end of file