From 0fcf18d7b7704029be1db3ca9bd2da269f87047c Mon Sep 17 00:00:00 2001
From: Krzysztof Witukiewicz <krzysztof.witukiewicz@mgm-tp.com>
Date: Tue, 18 Feb 2025 10:07:46 +0100
Subject: [PATCH] OZG-7608 OZG-7736 Implement findDeleted

---
 .../vorgang/OzgCloudVorgangService.java       | 11 +++--
 .../grpc/GrpcOzgCloudVorgangService.java      | 42 +++++++++++-----
 .../grpc/OzgCloudVorgangStubMapper.java       |  2 +-
 .../apilib/vorgang/grpc/StreamingUtils.java   | 41 ++++++++++++++++
 .../OzgCloudVorgangStubTestFactory.java       |  6 ++-
 ...cFindDeletedVorgangRequestTestFactory.java | 37 ++++++++++++++
 ...FindDeletedVorgangResponseTestFactory.java | 37 ++++++++++++++
 .../grpc/GrpcOzgCloudVorgangServiceTest.java  | 46 ++++++++++++++++--
 .../grpc/OzgCloudVorgangStubMapperTest.java   | 48 +++++++++++++++++++
 .../vorgang/grpc/StreamingUtilsTest.java      | 47 ++++++++++++++++++
 pom.xml                                       |  2 +-
 11 files changed, 295 insertions(+), 24 deletions(-)
 create mode 100644 api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtils.java
 create mode 100644 api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangRequestTestFactory.java
 create mode 100644 api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangResponseTestFactory.java
 create mode 100644 api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapperTest.java
 create mode 100644 api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtilsTest.java

diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangService.java
index 15fee3d..99632a6 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangService.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangService.java
@@ -24,14 +24,17 @@
 package de.ozgcloud.apilib.vorgang;
 
 import java.util.List;
+import java.util.stream.Stream;
 
 public interface OzgCloudVorgangService {
 
-	public OzgCloudVorgang getById(OzgCloudVorgangId vorgangId);
+	OzgCloudVorgang getById(OzgCloudVorgangId vorgangId);
 
-	public List<OzgCloudVorgangStub> find(OzgCloudVorgangQuery query, Page page);
+	List<OzgCloudVorgangStub> find(OzgCloudVorgangQuery query, Page page);
 
-	public List<OzgCloudVorgangStub> search(String searchString);
+	List<OzgCloudVorgangStub> search(String searchString);
 
-	public List<OzgCloudVorgangStub> search(String searchString, Page page);
+	List<OzgCloudVorgangStub> search(String searchString, Page page);
+
+	Stream<OzgCloudVorgangStub> findDeleted();
 }
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java
index 07d2799..e3eef07 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangService.java
@@ -23,7 +23,10 @@
  */
 package de.ozgcloud.apilib.vorgang.grpc;
 
+import static de.ozgcloud.apilib.vorgang.grpc.StreamingUtils.*;
+
 import java.util.List;
+import java.util.stream.Stream;
 
 import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextAttachingInterceptor;
 import de.ozgcloud.apilib.common.callcontext.OzgCloudCallContextProvider;
@@ -34,6 +37,8 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangService;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub;
 import de.ozgcloud.apilib.vorgang.Page;
 import de.ozgcloud.vorgang.vorgang.GrpcFilterBy;
