diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java index 723587532155ddf5262e8a42bcfdac136b9ae25b..1901488403a73ecd3e03efdd0bfd5271dd289aee 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/export/ExportService.java @@ -54,6 +54,7 @@ class ExportService { ExportData collectExportData(String vorgangId, String filenameId) { var vorgang = exportVorgangService.getVorgang(vorgangId); var kommentarsData = exportKommentarService.createExportData(vorgang); + var postfachMailData = exportNachrichtService.createExportData(vorgang); var representations = exportFileService.getRepresentations(vorgang).toList(); var attachments = exportFileService.getAttachments(vorgang).toList(); var formEngineName = getFormEngineName(vorgang); @@ -65,9 +66,13 @@ class ExportService { .withAttachments(exportFileService.createDokumentTypes(attachments, formEngineName).toList()) .withHistorie(exportHistorieService.createHistorienProtokollInformationTypes(vorgang).toList()) .withKommentare(kommentarsData.getDokumentTypes()) - .withPostfachMails(exportNachrichtService.createDokumentTypes(vorgang).toList()) + .withPostfachMails(postfachMailData.getDokumentTypes()) .build(); - var exportFiles = Stream.of(representations.stream(), attachments.stream(), kommentarsData.getAttachments().stream()).flatMap(s -> s) + var exportFiles = Stream + .of(representations.stream(), attachments.stream(), + kommentarsData.getAttachments().stream(), + postfachMailData.getAttachments().stream()) + .flatMap(s -> s) .toList(); return ExportData.builder().abgabe(abgabe).exportFilename(buildXmlFilename(filenameId)).exportFiles(exportFiles).build(); } diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/ExportNachrichtService.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/ExportNachrichtService.java index 50fbcf08a37916657559a89c0d4ff1ddf42beb4e..b07180e50a418a05c06bbea51eee5d154a9f9c65 100644 --- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/ExportNachrichtService.java +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/ExportNachrichtService.java @@ -1,5 +1,6 @@ package de.ozgcloud.alfa.postfach; +import java.util.List; import java.util.Optional; import java.util.stream.Stream; @@ -9,6 +10,7 @@ import de.ozgcloud.alfa.common.binaryfile.BinaryFileService; import de.ozgcloud.alfa.common.file.OzgFile; import de.ozgcloud.alfa.common.user.UserProfile; import de.ozgcloud.alfa.common.user.UserService; +import de.ozgcloud.alfa.postfach.PostfachMailExportData.PostfachMailExportDataBuilder; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.xoev.xdomea.DokumentType; import lombok.RequiredArgsConstructor; @@ -20,15 +22,22 @@ public class ExportNachrichtService { private final BinaryFileService binaryFileService; private final UserService userService; - public Stream<DokumentType> createDokumentTypes(VorgangWithEingang vorgang) { - var postfachMails = postfachMailService.getAll(vorgang.getId()); - return postfachMails.map(mail -> buildDokumentType(mail, vorgang)); + public PostfachMailExportData createExportData(VorgangWithEingang vorgang) { + var builder = PostfachMailExportData.builder(); + postfachMailService.getAll(vorgang.getId()).forEach(mail -> addPostfachMailToBuilder(mail, builder, vorgang)); + return builder.build(); } - DokumentType buildDokumentType(PostfachMail postfachMail, VorgangWithEingang vorgang) { + void addPostfachMailToBuilder(PostfachMail postfachMail, PostfachMailExportDataBuilder builder, VorgangWithEingang vorgang) { + var attachments = getAttachments(postfachMail).toList(); + builder.attachments(attachments); + builder.dokumentType(buildDokumentType(postfachMail, attachments, vorgang)); + } + + DokumentType buildDokumentType(PostfachMail postfachMail, List<OzgFile> attachments, VorgangWithEingang vorgang) { return DokumentTypeBuilder.builder() .withPostfachMail(postfachMail) - .withOzgFiles(getAttachments(postfachMail).toList()) + .withOzgFiles(attachments) .withUserProfile(getUserProfile(postfachMail)) .withVorgang(vorgang) .build(); diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportData.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportData.java new file mode 100644 index 0000000000000000000000000000000000000000..7c359508b96cd8a6471be34307bd77b0044da3c7 --- /dev/null +++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/postfach/PostfachMailExportData.java @@ -0,0 +1,23 @@ +package de.ozgcloud.alfa.postfach; + +import java.util.List; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.xoev.xdomea.DokumentType; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Singular; + +@Builder +@Getter +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class PostfachMailExportData { + + @Singular + private List<DokumentType> dokumentTypes; + @Singular + private List<OzgFile> attachments; + +} 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 e287a91e90d4b0114f7c511b4bf729b0956210d7..567c55f91a45a5929001e4492dad0fe6951732d9 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 @@ -36,6 +36,8 @@ import de.ozgcloud.alfa.kommentar.ExportKommentarService; import de.ozgcloud.alfa.kommentar.KommentarsExportData; import de.ozgcloud.alfa.kommentar.KommentarsExportDataTestFactory; import de.ozgcloud.alfa.postfach.ExportNachrichtService; +import de.ozgcloud.alfa.postfach.PostfachMailExportData; +import de.ozgcloud.alfa.postfach.PostfachMailExportDataTestFactory; import de.ozgcloud.alfa.vorgang.EingangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.EingangTestFactory; import de.ozgcloud.alfa.vorgang.ExportVorgangService; @@ -132,10 +134,10 @@ class ExportServiceTest { private final List<OzgFile> attachments = List.of(OzgFileTestFactory.create()); private final List<DokumentType> representationsDokumentTypes = List.of(DokumentTypeTestFactory.create()); private final List<DokumentType> attachmentsDokumentTypes = List.of(DokumentTypeTestFactory.create()); - private final List<DokumentType> postfachMailsDokumentTypes = List.of(DokumentTypeTestFactory.create()); private final List<HistorienProtokollInformationType> historienProtokollInformationTypes = List.of( HistorienProtokollInformationTypeTestFactory.create()); private final KommentarsExportData kommentarsExportData = KommentarsExportDataTestFactory.create(); + private final PostfachMailExportData postfachMailExportData = PostfachMailExportDataTestFactory.create(); @Mock private XdomeaNachrichtBuilder xdomeaNachrichtBuilder; @@ -170,7 +172,7 @@ class ExportServiceTest { when(xdomeaNachrichtBuilder.withAttachments(attachmentsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withHistorie(historienProtokollInformationTypes)).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.withKommentare(kommentarsExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder); - when(xdomeaNachrichtBuilder.withPostfachMails(postfachMailsDokumentTypes)).thenReturn(xdomeaNachrichtBuilder); + when(xdomeaNachrichtBuilder.withPostfachMails(postfachMailExportData.getDokumentTypes())).thenReturn(xdomeaNachrichtBuilder); xdomeaNachrichtBuilderMockedStatic.when(XdomeaNachrichtBuilder::builder).thenReturn(xdomeaNachrichtBuilder); when(xdomeaNachrichtBuilder.build()).thenReturn(abgabe); } @@ -195,7 +197,7 @@ class ExportServiceTest { } private void setUpExportNachrichtService() { - when(exportNachrichtService.createDokumentTypes(vorgang)).thenReturn(postfachMailsDokumentTypes.stream()); + when(exportNachrichtService.createExportData(vorgang)).thenReturn(postfachMailExportData); } @AfterEach @@ -260,10 +262,10 @@ class ExportServiceTest { } @Test - void shouldCreatePostfachMailsDokumentTypes() { + void shouldCreatePostfachMailsExportData() { callService(); - verify(exportNachrichtService).createDokumentTypes(vorgang); + verify(exportNachrichtService).createExportData(vorgang); } @Test @@ -305,7 +307,7 @@ class ExportServiceTest { void shouldSetPostfachMails() { callService(); - verify(xdomeaNachrichtBuilder).withPostfachMails(postfachMailsDokumentTypes); + verify(xdomeaNachrichtBuilder).withPostfachMails(postfachMailExportData.getDokumentTypes()); } @Test @@ -348,10 +350,11 @@ class ExportServiceTest { var exportData = callService(); assertThat(exportData.getExportFiles()) - .hasSize(3) + .hasSize(4) .containsAll(representations) .containsAll(attachments) - .containsAll(kommentarsExportData.getAttachments()); + .containsAll(kommentarsExportData.getAttachments()) + .containsAll(postfachMailExportData.getAttachments()); } @Test diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/ExportNachrichtServiceTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/ExportNachrichtServiceTest.java index dc3880efefe6d8906f05d0a0b226757993f715ce..4a672bc5f99d293a9aafecbd8c657cf99d91e185 100644 --- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/ExportNachrichtServiceTest.java +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/ExportNachrichtServiceTest.java @@ -25,7 +25,7 @@ import de.ozgcloud.alfa.common.user.UserProfile; import de.ozgcloud.alfa.common.user.UserProfileTestFactory; import de.ozgcloud.alfa.common.user.UserService; import de.ozgcloud.alfa.export.DokumentTypeTestFactory; -import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; +import de.ozgcloud.alfa.postfach.PostfachMailExportData.PostfachMailExportDataBuilder; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import de.ozgcloud.alfa.vorgang.VorgangWithEingangTestFactory; import de.xoev.xdomea.DokumentType; @@ -46,47 +46,109 @@ class ExportNachrichtServiceTest { private BinaryFileService binaryFileService; @Nested - class TestCreateDokumentTypes { + class TestCreateExportData { + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); private final PostfachMail postfachMail = PostfachMailTestFactory.create(); + private final PostfachMailExportData exportData = PostfachMailExportDataTestFactory.create(); - private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private MockedStatic<PostfachMailExportData> postfachMailExportDataMockedStatic; + @Mock + private PostfachMailExportDataBuilder exportDataBuilder; + + @BeforeEach + void setUpMock() { + postfachMailExportDataMockedStatic = mockStatic(PostfachMailExportData.class); + postfachMailExportDataMockedStatic.when(PostfachMailExportData::builder).thenReturn(exportDataBuilder); + when(postfachMailService.getAll(vorgang.getId())).thenReturn(Stream.of(postfachMail)); + doNothing().when(service).addPostfachMailToBuilder(postfachMail, exportDataBuilder, vorgang); + when(exportDataBuilder.build()).thenReturn(exportData); + } + + @AfterEach + void tearDown() { + postfachMailExportDataMockedStatic.close(); + } @Test - void shouldCallPostfachMailServiceGetAll() { - callCreateDokumentTypes(); + void shouldLoadPostfachMails() { + callMethodToBeTested(); - verify(postfachMailService).getAll(VorgangHeaderTestFactory.ID); + verify(postfachMailService).getAll(vorgang.getId()); } @Test - void shouldCallBuildDokumentType() { - when(postfachMailService.getAll(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(postfachMail)); - doReturn(DokumentTypeTestFactory.create()).when(service).buildDokumentType(postfachMail, vorgang); + void shouldAddNachrichtToBuilder() { + callMethodToBeTested(); - callCreateDokumentTypes().toList(); + verify(service).addPostfachMailToBuilder(postfachMail, exportDataBuilder, vorgang); + } - verify(service).buildDokumentType(postfachMail, vorgang); + @Test + void shouldBuildExportData() { + callMethodToBeTested(); + + verify(exportDataBuilder).build(); } @Test - void shouldReturnBuiltDokumente() { - var expectedDokument1 = DokumentTypeTestFactory.create(); - var expectedDokument2 = DokumentTypeTestFactory.create(); - var postfachMail2 = PostfachMailTestFactory.create(); + void shouldReturnBuiltExportData() { + var result = callMethodToBeTested(); - when(postfachMailService.getAll(VorgangHeaderTestFactory.ID)).thenReturn(Stream.of(postfachMail, postfachMail2)); - doReturn(expectedDokument1).when(service).buildDokumentType(postfachMail, vorgang); - doReturn(expectedDokument2).when(service).buildDokumentType(postfachMail2, vorgang); + assertThat(result).isEqualTo(exportData); + } - var resultDokumente = callCreateDokumentTypes(); + private PostfachMailExportData callMethodToBeTested() { + return service.createExportData(vorgang); + } + } - assertThat(resultDokumente).containsExactly(expectedDokument1, expectedDokument2); + @Nested + class TestAddPostfachMailToBuilder { + private final VorgangWithEingang vorgang = VorgangWithEingangTestFactory.create(); + private final PostfachMail postfachMail = PostfachMailTestFactory.create(); + private final List<OzgFile> attachments = List.of(OzgFileTestFactory.create()); + private final DokumentType dokumentType = DokumentTypeTestFactory.create(); + + @Mock + private PostfachMailExportDataBuilder exportDataBuilder; + + @BeforeEach + void setUpMocks() { + doReturn(attachments.stream()).when(service).getAttachments(postfachMail); + doReturn(dokumentType).when(service).buildDokumentType(postfachMail, attachments, vorgang); } - private Stream<DokumentType> callCreateDokumentTypes() { - return service.createDokumentTypes(vorgang); + @Test + void shouldCallGetAttachents() { + callMethodToBeTested(); + + verify(service).getAttachments(postfachMail); + } + + @Test + void shouldAddAttachmentsToBuilder() { + callMethodToBeTested(); + + verify(exportDataBuilder).attachments(attachments); + } + + @Test + void shouldBuildDokumentType() { + callMethodToBeTested(); + + verify(service).buildDokumentType(postfachMail, attachments, vorgang); } + @Test + void shouldAddDokumentTypeToBuilder() { + callMethodToBeTested(); + + verify(exportDataBuilder).dokumentType(dokumentType); + } + + private void callMethodToBeTested() { + service.addPostfachMailToBuilder(postfachMail, exportDataBuilder, vorgang); + } } @Nested @@ -98,9 +160,7 @@ class ExportNachrichtServiceTest { @Mock private DokumentTypeBuilder dokumentTypeBuilder; - private final OzgFile ozgFile = OzgFileTestFactory.create(); - private final Stream<OzgFile> ozgFileStream = Stream.of(ozgFile); - private final List<OzgFile> ozgFileList = List.of(ozgFile); + private final List<OzgFile> ozgFileList = List.of(OzgFileTestFactory.create()); private final Optional<UserProfile> userProfile = Optional.of(UserProfileTestFactory.create()); @BeforeEach @@ -112,7 +172,6 @@ class ExportNachrichtServiceTest { when(dokumentTypeBuilder.withOzgFiles(ozgFileList)).thenReturn(dokumentTypeBuilder); when(dokumentTypeBuilder.withUserProfile(userProfile)).thenReturn(dokumentTypeBuilder); when(dokumentTypeBuilder.withVorgang(vorgang)).thenReturn(dokumentTypeBuilder); - doReturn(ozgFileStream).when(service).getAttachments(postfachMail); doReturn(userProfile).when(service).getUserProfile(postfachMail); } @@ -128,13 +187,6 @@ class ExportNachrichtServiceTest { dokumentTypeBuilderMockedStatic.verify(() -> DokumentTypeBuilder.builder()); } - @Test - void shouldCallGetOzgFiles() { - callService(); - - verify(service).getAttachments(postfachMail); - } - @Test void shouldCallGetUserProfile() { callService(); @@ -188,7 +240,7 @@ class ExportNachrichtServiceTest { } private DokumentType callService() { - return service.buildDokumentType(postfachMail, vorgang); + return service.buildDokumentType(postfachMail, ozgFileList, vorgang); } } diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportDataTestFactory.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportDataTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..df719a78a1ca42efc8bcd03484571a7acb7c04e4 --- /dev/null +++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/postfach/PostfachMailExportDataTestFactory.java @@ -0,0 +1,23 @@ +package de.ozgcloud.alfa.postfach; + +import de.ozgcloud.alfa.common.file.OzgFile; +import de.ozgcloud.alfa.common.file.OzgFileTestFactory; +import de.ozgcloud.alfa.export.DokumentTypeTestFactory; +import de.ozgcloud.alfa.postfach.PostfachMailExportData.PostfachMailExportDataBuilder; +import de.xoev.xdomea.DokumentType; + +public class PostfachMailExportDataTestFactory { + + public static final DokumentType DOKUMENT_TYPE = DokumentTypeTestFactory.create(); + public static final OzgFile OZG_FILE = OzgFileTestFactory.create(); + + public static PostfachMailExportData create() { + return createBuilder().build(); + } + + public static PostfachMailExportDataBuilder createBuilder() { + return PostfachMailExportData.builder() + .dokumentType(DOKUMENT_TYPE) + .attachment(OZG_FILE); + } +}