Skip to content
Snippets Groups Projects
Commit 5c4ee5cd authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-6748 KOP-2750 Delete formdata files after createVorgang

parent 40114651
No related branches found
No related tags found
No related merge requests found
...@@ -23,25 +23,64 @@ ...@@ -23,25 +23,64 @@
*/ */
package de.ozgcloud.eingang.router; package de.ozgcloud.eingang.router;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.formdata.FormHeader;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.ServiceKonto;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.log4j.Log4j2;
@AllArgsConstructor @AllArgsConstructor
@Service @Service
@Log4j2
public class VorgangService { public class VorgangService {
private final VorgangRemoteService remoteService; private final VorgangRemoteService remoteService;
public String createVorgang(FormData formData) { public String createVorgang(FormData formData) {
return createVorgangForOrganisationsEinheitIds(getOrganisationsEinheitIds(formData), preserveConsistency(formData)); var vorgangId = createVorgangForOrganisationsEinheitIds(getOrganisationsEinheitIds(formData), preserveConsistency(formData));
cleanupFormDataFiles(formData);
return vorgangId;
}
void cleanupFormDataFiles(FormData formData) {
getFormDataFiles(formData)
.map(IncomingFile::getFile)
.map(File::toPath)
.forEach(this::deleteIncomingFile);
}
void deleteIncomingFile(Path path) {
try {
Files.deleteIfExists(path);
} catch (IOException e) {
logErrorOnDeleteFailure(e);
}
}
void logErrorOnDeleteFailure(Exception e) {
LOG.error("Failed to delete temp-file of incoming file!", e);
}
Stream<IncomingFile> getFormDataFiles(FormData formData) {
return Stream.concat(
formData.getRepresentations().stream(),
formData.getAttachments().stream()
.map(IncomingFileGroup::getFiles)
.flatMap(List::stream)
);
} }
String createVorgangForOrganisationsEinheitIds(List<String> organisationsEinheitIds, FormData preparedFormData) { String createVorgangForOrganisationsEinheitIds(List<String> organisationsEinheitIds, FormData preparedFormData) {
......
...@@ -29,8 +29,12 @@ import static org.assertj.core.api.Assertions.*; ...@@ -29,8 +29,12 @@ import static org.assertj.core.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
...@@ -44,6 +48,8 @@ import de.ozgcloud.eingang.common.formdata.FormData; ...@@ -44,6 +48,8 @@ import de.ozgcloud.eingang.common.formdata.FormData;
import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory;
import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.formdata.FormHeader;
import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory; import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory;
import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.ServiceKonto;
import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory;
import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory;
...@@ -56,19 +62,20 @@ class VorgangServiceTest { ...@@ -56,19 +62,20 @@ class VorgangServiceTest {
@Mock @Mock
private VorgangRemoteService remoteService; private VorgangRemoteService remoteService;
private final FormData formData = FormDataTestFactory.create();
@DisplayName("Create vorgang") @DisplayName("Create vorgang")
@Nested @Nested
class TestCreateVorgang { class TestCreateVorgang {
private final FormData formData = FormDataTestFactory.create();
private final FormData preservedFormData = FormDataTestFactory.create(); private final FormData preservedFormData = FormDataTestFactory.create();
private final List<String> organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); private final List<String> organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID);
@BeforeEach @BeforeEach
void mockEingangMapper() { void mockEingangMapper() {
doReturn(preservedFormData).when(service).preserveConsistency(formData); doReturn(preservedFormData).when(service).preserveConsistency(any());
doReturn(organisationseinheitIds).when(service).getOrganisationsEinheitIds(any()); doReturn(organisationseinheitIds).when(service).getOrganisationsEinheitIds(any());
doReturn(VORGANG_ID).when(service).createVorgangForOrganisationsEinheitIds(organisationseinheitIds, preservedFormData); doReturn(VORGANG_ID).when(service).createVorgangForOrganisationsEinheitIds(any(), any());
doNothing().when(service).cleanupFormDataFiles(any());
} }
@Test @Test
...@@ -102,11 +109,99 @@ class VorgangServiceTest { ...@@ -102,11 +109,99 @@ class VorgangServiceTest {
assertThat(vorgangId).isEqualTo(VORGANG_ID); assertThat(vorgangId).isEqualTo(VORGANG_ID);
} }
@DisplayName("should call cleanup form data files")
@Test
void shouldCallCleanupFormDataFiles() {
callCreateVorgang();
verify(service).cleanupFormDataFiles(formData);
}
private String callCreateVorgang() { private String callCreateVorgang() {
return service.createVorgang(formData); return service.createVorgang(formData);
} }
} }
@DisplayName("cleanup form data files")
@Nested
class TestCleanupFormDataFiles {
private final IncomingFile incomingFile = IncomingFileTestFactory.create();
@BeforeEach
void mock() {
doReturn(Stream.of(incomingFile)).when(service).getFormDataFiles(formData);
}
@DisplayName("should call delete incoming file")
@Test
void shouldCallDeleteIncomingFile() {
service.cleanupFormDataFiles(formData);
verify(service).deleteIncomingFile(incomingFile.getFile().toPath());
}
}
@DisplayName("get form data files")
@Nested
class TestGetFormDataFiles {
private final FormData formData = FormDataTestFactory.create();
@BeforeEach
void mock() {
}
@DisplayName("should return attachments and representations")
@Test
void shouldReturnAttachmentsAndRepresentations() {
var files = service.getFormDataFiles(formData).toList();
assertThat(files).hasSize(3);
}
}
@DisplayName("delete incoming file")
@Nested
class TestDeleteIncomingFile {
@Mock
Path path;
@DisplayName("should call deleteIfExists")
@Test
void shouldCallDeleteIfExists() {
try (var staticMock = mockStatic(Files.class)) {
service.deleteIncomingFile(path);
staticMock.verify(() -> Files.deleteIfExists(path));
}
}
@DisplayName("should return")
@Test
void shouldReturn() {
try (var staticMock = mockStatic(Files.class)) {
staticMock.when(() -> Files.deleteIfExists(path)).thenReturn(true);
service.deleteIncomingFile(path);
}
}
@DisplayName("should log on error")
@Test
void shouldLogOnError() {
var exception = new IOException();
try (var staticMock = mockStatic(Files.class)) {
staticMock.when(() -> Files.deleteIfExists(path)).thenThrow(exception);
service.deleteIncomingFile(path);
verify(service).logErrorOnDeleteFailure(exception);
}
}
}
@DisplayName("create vorgang for organisationsEinheitIds") @DisplayName("create vorgang for organisationsEinheitIds")
@Nested @Nested
class TestCreateVorgangForOrganisationsEinheitIds { class TestCreateVorgangForOrganisationsEinheitIds {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment