From 96979feff6b474bf61d7a12a951b8c9e0054d3ef Mon Sep 17 00:00:00 2001
From: Krzysztof Witukiewicz <krzysztof.witukiewicz@mgm-tp.com>
Date: Mon, 17 Feb 2025 13:28:25 +0100
Subject: [PATCH] OZG-7608 OZG-7729 Call onCompleted in Streamer

---
 .../common/grpc/GrpcResponseBatchStreamer.java     |  1 +
 .../vorgang/vorgang/VorgangGrpcService.java        |  1 -
 .../common/grpc/GrpcResponseBatchStreamerTest.java | 14 +++++++++++++-
 .../vorgang/vorgang/VorgangGrpcServiceTest.java    |  4 ++--
 4 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java
index 5d4e591bf..7d876064b 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java
@@ -67,6 +67,7 @@ public class GrpcResponseBatchStreamer<ElemType, ResType> {
 		if (!batchIsEmpty()) {
 			sendResponse();
 		}
+		responseObserver.onCompleted();
 	}
 
 	private boolean batchIsEmpty() {
diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java
index 245a1bcd9..7a7d74628 100644
--- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java
+++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java
@@ -146,6 +146,5 @@ class VorgangGrpcService extends VorgangServiceGrpc.VorgangServiceImplBase {
 		var responseStreamer = GrpcResponseBatchStreamer.create(GrpcFindVorgangResponseBuilder::new, responseObserver);
 		vorgangService.findDeleted().map(vorgangStubMapper::toGrpcVorgangHeader).forEach(responseStreamer::send);
 		responseStreamer.finish();
-		responseObserver.onCompleted();
 	}
 }
\ No newline at end of file
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java
index 44bb51f29..e984c0a13 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java
@@ -30,6 +30,8 @@ import java.util.function.Supplier;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.Mock;
 
 import io.grpc.stub.StreamObserver;
@@ -157,7 +159,7 @@ class GrpcResponseBatchStreamerTest {
 
 			batchStreamer.finish();
 
-			verifyNoInteractions(responseObserver);
+			verify(responseObserver, never()).onNext(any());
 		}
 
 		@Test
@@ -169,6 +171,16 @@ class GrpcResponseBatchStreamerTest {
 
 			verify(responseObserver).onNext(response);
 		}
+
+		@ParameterizedTest
+		@ValueSource(ints = {0, 1})
+		void shouldCallOnCompleted(int batchSize) {
+			when(responseBuilder.getElementCount()).thenReturn(batchSize);
+
+			batchStreamer.finish();
+
+			verify(responseObserver).onCompleted();
+		}
 	}
 
 	private static class DummyResponse {
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java
index d3a0f206e..6b96a0a16 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java
@@ -573,10 +573,10 @@ class VorgangGrpcServiceTest {
 		}
 
 		@Test
-		void shouldCallOnCompleted() {
+		void shouldNotCallStreamObserverDirectly() {
 			findDeletedVorgang();
 
-			verify(responseObserver).onCompleted();
+			verifyNoInteractions(responseObserver);
 		}
 
 		@Test
-- 
GitLab