From 3c471be601ce81a4d5164105650147b26ea9dfdb Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 6 Nov 2024 09:28:15 +0100 Subject: [PATCH] OZG-6162 OZG-7060 Set filename in constructor --- .../export/StreamedExportedVorgangFile.java | 13 ++-- .../StreamedExportedVorgangFileTest.java | 63 +++++++++++++++---- 2 files changed, 61 insertions(+), 15 deletions(-) diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java b/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java index b51f2653ad..4e87099e63 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFile.java @@ -6,15 +6,20 @@ import java.util.Iterator; import de.ozgcloud.archive.grpc.export.GrpcExportVorgangResponse; import de.ozgcloud.common.errorhandling.TechnicalException; -import lombok.RequiredArgsConstructor; +import lombok.Getter; -@RequiredArgsConstructor class StreamedExportedVorgangFile implements ExportedVorgangFile { + @Getter + private final String fileName; private final Iterator<GrpcExportVorgangResponse> responseIterator; - @Override - public String getFileName() { + public StreamedExportedVorgangFile(Iterator<GrpcExportVorgangResponse> responseIterator) { + this.fileName = getFileNameFrom(responseIterator); + this.responseIterator = responseIterator; + } + + static String getFileNameFrom(Iterator<GrpcExportVorgangResponse> responseIterator) { if (!responseIterator.hasNext()) { throw new TechnicalException("Response is empty"); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java index 8ff133a927..293aa49bce 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/export/StreamedExportedVorgangFileTest.java @@ -7,11 +7,12 @@ import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.MockedStatic; import com.google.protobuf.ByteString; import com.thedeanda.lorem.LoremIpsum; @@ -23,11 +24,40 @@ class StreamedExportedVorgangFileTest { @Mock private Iterator<GrpcExportVorgangResponse> responseIterator; - @InjectMocks - private StreamedExportedVorgangFile exportedVorgangFile; @Nested - class TestGetFileName { + class TestContructor { + + private MockedStatic<StreamedExportedVorgangFile> mockedStatic; + + @BeforeEach + void init() { + mockedStatic = mockStatic(StreamedExportedVorgangFile.class); + mockedStatic.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); + } + + @AfterEach + void cleanup() { + mockedStatic.close(); + } + + @Test + void shouldGetFileNameFromResponseIterator() { + new StreamedExportedVorgangFile(responseIterator); + + mockedStatic.verify(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)); + } + + @Test + void shouldSetFileName() { + var exportedVorgangFile = new StreamedExportedVorgangFile(responseIterator); + + assertThat(exportedVorgangFile.getFileName()).isEqualTo(GrpcFileTestFactory.FILE_NAME); + } + } + + @Nested + class TestGetFileNameFrom { @Nested class OnEmptyResponse { @@ -39,7 +69,7 @@ class StreamedExportedVorgangFileTest { @Test void shouldThrowException() { - assertThatExceptionOfType(TechnicalException.class).isThrownBy(exportedVorgangFile::getFileName); + assertThatExceptionOfType(TechnicalException.class).isThrownBy(TestGetFileNameFrom.this::callTestedMethod); } } @@ -54,25 +84,29 @@ class StreamedExportedVorgangFileTest { @Test void shouldCallHasNext() { - exportedVorgangFile.getFileName(); + callTestedMethod(); verify(responseIterator).hasNext(); } @Test void shouldCallNextOnce() { - exportedVorgangFile.getFileName(); + callTestedMethod(); verify(responseIterator, times(1)).next(); } @Test void shouldReturnFileName() { - var fileName = exportedVorgangFile.getFileName(); + var fileName = callTestedMethod(); assertThat(fileName).isEqualTo(GrpcFileTestFactory.FILE_NAME); } } + + private String callTestedMethod() { + return StreamedExportedVorgangFile.getFileNameFrom(responseIterator); + } } @Nested @@ -84,8 +118,12 @@ class StreamedExportedVorgangFileTest { @Mock private OutputStream outputStream; + private MockedStatic<StreamedExportedVorgangFile> mockedStatic; + @BeforeEach void init() { + mockedStatic = mockStatic(StreamedExportedVorgangFile.class); + mockedStatic.when(() -> StreamedExportedVorgangFile.getFileNameFrom(responseIterator)).thenReturn(GrpcFileTestFactory.FILE_NAME); when(responseIterator.hasNext()) .thenReturn(true) .thenReturn(true) @@ -97,16 +135,19 @@ class StreamedExportedVorgangFileTest { ).build()); } + @AfterEach + void cleanup() { + mockedStatic.close(); + } + @Test void shouldWriteFileContentInOrder() throws IOException { var orderVerifier = inOrder(outputStream); - exportedVorgangFile.writeToOutputStream(outputStream); + new StreamedExportedVorgangFile(responseIterator).writeToOutputStream(outputStream); orderVerifier.verify(outputStream).write(FILE_CONTENT_1.toByteArray()); orderVerifier.verify(outputStream).write(FILE_CONTENT_2.toByteArray()); } - - } } -- GitLab