+import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangRequest;
+import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangResponse;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest.GrpcOrderBy;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
@@ -63,8 +68,8 @@ public class GrpcOzgCloudVorgangService implements OzgCloudVorgangService {
 
 	private GrpcFindVorgangWithEingangRequest buildRequest(@NonNull OzgCloudVorgangId vorgangId) {
 		return GrpcFindVorgangWithEingangRequest.newBuilder()
-				.setId(vorgangId.toString())
-				.build();
+			.setId(vorgangId.toString())
+			.build();
 	}
 
 	@Override
@@ -81,12 +86,12 @@ public class GrpcOzgCloudVorgangService implements OzgCloudVorgangService {
 
 	GrpcFindVorgangRequest buildSearchRequest(@NonNull String searchString, Page page) {
 		return GrpcFindVorgangRequest.newBuilder()
-				.setFilterBy(GrpcFilterBy.newBuilder().build())
-				.setSearchBy(searchString)
-				.setOffset(page.getOffset())
-				.setLimit(page.getLimit())
-				.setOrderBy(GrpcOrderBy.CREATED_AT_DESC)
-				.build();
+			.setFilterBy(GrpcFilterBy.newBuilder().build())
+			.setSearchBy(searchString)
+			.setOffset(page.getOffset())
+			.setLimit(page.getLimit())
+			.setOrderBy(GrpcOrderBy.CREATED_AT_DESC)
+			.build();
 	}
 
 	@Override
@@ -98,11 +103,22 @@ public class GrpcOzgCloudVorgangService implements OzgCloudVorgangService {
 
 	GrpcFindVorgangRequest buildFindRequest(OzgCloudVorgangQuery query, Page page) {
 		return GrpcFindVorgangRequest.newBuilder()
-				.setLimit(page.getLimit())
-				.setOffset(page.getOffset())
-				.setQuery(queryMapper.toGrpc(query))
-				.setOrderBy(GrpcOrderBy.CREATED_AT_DESC)
-				.build();
+			.setLimit(page.getLimit())
+			.setOffset(page.getOffset())
+			.setQuery(queryMapper.toGrpc(query))
+			.setOrderBy(GrpcOrderBy.CREATED_AT_DESC)
+			.build();
+	}
+
+	@Override
+	public Stream<OzgCloudVorgangStub> findDeleted() {
+		return getFindDeletedVorgangResponses()
+			.flatMap(response -> response.getVorgangList().stream())
+			.map(stubMapper::fromGrpc);
+	}
+
+	private Stream<GrpcFindDeletedVorgangResponse> getFindDeletedVorgangResponses() {
+		return asStream(getVorgangServiceStub().findDeletedVorgang(GrpcFindDeletedVorgangRequest.newBuilder().build()));
 	}
 
 	VorgangServiceBlockingStub getVorgangServiceStub() {
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapper.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapper.java
index 505ed00..e7e046b 100644
--- a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapper.java
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapper.java
@@ -34,8 +34,8 @@ import de.ozgcloud.vorgang.vorgang.GrpcVorgangHeader;
 public interface OzgCloudVorgangStubMapper {
 
 	@Mapping(target = "header", ignore = true)
-	@Mapping(target = "vorgangName", ignore = true)
 	@Mapping(target = "vorgangNummer", ignore = true)
+	@Mapping(target = "vorgangName", source = "name")
 	OzgCloudVorgangStub fromGrpc(GrpcVorgangHeader vorgang);
 
 }
diff --git a/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtils.java b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtils.java
new file mode 100644
index 0000000..b87fd47
--- /dev/null
+++ b/api-lib-core/src/main/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtils.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.apilib.vorgang.grpc;
+
+import java.util.Iterator;
+import java.util.Spliterators;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+class StreamingUtils {
+
+	static <T> Stream<T> asStream(Iterator<T> iterator) {
+		var spliterator = Spliterators.spliteratorUnknownSize(iterator, 0);
+		return StreamSupport.stream(spliterator, false);
+	}
+}
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangStubTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangStubTestFactory.java
index 36bc81e..a7fa49c 100644
--- a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangStubTestFactory.java
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/OzgCloudVorgangStubTestFactory.java
@@ -30,6 +30,10 @@ public class OzgCloudVorgangStubTestFactory {
 	}
 
 	public static OzgCloudVorgangStub.OzgCloudVorgangStubBuilder createBuilder() {
-		return OzgCloudVorgangStub.builder();
+		return OzgCloudVorgangStub.builder()
+			.id(OzgCloudVorgangTestFactory.ID)
+			.version(OzgCloudVorgangTestFactory.VERSION)
+			.vorgangName(OzgCloudVorgangTestFactory.VORGANG_NAME)
+			.header(OzgCloudVorgangHeaderTestFactory.create());
 	}
 }
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangRequestTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangRequestTestFactory.java
new file mode 100644
index 0000000..a32ce76
--- /dev/null
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangRequestTestFactory.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.apilib.vorgang.grpc;
+
+import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangRequest;
+
+class GrpcFindDeletedVorgangRequestTestFactory {
+
+	public static GrpcFindDeletedVorgangRequest create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcFindDeletedVorgangRequest.Builder createBuilder() {
+		return GrpcFindDeletedVorgangRequest.newBuilder();
+	}
+}
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangResponseTestFactory.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangResponseTestFactory.java
new file mode 100644
index 0000000..ce958c2
--- /dev/null
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcFindDeletedVorgangResponseTestFactory.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.apilib.vorgang.grpc;
+
+import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangResponse;
+
+class GrpcFindDeletedVorgangResponseTestFactory {
+
+	public static GrpcFindDeletedVorgangResponse create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcFindDeletedVorgangResponse.Builder createBuilder() {
+		return GrpcFindDeletedVorgangResponse.newBuilder().addVorgang(GrpcVorgangHeaderTestFactory.create());
+	}
+}
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java
index ce736ca..a6fdf18 100644
--- a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/GrpcOzgCloudVorgangServiceTest.java
@@ -44,6 +44,8 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStub;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStubTestFactory;
 import de.ozgcloud.apilib.vorgang.OzgCloudVorgangTestFactory;
 import de.ozgcloud.apilib.vorgang.Page;
+import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangRequest;
+import de.ozgcloud.vorgang.vorgang.GrpcFindDeletedVorgangResponse;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangRequest;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangResponse;
 import de.ozgcloud.vorgang.vorgang.GrpcFindVorgangWithEingangRequest;
@@ -148,7 +150,7 @@ class GrpcOzgCloudVorgangServiceTest {
 
 			private static final GrpcVorgangHeader VORGANG = GrpcVorgangHeaderTestFactory.create();
 			private static final GrpcFindVorgangResponse RESPONSE = GrpcFindVorgangResponse.newBuilder()
-					.addVorgang(VORGANG).build();
+				.addVorgang(VORGANG).build();
 
 			@BeforeEach
 			void init() {
@@ -248,9 +250,9 @@ class GrpcOzgCloudVorgangServiceTest {
 	class TestBuildFindRequest {
 
 		private final Page page = Page.builder()
-				.limit(GrpcFindVorgangRequestTestFactory.LIMIT)
-				.offset(GrpcFindVorgangRequestTestFactory.OFFSET)
-				.build();
+			.limit(GrpcFindVorgangRequestTestFactory.LIMIT)
+			.offset(GrpcFindVorgangRequestTestFactory.OFFSET)
+			.build();
 
 		private final OzgCloudVorgangQuery ozgCloudVorgangQuery = OzgCloudVorgangQueryTestFactory.create();
 
@@ -277,4 +279,40 @@ class GrpcOzgCloudVorgangServiceTest {
 			return service.buildFindRequest(ozgCloudVorgangQuery, page);
 		}
 	}
+
+	@Nested
+	class TestFindDeleted {
+
+		private final GrpcFindDeletedVorgangRequest request = GrpcFindDeletedVorgangRequestTestFactory.create();
+		private final GrpcFindDeletedVorgangResponse response = GrpcFindDeletedVorgangResponseTestFactory.create();
+		private final OzgCloudVorgangStub vorgangStub = OzgCloudVorgangStubTestFactory.create();
+
+		@BeforeEach
+		void mock() {
+			doReturn(stub).when(service).getVorgangServiceStub();
+			when(stub.findDeletedVorgang(request)).thenReturn(List.of(response).iterator());
+			when(stubMapper.fromGrpc(response.getVorgangList().getFirst())).thenReturn(vorgangStub);
+		}
+
+		@Test
+		void shouldCallGetVorgangServiceStub() {
+			service.findDeleted().toList();
+
+			verify(stub).findDeletedVorgang(request);
+		}
+
+		@Test
+		void shouldMapResponse() {
+			service.findDeleted().toList();
+
+			verify(stubMapper).fromGrpc(response.getVorgangList().getFirst());
+		}
+
+		@Test
+		void shouldReturnVorgangStubs() {
+			var deleted = service.findDeleted().toList();
+
+			assertThat(deleted).containsExactly(vorgangStub);
+		}
+	}
 }
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapperTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapperTest.java
new file mode 100644
index 0000000..699dac3
--- /dev/null
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/OzgCloudVorgangStubMapperTest.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.apilib.vorgang.grpc;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import de.ozgcloud.apilib.vorgang.OzgCloudVorgangStubTestFactory;
+
+class OzgCloudVorgangStubMapperTest {
+
+	private OzgCloudVorgangStubMapper mapper = Mappers.getMapper(OzgCloudVorgangStubMapper.class);
+
+	@Test
+	void shouldMapStubFields() {
+		var expected = OzgCloudVorgangStubTestFactory.createBuilder()
+			.header(null)
+			.vorgangNummer(null)
+			.build();
+
+		var mapped = mapper.fromGrpc(GrpcVorgangHeaderTestFactory.create());
+
+		assertThat(mapped).usingRecursiveComparison().isEqualTo(expected);
+	}
+}
diff --git a/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtilsTest.java b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtilsTest.java
new file mode 100644
index 0000000..878b842
--- /dev/null
+++ b/api-lib-core/src/test/java/de/ozgcloud/apilib/vorgang/grpc/StreamingUtilsTest.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2025 Das Land Schleswig-Holstein vertreten durch den
+ * Ministerpräsidenten des Landes Schleswig-Holstein
+ * Staatskanzlei
+ * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+ *
+ * Lizenziert unter der EUPL, Version 1.2 oder - sobald
+ * diese von der Europäischen Kommission genehmigt wurden -
+ * Folgeversionen der EUPL ("Lizenz");
+ * Sie dürfen dieses Werk ausschließlich gemäß
+ * dieser Lizenz nutzen.
+ * Eine Kopie der Lizenz finden Sie hier:
+ *
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+ *
+ * Sofern nicht durch anwendbare Rechtsvorschriften
+ * gefordert oder in schriftlicher Form vereinbart, wird
+ * die unter der Lizenz verbreitete Software "so wie sie
+ * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+ * ausdrücklich oder stillschweigend - verbreitet.
+ * Die sprachspezifischen Genehmigungen und Beschränkungen
+ * unter der Lizenz sind dem Lizenztext zu entnehmen.
+ */
+package de.ozgcloud.apilib.vorgang.grpc;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.List;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+class StreamingUtilsTest {
+
+	@Nested
+	class TestAsStream {
+
+		@Test
+		void shouldReturnStream() {
+			var elements = List.of("a", "b", "c");
+
+			var stream = StreamingUtils.asStream(elements.iterator());
+
+			assertThat(stream.toList()).containsExactlyElementsOf(elements);
+		}
+	}
+}
diff --git a/pom.xml b/pom.xml
index 4b93c8f..6c9a671 100644
--- a/pom.xml
+++ b/pom.xml
@@ -54,7 +54,7 @@
 		<failsafe-plugin.version>3.2.5</failsafe-plugin.version>
 		<maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
 
-		<vorgang-manager.version>2.17.0</vorgang-manager.version>
+		<vorgang-manager.version>2.23.0-SNAPSHOT</vorgang-manager.version>
 		<user-manager.version>2.1.0</user-manager.version>
 	</properties>
 
-- 
GitLab