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

Merge pull request 'OZG-6922 Fix handling of unexpected zip contentType'...

Merge pull request 'OZG-6922 Fix handling of unexpected zip contentType' (#183) from OZG-6922-fix-reading-geschaeftsgang into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/eingang-manager/pulls/183


Reviewed-by: default avatarOZGCloud <ozgcloud@mgm-tp.com>
parents e8b13c2a 0d95d49b
No related branches found
No related tags found
No related merge requests found
......@@ -26,10 +26,8 @@ package de.ozgcloud.eingang.xta;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;
import java.util.stream.Stream;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import org.springframework.stereotype.Component;
import de.ozgcloud.eingang.common.formdata.IncomingFile;
......@@ -44,14 +42,11 @@ class XtaIncomingFilesMapper {
private final ZipFileExtractor zipFileExtractor;
public static final String ZIP_CONTENT_TYPE = "application/zip";
static final Predicate<IncomingFile> IS_ZIP_FILE = contentType -> ZIP_CONTENT_TYPE.equals(contentType.getContentType());
public List<IncomingFile> toIncomingFiles(Collection<XtaFile> messageFiles) {
if (Objects.nonNull(messageFiles)) {
return messageFiles.stream()
.map(this::toIncomingFile)
.flatMap(this::extractZip)
.flatMap(this::tryToExtractZip)
.toList();
}
return List.of();
......@@ -66,16 +61,11 @@ class XtaIncomingFilesMapper {
.build();
}
Stream<IncomingFile> extractZip(IncomingFile incomingFile) {
if (IS_ZIP_FILE.test(incomingFile)) {
try {
List<IncomingFile> extractedZips = zipFileExtractor.extractIncomingFilesSafely(incomingFile);
return extractedZips.stream();
} catch (RuntimeException e) {
LOG.error("Cannot read source ZIP. Not extracting file", e);
return Stream.of(incomingFile);
}
} else {
Stream<IncomingFile> tryToExtractZip(IncomingFile incomingFile) {
try {
List<IncomingFile> extractedZips = zipFileExtractor.extractIncomingFilesSafely(incomingFile);
return extractedZips.stream();
} catch (RuntimeException e) {
return Stream.of(incomingFile);
}
}
......
......@@ -27,10 +27,8 @@ import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.List;
import java.util.UUID;
import java.util.stream.Stream;
import de.ozgcloud.eingang.common.formdata.IncomingFileGroup;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
......@@ -49,8 +47,6 @@ class XtaIncomingFilesMapperTest {
@Mock
private ZipFileExtractor extractor;
private static final String ZIP_CONTENT_TYPE = "application/zip";
@Nested
class TestToIncomingFiles {
......@@ -59,12 +55,12 @@ class XtaIncomingFilesMapperTest {
var xtaFile = XtaFileTestFactory.create();
var incomingFile = IncomingFileTestFactory.create();
when(mapper.toIncomingFile(xtaFile)).thenReturn(incomingFile);
when(mapper.extractZip(incomingFile)).thenAnswer(x -> Stream.of(incomingFile));
when(mapper.tryToExtractZip(incomingFile)).thenAnswer(x -> Stream.of(incomingFile));
mapper.toIncomingFiles(List.of(xtaFile, xtaFile));
inOrder(mapper).verify(mapper, calls(2)).toIncomingFile(xtaFile);
inOrder(mapper).verify(mapper, calls(2)).extractZip(incomingFile);
inOrder(mapper).verify(mapper, calls(2)).tryToExtractZip(incomingFile);
}
@Test
......@@ -107,7 +103,7 @@ class XtaIncomingFilesMapperTest {
}
@Nested
class TestExtractZip {
class TestTryToExtractZip {
@Mock
IncomingFile outFile1;
......@@ -115,40 +111,29 @@ class XtaIncomingFilesMapperTest {
@Mock
IncomingFile outFile2;
private final IncomingFile zipFile = IncomingFileTestFactory.createBuilder()
.name("attachments.zip")
.build();
@Test
void shouldExtractZipFiles() {
var expectedExtractedFiles = List.of(outFile1, outFile2);
var zipFile = createTestIncomingFile();
when(extractor.extractIncomingFilesSafely(zipFile)).thenReturn(expectedExtractedFiles);
var extractedFiles = mapper.extractZip(zipFile).toList();
var extractedFiles = mapper.tryToExtractZip(zipFile).toList();
assertThat(extractedFiles).isEqualTo(expectedExtractedFiles);
}
IncomingFile createTestIncomingFile() {
return IncomingFileTestFactory.createBuilder()
.name("attachments.zip")
.contentType(ZIP_CONTENT_TYPE)
.build();
}
@Test
void shouldIgnoreNonZipFiles() {
when(extractor.extractIncomingFilesSafely(zipFile)).thenThrow(new RuntimeException());
var incomingFile = IncomingFileTestFactory.create();
var extractedFiles = mapper.extractZip(incomingFile).toList();
var extractedFiles = mapper.tryToExtractZip(incomingFile).toList();
assertThat(extractedFiles).containsExactly(incomingFile);
}
}
@Test
void testIsZipFilePredicate() {
assertThat(XtaIncomingFilesMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.create())).isFalse();
assertThat(XtaIncomingFilesMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.createBuilder().contentType(ZIP_CONTENT_TYPE).build()))
.isTrue();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment