From c5e8c27400d6e9823704e2adfc6de711f36ee7ce Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 14 Nov 2024 15:52:18 +0100
Subject: [PATCH] OZG-6990 update common-lib; add archive-manager itcase

---
 bescheid-manager/pom.xml                      |  2 +-
 vorgang-manager-base/pom.xml                  |  2 +-
 .../CallContextHandleInterceptorTest.java     | 10 +--
 ...ntCallContextAttachingInterceptorTest.java |  6 +-
 vorgang-manager-command/pom.xml               |  2 +-
 vorgang-manager-interface/pom.xml             |  2 +-
 vorgang-manager-server/pom.xml                |  2 +-
 .../archive/ArchiveManagerITCase.java         | 66 ++++++++++++++++++-
 .../collaboration/CollaborationITCase.java    |  1 -
 ...erCallContextAttachingInterceptorTest.java |  3 +-
 vorgang-manager-utils/pom.xml                 |  2 +-
 11 files changed, 81 insertions(+), 17 deletions(-)

diff --git a/bescheid-manager/pom.xml b/bescheid-manager/pom.xml
index a677b1309..7f7af9dc8 100644
--- a/bescheid-manager/pom.xml
+++ b/bescheid-manager/pom.xml
@@ -5,7 +5,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.5.0</version>
+		<version>4.6.0-SNAPSHOT</version>
 		<relativePath />
 	</parent>
 
diff --git a/vorgang-manager-base/pom.xml b/vorgang-manager-base/pom.xml
index eb2a2716b..4cc87cf28 100644
--- a/vorgang-manager-base/pom.xml
+++ b/vorgang-manager-base/pom.xml
@@ -6,7 +6,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.5.0</version>
+		<version>4.6.0-SNAPSHOT</version>
 		<relativePath />
 	</parent>
 
diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextHandleInterceptorTest.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextHandleInterceptorTest.java
index 7da699439..637608f8f 100644
--- a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextHandleInterceptorTest.java
+++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/CallContextHandleInterceptorTest.java
@@ -23,7 +23,6 @@
  */
 package de.ozgcloud.vorgang.callcontext;
 
-import static de.ozgcloud.common.grpc.GrpcUtil.*;
 import static de.ozgcloud.vorgang.callcontext.CallContextHandleInterceptor.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
@@ -37,6 +36,7 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.springframework.security.core.context.SecurityContextHolder;
 
+import de.ozgcloud.common.grpc.GrpcUtil;
 import de.ozgcloud.vorgang.callcontext.CallContextHandleInterceptor.LogContextSettingListener;
 import io.grpc.Metadata;
 import io.grpc.ServerCall;
@@ -70,7 +70,7 @@ class CallContextHandleInterceptorTest {
 
 			@Test
 			void shouldReturnNewRequestIdIfNoGiven() {
-				headers.removeAll(createKeyOf(KEY_REQUEST_ID));
+				headers.removeAll(GrpcUtil.createKeyOf(GrpcUtil.KEY_REQUEST_ID));
 
 				var reqId = listener.getRequestId();
 
@@ -92,7 +92,7 @@ class CallContextHandleInterceptorTest {
 			@Test
 			void shouldFillOrgaIdCollection() {
 				Metadata metadata = CallContextTestFactory.createMetadata();
-				metadata.put(createKeyOf(KEY_ACCESS_LIMITED_ORGAID), "orgaid_2".getBytes());
+				metadata.put(GrpcUtil.createKeyOf(KEY_ACCESS_LIMITED_ORGAID), "orgaid_2".getBytes());
 
 				var user = buildListener(metadata).createUser();
 
@@ -102,7 +102,7 @@ class CallContextHandleInterceptorTest {
 			@Test
 			void shouldFillEmptyListIfNoOrgaIds() {
 				Metadata metadata = CallContextTestFactory.createMetadata();
-				metadata.removeAll(createKeyOf(KEY_ACCESS_LIMITED_ORGAID));
+				metadata.removeAll(GrpcUtil.createKeyOf(KEY_ACCESS_LIMITED_ORGAID));
 
 				var user = buildListener(metadata).createUser();
 
@@ -125,7 +125,7 @@ class CallContextHandleInterceptorTest {
 				@Test
 				void shouldMapFalseIfKeyIsNotPresent() {
 					var metadata = CallContextTestFactory.createMetadata();
-					metadata.removeAll(createKeyOf(KEY_ACCESS_LIMITED));
+					metadata.removeAll(GrpcUtil.createKeyOf(KEY_ACCESS_LIMITED));
 
 					var user = buildListener(metadata).createUser();
 
diff --git a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/VorgangManagerClientCallContextAttachingInterceptorTest.java b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/VorgangManagerClientCallContextAttachingInterceptorTest.java
index e3ee4977f..387f8ab34 100644
--- a/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/VorgangManagerClientCallContextAttachingInterceptorTest.java
+++ b/vorgang-manager-base/src/test/java/de/ozgcloud/vorgang/callcontext/VorgangManagerClientCallContextAttachingInterceptorTest.java
@@ -23,7 +23,6 @@
  */
 package de.ozgcloud.vorgang.callcontext;
 
-import static de.ozgcloud.common.grpc.GrpcUtil.*;
 import static de.ozgcloud.vorgang.callcontext.VorgangManagerClientCallContextAttachingInterceptor.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
@@ -37,6 +36,7 @@ import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
+import de.ozgcloud.common.grpc.GrpcUtil;
 import io.grpc.CallOptions;
 import io.grpc.Channel;
 import io.grpc.ClientCall;
@@ -76,14 +76,14 @@ class VorgangManagerClientCallContextAttachingInterceptorTest {
 		void shouldAddClientName() {
 			var addedMetadata = interceptCall();
 
-			assertThat(addedMetadata.get(createKeyOf(KEY_CLIENT_NAME))).isEqualTo(VORGANG_MANAGER_CLIENT_NAME.getBytes());
+			assertThat(addedMetadata.get(GrpcUtil.createKeyOf(KEY_CLIENT_NAME))).isEqualTo(VORGANG_MANAGER_CLIENT_NAME.getBytes());
 		}
 
 		@Test
 		void shouldAddRequestId() {
 			var addedMetadata = interceptCall();
 
-			assertThat(addedMetadata.get(createKeyOf(KEY_REQUEST_ID))).isNotNull();
+			assertThat(addedMetadata.get(GrpcUtil.createKeyOf(GrpcUtil.KEY_REQUEST_ID))).isNotNull();
 		}
 
 		private Metadata interceptCall() {
diff --git a/vorgang-manager-command/pom.xml b/vorgang-manager-command/pom.xml
index 0dc8f2f75..5a1b13e71 100644
--- a/vorgang-manager-command/pom.xml
+++ b/vorgang-manager-command/pom.xml
@@ -4,7 +4,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.5.0</version>
+		<version>4.6.0-SNAPSHOT</version>
 		<relativePath/>
 	</parent>
 	
diff --git a/vorgang-manager-interface/pom.xml b/vorgang-manager-interface/pom.xml
index a03f469c7..8b00a8521 100644
--- a/vorgang-manager-interface/pom.xml
+++ b/vorgang-manager-interface/pom.xml
@@ -30,7 +30,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.5.0</version>
+		<version>4.6.0-SNAPSHOT</version>
 		<relativePath/>
 	</parent>
 
diff --git a/vorgang-manager-server/pom.xml b/vorgang-manager-server/pom.xml
index d83e030ef..00d58f24c 100644
--- a/vorgang-manager-server/pom.xml
+++ b/vorgang-manager-server/pom.xml
@@ -32,7 +32,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-parent</artifactId>
-		<version>4.5.0</version>
+		<version>4.6.0-SNAPSHOT</version>
 		<relativePath />
 	</parent>
 
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java
index 5a6a85a95..922a438b3 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/archive/ArchiveManagerITCase.java
@@ -24,8 +24,12 @@
 package de.ozgcloud.archive;
 
 import static org.assertj.core.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.Mockito.*;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
@@ -36,23 +40,31 @@ import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.test.annotation.DirtiesContext;
 import org.springframework.test.context.ContextConfiguration;
 
+import com.google.protobuf.ByteString;
+
 import de.ozgcloud.archive.attributes.ClientAttributeService;
 import de.ozgcloud.archive.common.callcontext.CallContextProvider;
 import de.ozgcloud.archive.common.callcontext.CallContextUser;
+import de.ozgcloud.archive.grpc.export.ExportServiceGrpc.ExportServiceBlockingStub;
+import de.ozgcloud.archive.grpc.export.GrpcExportVorgangRequest;
 import de.ozgcloud.command.CommandStatus;
 import de.ozgcloud.common.test.DataITCase;
 import de.ozgcloud.vorgang.VorgangManagerServerApplication;
+import de.ozgcloud.vorgang.callcontext.TestCallContextAttachingInterceptor;
 import de.ozgcloud.vorgang.callcontext.WithMockCustomUser;
 import de.ozgcloud.vorgang.clientattribute.ClientAttribute;
 import de.ozgcloud.vorgang.command.CommandService;
 import de.ozgcloud.vorgang.command.CreateCommandRequest;
+import de.ozgcloud.vorgang.vorgang.EingangTestFactory;
 import de.ozgcloud.vorgang.vorgang.Vorgang;
 import de.ozgcloud.vorgang.vorgang.VorgangService;
 import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
+import net.devh.boot.grpc.client.inject.GrpcClient;
 
 @SpringBootTest(classes = VorgangManagerServerApplication.class, properties = {
 		"grpc.server.inProcessName=test",
 		"grpc.client.vorgang-manager.address=in-process:test",
+		"grpc.client.file-manager.address=in-process:test",
 		"grpc.client.ozgcloud-command-manager.address=in-process:test",
 		"grpc.client.inProcess.address=in-process:test",
 })
@@ -75,12 +87,17 @@ public class ArchiveManagerITCase {
 
 	@BeforeEach
 	void init() {
-		vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0).build());
+		mongoOperations.dropCollection(Vorgang.COLLECTION_NAME);
 	}
 
 	@Nested
 	class TestArchiveVorgang {
 
+		@BeforeEach
+		void init() {
+			vorgang = mongoOperations.save(VorgangTestFactory.createBuilder().id(null).version(0).build());
+		}
+
 		@Test
 		void shouldSetArchiveClientAttribute() {
 			commandService.createCommand(buildArchiveVorgangCommand());
@@ -126,4 +143,51 @@ public class ArchiveManagerITCase {
 		}
 	}
 
+	@Nested
+	class TestExportVorgang {
+
+		@GrpcClient("inProcess")
+		private ExportServiceBlockingStub exportClient;
+
+		@BeforeEach
+		void init() {
+			vorgang = mongoOperations.save(buildVorgang());
+		}
+
+		@Test
+		void shouldExportVorgang() {
+			var result = exportVorgang();
+
+			assertThat(result.fileName()).endsWith("_Abgabe.Abgabe.0401.xdomea");
+			assertThat(result.content()).isNotEmpty();
+		}
+
+		private ExportServiceBlockingStub getExportClient() {
+			return exportClient.withInterceptors(new TestCallContextAttachingInterceptor());
+		}
+
+		private Vorgang buildVorgang() {
+			return VorgangTestFactory.createBuilder().id(null).version(0).clearEingangs()
+					.eingang(EingangTestFactory.createBuilder().clearRepresentations().clearAttachments().build())
+					.build();
+		}
+
+		private ExportResult exportVorgang() {
+			var result = getExportClient().exportVorgang(GrpcExportVorgangRequest.newBuilder().setVorgangId(vorgang.getId()).build());
+			var fileName = result.next().getVorgangFile().getFileName();
+			var content = new ByteArrayOutputStream();
+			while (result.hasNext()) {
+				ByteString chunkContent = result.next().getVorgangFile().getFileContent();
+				try {
+					content.write(chunkContent.toByteArray());
+				} catch (IOException e) {
+					fail(e);
+				}
+			}
+			return new ExportResult(fileName, content.toByteArray());
+		}
+
+		private record ExportResult(String fileName, byte[] content) {
+		}
+	}
 }
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java
index f73ea147c..f9080eeb1 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/collaboration/CollaborationITCase.java
@@ -24,7 +24,6 @@
 package de.ozgcloud.vorgang.collaboration;
 
 import static org.assertj.core.api.Assertions.*;
-import static org.assertj.core.api.InstanceOfAssertFactories.*;
 import static org.awaitility.Awaitility.*;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.*;
diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/user/VorgangManagerCallContextAttachingInterceptorTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/user/VorgangManagerCallContextAttachingInterceptorTest.java
index 0eaa4b8c1..6f42a8585 100644
--- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/user/VorgangManagerCallContextAttachingInterceptorTest.java
+++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/user/VorgangManagerCallContextAttachingInterceptorTest.java
@@ -14,6 +14,7 @@ import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
+import de.ozgcloud.common.grpc.GrpcUtil;
 import io.grpc.CallOptions;
 import io.grpc.Channel;
 import io.grpc.ClientCall;
@@ -67,7 +68,7 @@ class VorgangManagerCallContextAttachingInterceptorTest {
 		void shouldAddRequestId() {
 			var addedMetadata = interceptCall();
 
-			assertThat(addedMetadata.get(createKeyOf(KEY_REQUEST_ID))).isNotNull();
+			assertThat(addedMetadata.get(createKeyOf(GrpcUtil.KEY_REQUEST_ID))).isNotNull();
 		}
 
 		private Metadata interceptCall() {
diff --git a/vorgang-manager-utils/pom.xml b/vorgang-manager-utils/pom.xml
index 9d550a13a..e08f2443d 100644
--- a/vorgang-manager-utils/pom.xml
+++ b/vorgang-manager-utils/pom.xml
@@ -30,7 +30,7 @@
 	<parent>
 		<groupId>de.ozgcloud.common</groupId>
 		<artifactId>ozgcloud-common-dependencies</artifactId>
-		<version>4.5.0</version>
+		<version>4.6.0-SNAPSHOT</version>
 		<relativePath/>
 	</parent>
 
-- 
GitLab