From d6718db839d7a276cb387bc3a47504426f427a07 Mon Sep 17 00:00:00 2001
From: Jan Zickermann <jan.zickermann@dataport.de>
Date: Thu, 13 Feb 2025 17:02:35 +0100
Subject: [PATCH] OZG-4097 itcase: Try out grpc mocking with wiremock

---
 pom.xml                                       |  36 ++-
 .../osiv2/OsiPostfachRemoteServiceITCase.java |   1 -
 .../VorgangManagerServerExtension.java        |   4 +-
 .../wiremock/proto/binaryfile.model.proto     |  98 ++++++++
 .../resources/wiremock/proto/binaryfile.proto |  47 ++++
 .../wiremock/proto/callcontext.proto          |  42 ++++
 .../proto/clientattribute.model.proto         |  51 ++++
 .../wiremock/proto/clientattribute.proto      |  60 +++++
 .../wiremock/proto/command.model.proto        | 151 ++++++++++++
 .../resources/wiremock/proto/command.proto    |  60 +++++
 .../wiremock/proto/common.model.proto         |  59 +++++
 .../resources/wiremock/proto/file.model.proto |  56 +++++
 src/test/resources/wiremock/proto/file.proto  |  40 ++++
 .../wiremock/proto/forwarding.model.proto     |  52 +++++
 .../resources/wiremock/proto/forwarding.proto |  48 ++++
 .../proto/route-forwarding.model.proto        |  48 ++++
 .../wiremock/proto/route-forwarding.proto     |  39 ++++
 .../wiremock/proto/statistic.model.proto      |  92 ++++++++
 .../resources/wiremock/proto/statistic.proto  |  38 +++
 .../wiremock/proto/system.model.proto         |  38 +++
 .../resources/wiremock/proto/system.proto     |  37 +++
 .../wiremock/proto/vorgang.model.proto        | 221 ++++++++++++++++++
 .../resources/wiremock/proto/vorgang.proto    | 110 +++++++++
 .../proto/vorgangattacheditem.model.proto     |  41 ++++
 .../wiremock/proto/vorgangattacheditem.proto  |  58 +++++
 25 files changed, 1523 insertions(+), 4 deletions(-)
 create mode 100644 src/test/resources/wiremock/proto/binaryfile.model.proto
 create mode 100644 src/test/resources/wiremock/proto/binaryfile.proto
 create mode 100644 src/test/resources/wiremock/proto/callcontext.proto
 create mode 100644 src/test/resources/wiremock/proto/clientattribute.model.proto
 create mode 100644 src/test/resources/wiremock/proto/clientattribute.proto
 create mode 100644 src/test/resources/wiremock/proto/command.model.proto
 create mode 100644 src/test/resources/wiremock/proto/command.proto
 create mode 100644 src/test/resources/wiremock/proto/common.model.proto
 create mode 100644 src/test/resources/wiremock/proto/file.model.proto
 create mode 100644 src/test/resources/wiremock/proto/file.proto
 create mode 100644 src/test/resources/wiremock/proto/forwarding.model.proto
 create mode 100644 src/test/resources/wiremock/proto/forwarding.proto
 create mode 100644 src/test/resources/wiremock/proto/route-forwarding.model.proto
 create mode 100644 src/test/resources/wiremock/proto/route-forwarding.proto
 create mode 100644 src/test/resources/wiremock/proto/statistic.model.proto
 create mode 100644 src/test/resources/wiremock/proto/statistic.proto
 create mode 100644 src/test/resources/wiremock/proto/system.model.proto
 create mode 100644 src/test/resources/wiremock/proto/system.proto
 create mode 100644 src/test/resources/wiremock/proto/vorgang.model.proto
 create mode 100644 src/test/resources/wiremock/proto/vorgang.proto
 create mode 100644 src/test/resources/wiremock/proto/vorgangattacheditem.model.proto
 create mode 100644 src/test/resources/wiremock/proto/vorgangattacheditem.proto

diff --git a/pom.xml b/pom.xml
index 9458fa6..c2fc1be 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,8 +21,10 @@
 		<nachrichten-manager.version>2.17.0-SNAPSHOT</nachrichten-manager.version>
 		<openapi-generator.version>7.11.0</openapi-generator.version>
 		<swagger-parser.version>2.1.23</swagger-parser.version>
+		<wiremock.version>3.12.0</wiremock.version>
 		<wiremock-spring-boot.version>3.6.0</wiremock-spring-boot.version>
 		<wiremock-grpc-extension.version>0.9.0</wiremock-grpc-extension.version>
+		<grpc.version>1.59.0</grpc.version>
 	</properties>
 	<dependencies>
 		<!-- OZG-Cloud -->
@@ -80,6 +82,13 @@
 			<version>${testcontainers.version}</version>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>org.wiremock</groupId>
+			<artifactId>wiremock-jetty12</artifactId>
+			<version>${wiremock}</version>
+			<scope>test</scope>
+		</dependency>
+
 		<dependency>
 			<groupId>org.wiremock.integrations</groupId>
 			<artifactId>wiremock-spring-boot</artifactId>
@@ -88,10 +97,18 @@
 		</dependency>
 		<dependency>
 			<groupId>org.wiremock</groupId>
-			<artifactId>wiremock-grpc-extension-jetty12</artifactId>
+			<artifactId>wiremock-grpc-extension</artifactId>
 			<version>${wiremock-grpc-extension.version}</version>
 			<scope>test</scope>
 		</dependency>
+		<dependency>
+			<groupId>io.grpc</groupId>
+			<artifactId>grpc-stub</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>io.grpc</groupId>
+			<artifactId>grpc-protobuf</artifactId>
+		</dependency>
 
 
 		<!-- commons -->
@@ -174,6 +191,23 @@
 					</execution>
 				</executions>
 			</plugin>
+			<plugin>
+				<groupId>org.xolstice.maven.plugins</groupId>
+				<artifactId>protobuf-maven-plugin</artifactId>
+				<version>0.6.1</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>test-compile</goal>
+						</goals>
+						<configuration>
+							<outputDirectory>${project.build.directory}/generated-sources/protobuf</outputDirectory>
+							<attachDescriptorSet>true</attachDescriptorSet>
+							<descriptorSetOutputDirectory>${project.basedir}/src/test/resources/grpc/services.dsc</descriptorSetOutputDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 	</build>
 
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
index b20578b..16e57e0 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java
@@ -22,7 +22,6 @@ import org.wiremock.grpc.dsl.WireMockGrpcService;
 import com.github.tomakehurst.wiremock.WireMockServer;
 import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
 
-import de.ozgcloud.nachrichten.postfach.PostfachException;
 import de.ozgcloud.nachrichten.postfach.PostfachMessageCode;
 import de.ozgcloud.nachrichten.postfach.PostfachNachricht;
 import de.ozgcloud.nachrichten.postfach.osiv2.exception.Osi2PostfachException;
diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
index 947d0e7..37e732b 100644
--- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
+++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java
@@ -7,7 +7,6 @@ import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 import org.wiremock.grpc.GrpcExtensionFactory;
-import org.wiremock.grpc.Jetty12GrpcExtensionFactory;
 import org.wiremock.grpc.dsl.WireMockGrpcService;
 
 import com.github.tomakehurst.wiremock.WireMockServer;
@@ -50,7 +49,8 @@ public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAl
 		vorgangManagerMockServer = new WireMockServer(
 				wireMockConfig()
 						.dynamicPort()
-						.extensions(new Jetty12GrpcExtensionFactory())
+						.withRootDirectory("src/test/resources/wiremock")
+						.extensions(new GrpcExtensionFactory())
 		);
 		vorgangManagerMockServer.start();
 	}
diff --git a/src/test/resources/wiremock/proto/binaryfile.model.proto b/src/test/resources/wiremock/proto/binaryfile.model.proto
new file mode 100644
index 0000000..1a88a3c
--- /dev/null
+++ b/src/test/resources/wiremock/proto/binaryfile.model.proto
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2024 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.binaryFile;
+
+import "callcontext.proto";
+import "file.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.binaryFile";
+option java_outer_classname = "BinaryFileModelProto";
+
+message GrpcBinaryFilesRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  repeated string fileId = 2;
+}
+
+message GrpcFindFilesResponse {
+  repeated de.ozgcloud.vorgang.grpc.file.GrpcOzgFile file = 1;
+}
+
+message GrpcBinaryFileDataRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string fileId = 2;
+}
+
+message GrpcUploadBinaryFileRequest {
+  oneof request {
+    GrpcUploadBinaryFileMetaData metadata = 1;
+    bytes fileContent = 2;
+  }
+}
+
+message GrpcUploadBinaryFileMetaData {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string vorgangId = 2;
+  string field = 3;
+  string fileName = 4;
+  string contentType = 5;
+  int64 size = 6 [deprecated = true];
+}
+
+message GrpcUploadBinaryFileResponse {
+  string fileId = 2;
+}
+
+message GrpcGetBinaryFileDataRequest {
+  de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+  string fileId = 2;
+}
+
+message GrpcGetBinaryFileDataResponse {
+  bytes fileContent = 1;
+}
+
+message GrpcBinaryFile {
+  string id = 1;
+  string name = 2;
+  int64 size = 3;
+  string contentType = 4;
+}
+
+message GrpcUpdateBinaryFileRequest {
+  oneof request {
+    GrpcBinaryFileMetadata metadata = 1;
+    bytes content = 2;
+  }
+}
+
+message GrpcBinaryFileMetadata {
+  string fileId = 1;
+  string fileName = 2;
+  string contentType = 3;
+}
+
+message GrpcUpdateBinaryFileResponse {}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/binaryfile.proto b/src/test/resources/wiremock/proto/binaryfile.proto
new file mode 100644
index 0000000..1b555f4
--- /dev/null
+++ b/src/test/resources/wiremock/proto/binaryfile.proto
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.binaryFile;
+
+import "binaryfile.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.binaryFile";
+option java_outer_classname = "BinaryFileProto";
+
+service BinaryFileService {
+		
+	rpc UploadBinaryFileAsStream(stream GrpcUploadBinaryFileRequest) returns (GrpcUploadBinaryFileResponse) {
+	}
+	
+	rpc GetBinaryFileContent(GrpcGetBinaryFileDataRequest) returns (stream GrpcGetBinaryFileDataResponse) {
+	}
+	
+	rpc FindBinaryFilesMetaData(GrpcBinaryFilesRequest) returns (GrpcFindFilesResponse) {
+	}
+
+	rpc UpdateBinaryFile(stream GrpcUpdateBinaryFileRequest) returns (GrpcUpdateBinaryFileResponse) {
+	}
+}
diff --git a/src/test/resources/wiremock/proto/callcontext.proto b/src/test/resources/wiremock/proto/callcontext.proto
new file mode 100644
index 0000000..8631cbc
--- /dev/null
+++ b/src/test/resources/wiremock/proto/callcontext.proto
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.command;
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.command";
+option java_outer_classname = "SharedCommandProto";
+
+message GrpcCallContext {
+	string client = 1;
+	GrpcUser user = 2; 
+	string requestId = 3;
+}
+
+message GrpcUser {
+	string id = 1;
+	string name = 2;
+	repeated string roles = 3 [deprecated=true];
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/clientattribute.model.proto b/src/test/resources/wiremock/proto/clientattribute.model.proto
new file mode 100644
index 0000000..910e0c9
--- /dev/null
+++ b/src/test/resources/wiremock/proto/clientattribute.model.proto
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.clientAttribute;
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.clientAttribute";
+
+message GrpcClientAttribute {
+	string clientName = 1;
+	string attributeName = 2;
+	GrpcAccessPermission access = 3;
+	GrpcClientAttributeValue value = 4;
+}
+
+enum GrpcAccessPermission {
+	PRIVATE = 0;
+	READ_ONLY = 1;
+	READ_WRITE = 2;
+}
+
+message GrpcClientAttributeValue {
+	oneof value {
+		string stringValue = 1;
+		int64 intValue = 2;
+		double doubleValue = 3;
+		bool boolValue = 4;
+	}
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/clientattribute.proto b/src/test/resources/wiremock/proto/clientattribute.proto
new file mode 100644
index 0000000..320bce9
--- /dev/null
+++ b/src/test/resources/wiremock/proto/clientattribute.proto
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.clientAttribute;
+
+import "clientattribute.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.clientAttribute";
+
+service ClientAttributeService {
+	rpc Set (GrpcSetClientAttributeRequest) returns (GrpcAcknowledgeResponse) {
+	}
+	rpc Update (GrpcUpdateClientAttributeRequest) returns (GrpcAcknowledgeResponse) {
+	}
+	rpc Delete (GrpcDeleteClientAttributeRequest) returns (GrpcAcknowledgeResponse) {
+	}
+}
+
+message GrpcSetClientAttributeRequest {
+	string vorgangId = 1;
+	GrpcClientAttribute attribute = 2;
+}
+
+message GrpcUpdateClientAttributeRequest {
+	string vorgangId = 1;
+	GrpcClientAttribute attribute = 2;
+}
+
+message GrpcDeleteClientAttributeRequest {
+	string vorgangId = 1;
+	string clientName = 2;
+	string attributeName = 3;
+}
+
+message GrpcAcknowledgeResponse {
+}
+
diff --git a/src/test/resources/wiremock/proto/command.model.proto b/src/test/resources/wiremock/proto/command.model.proto
new file mode 100644
index 0000000..0e085ab
--- /dev/null
+++ b/src/test/resources/wiremock/proto/command.model.proto
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.command;
+
+import "callcontext.proto";
+import "common.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.command";
+option java_outer_classname = "CommandModelProto";
+
+message GrpcCreateCommandRequest {
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext callContext = 1;
+	string vorgangId = 2;
+	string relationId = 4;
+	int64 relationVersion = 5;
+	GrpcRedirectRequest redirectRequest = 12;
+	repeated GrpcCommandBodyField body = 15;
+	de.ozgcloud.vorgang.common.GrpcObject bodyObj = 17;
+	string orderString = 21;
+}
+
+message GrpcCommandResponse {
+	enum GrpcResponseCode {
+		OK = 0;
+		PENDING = 1;
+		ERROR = 2;
+		CONFLICT = 3;
+	}
+	GrpcResponseCode responseCode = 1;
+	string messageCode = 2;
+	repeated string messageParameters = 3;
+	GrpcCommand command = 4;
+}
+
+message GrpcRevokeCommandRequest {
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+	string id = 2;
+}
+
+message GrpcGetCommandRequest {
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+	string id = 2;
+}
+
+message GrpcSetCommandExecutedRequest {
+	string commandId = 1;
+	string createdResource = 2;
+}
+
+message GrpcCommand {
+	string id = 1;
+	string vorgangId = 2;
+	string createdAt = 3;
+	string finishedAt = 4;
+	string createdBy = 10;
+	string createdByName = 11;
+	string status = 12;
+	string errorMessage=13;
+	string relationId = 14;
+	GrpcCommandBody body = 16;
+	de.ozgcloud.vorgang.common.GrpcObject bodyObj = 17;
+	GrpcRedirectRequest redirectRequest = 20;
+	string orderString = 21;
+	string createdResource = 22;
+}
+
+message GrpcExistsPendingCommandsRequest {
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+	string vorgangId = 2;
+}
+
+message GrpcExistsPendingCommandsResponse {
+	bool existsPendingCommands = 1;
+}
+
+message GrpcRedirectRequest {
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+	string email = 2;
+	string password = 3;
+}
+
+
+message GrpcGetPendingCommandsRequest {
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+	string vorgangId = 2;
+}
+
+message GrpcFindCommandsRequest {
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+	string vorgangId = 2;
+	repeated string status = 3;
+	string orderString = 5;
+}
+
+
+message GrpcGetPendingCommandsResponse {
+	repeated GrpcCommand command = 1;
+}
+message GrpcCommandsResponse {
+	repeated GrpcCommand command = 1;
+}
+
+message GrpcCommandBody {
+	repeated GrpcCommandBodyField field = 1;
+}
+
+message GrpcCommandBodyField {
+	string name = 1;
+	string value = 2;
+}
+
+message GrpcEmpty {
+}
+
+message GrpcAddSubCommandsRequest {
+	string parentId = 1;
+	string executionMode = 2;
+	bool completedIfSubsCompleted = 3;
+	repeated GrpcCreateCommand subCommands = 4;
+}
+
+message GrpcCreateCommand {
+	string order = 1;
+	string relationId = 2;
+	int64 relationVersion = 3;
+	de.ozgcloud.vorgang.common.GrpcObject bodyObj = 4;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/command.proto b/src/test/resources/wiremock/proto/command.proto
new file mode 100644
index 0000000..453c11c
--- /dev/null
+++ b/src/test/resources/wiremock/proto/command.proto
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.command;
+
+import "command.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.command";
+option java_outer_classname = "CommandProto";
+
+service CommandService {
+
+	rpc CreateCommand(GrpcCreateCommandRequest) returns (GrpcCommandResponse) {
+	}
+	
+	rpc RevokeCommand(GrpcRevokeCommandRequest) returns (GrpcCommandResponse) {
+	}
+	
+	rpc GetCommand(GrpcGetCommandRequest) returns (GrpcCommand) {
+	}
+	
+	rpc ExistsPendingCommands(GrpcExistsPendingCommandsRequest) returns (GrpcExistsPendingCommandsResponse) {
+	}
+	
+	rpc GetPendingCommands(GrpcGetPendingCommandsRequest) returns (GrpcGetPendingCommandsResponse){
+	}
+	
+	rpc FindCommands(GrpcFindCommandsRequest) returns (GrpcCommandsResponse) {
+	}
+
+	rpc SetCommandExecuted(GrpcSetCommandExecutedRequest) returns (GrpcEmpty) {
+
+	}
+
+	rpc AddSubCommands(GrpcAddSubCommandsRequest) returns (GrpcCommandsResponse) {
+	}
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/common.model.proto b/src/test/resources/wiremock/proto/common.model.proto
new file mode 100644
index 0000000..f1a92f8
--- /dev/null
+++ b/src/test/resources/wiremock/proto/common.model.proto
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.common;
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.common";
+option java_outer_classname = "CommonModelProto";
+
+message GrpcObject {
+	repeated GrpcProperty property = 1;
+	repeated GrpcSubObject subObject = 2;
+}
+
+message GrpcProperty {
+	string name = 1;
+	repeated string value = 2;
+}
+
+message GrpcSubObject {
+	string name = 1;
+	repeated GrpcProperty property = 2;
+	repeated GrpcSubObject subObject = 3;
+}
+
+enum GrpcQueryOperator {
+	GREATER_THEN = 0;	// >
+	GREATER_THEN_OR_EQUAL_TO = 1; // >=
+	LESS_THEN = 2; // <
+	LESS_THEN_OR_EQUAL_TO = 3; // <=
+	EQUAL = 4; // =
+	UNEQUAL = 5; // <>
+	IS_NULL = 6;
+	IS_EMPTY = 7;
+	EXISTS = 8;
+	NOT_EXIST = 9;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/file.model.proto b/src/test/resources/wiremock/proto/file.model.proto
new file mode 100644
index 0000000..6b81a0d
--- /dev/null
+++ b/src/test/resources/wiremock/proto/file.model.proto
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2024 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.file;
+
+import "callcontext.proto";
+
+option java_multiple_files = true;
+option java_outer_classname = "FileModelProto";
+
+
+message GrpcGetAttachmentsRequest {
+	string eingangId = 2;
+	string vorgangId = 3;
+}
+
+message GrpcGetAttachmentsResponse {
+	repeated GrpcOzgFile file = 1;
+}
+
+message GrpcGetRepresentationsRequest {
+	string eingangId = 2;
+	string vorgangId = 3;
+}
+message GrpcGetRepresentationsResponse {
+	repeated GrpcOzgFile file = 1;
+}
+
+message GrpcOzgFile {
+	string id = 1;
+	string name = 2;
+	int64 size = 3;
+	string contentType = 4;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/file.proto b/src/test/resources/wiremock/proto/file.proto
new file mode 100644
index 0000000..98da078
--- /dev/null
+++ b/src/test/resources/wiremock/proto/file.proto
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.grpc.file;
+
+import "file.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.grpc.file";
+option java_outer_classname = "FileProto";
+
+service FileService {
+	rpc GetAttachments(GrpcGetAttachmentsRequest) returns (GrpcGetAttachmentsResponse) {
+	}
+	
+	rpc GetRepresentations(GrpcGetRepresentationsRequest) returns (GrpcGetRepresentationsResponse) {
+	}
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/forwarding.model.proto b/src/test/resources/wiremock/proto/forwarding.model.proto
new file mode 100644
index 0000000..8d1f34a
--- /dev/null
+++ b/src/test/resources/wiremock/proto/forwarding.model.proto
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.forwarding;
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.forwarding";
+option java_outer_classname = "ForwardingModelProto";
+
+enum GrpcForwardingStatus {
+	UNDEFINED = 0;
+	NEW = 1;
+	SENT = 2;
+	SUCCESSFULL = 3;
+	SEND_ERROR = 4;
+	FAILED = 5;
+}
+
+message GrpcForwarding {
+	string id = 1;
+	string vorgangId = 2;
+	string status = 3;
+	string zustaendigeStelle = 4;
+	string createdAt = 5;
+	string createdBy = 6;
+	string createdByName = 7;
+	
+	string sentAt = 15;
+	string errorMessage = 16;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/forwarding.proto b/src/test/resources/wiremock/proto/forwarding.proto
new file mode 100644
index 0000000..0b0d5b0
--- /dev/null
+++ b/src/test/resources/wiremock/proto/forwarding.proto
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.forwarding;
+
+import "callcontext.proto";
+import "forwarding.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.forwarding";
+option java_outer_classname = "ForwardingProto";
+
+
+service ForwardingService {
+	rpc FindForwardings(GrpcFindForwardingsRequest) returns (GrpcForwardingsResponse) {
+	}
+}
+
+message GrpcFindForwardingsRequest { 
+	de.ozgcloud.vorgang.grpc.command.GrpcCallContext context = 1;
+	string vorgangId = 2;
+}
+
+message GrpcForwardingsResponse {
+	repeated GrpcForwarding forwardings = 1;
+}
diff --git a/src/test/resources/wiremock/proto/route-forwarding.model.proto b/src/test/resources/wiremock/proto/route-forwarding.model.proto
new file mode 100644
index 0000000..46961d4
--- /dev/null
+++ b/src/test/resources/wiremock/proto/route-forwarding.model.proto
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.eingang.forwarder;
+
+import "vorgang.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.eingang.forwarding";
+option java_outer_classname = "RouteForwardingModelProto";
+
+
+message GrpcRouteForwardingRequest {
+	GrpcRouteCriteria routeCriteria = 1;
+	de.ozgcloud.vorgang.vorgang.GrpcEingang eingang = 5;
+}
+
+message GrpcRouteForwardingResponse {
+	
+}
+
+message GrpcRouteCriteria {
+	string gemeindeSchluessel = 1;
+	string webserviceUrl = 2;
+	string organisationseinheitenId = 3;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/route-forwarding.proto b/src/test/resources/wiremock/proto/route-forwarding.proto
new file mode 100644
index 0000000..aeb0eef
--- /dev/null
+++ b/src/test/resources/wiremock/proto/route-forwarding.proto
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.eingang.forwarder;
+
+import "route-forwarding.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.eingang.forwarder";
+option java_outer_classname = "RouteForwardingProto";
+
+service RouteForwardingService {
+
+	rpc RouteForwarding(GrpcRouteForwardingRequest) returns (GrpcRouteForwardingResponse) {
+	}
+
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/statistic.model.proto b/src/test/resources/wiremock/proto/statistic.model.proto
new file mode 100644
index 0000000..7c90e61
--- /dev/null
+++ b/src/test/resources/wiremock/proto/statistic.model.proto
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.statistic;
+
+import "common.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.statistic";
+option java_outer_classname = "StatisticModelProto";
+
+message GrpcVorgangCountRequest {
+  repeated string countByPath = 1;
+}
+
+message GrpcByStatusResult {
+  int32 neu = 1;
+  int32 angenommen = 2;
+  int32 verworfen = 3;
+  int32 in_bearbeitung = 4;
+  int32 beschieden = 5;
+  int32 abgeschlossen = 6;
+  int32 weitergeleitet = 7;
+
+}
+
+message GrpcPathCountResult {
+  string name = 1;
+  int32 value = 2;
+}
+
+message GrpcVorgangCountResponse {
+  GrpcByStatusResult byStatus = 1;
+  repeated GrpcPathCountResult pathCountResult = 2;
+}
+
+message GrpcVorgangStatisticRequest {
+	repeated GrpcVorgangStatisticQuery query = 1;
+}
+
+message GrpcVorgangStatisticQuery {
+	string resultName = 1;
+	GroupMethod groupMethod = 2;
+	string path = 3;
+  de.ozgcloud.vorgang.common.GrpcQueryOperator operator = 4;
+	oneof operand {
+		int32 operandIntValue = 5;
+		bool operandBoolValue = 6;
+		string operandStringValue = 7;
+	}
+
+	enum GroupMethod {
+		COUNT = 0;
+		EXISTS = 1;
+	}
+
+}
+
+message GrpcVorgangStatisticResponse {
+	repeated GrpcVorgangStatisticResult result = 1;
+}
+
+message GrpcVorgangStatisticResult {
+  string name = 1;
+  oneof result {
+    int32 resultIntValue = 2;
+    bool resultBoolValue = 3;
+    string resultStringValue = 4;
+  }
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/statistic.proto b/src/test/resources/wiremock/proto/statistic.proto
new file mode 100644
index 0000000..f571704
--- /dev/null
+++ b/src/test/resources/wiremock/proto/statistic.proto
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.statistic;
+
+import "statistic.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.statistic";
+option java_outer_classname = "StatisticProto";
+
+service StatisticService {
+    rpc CountVorgang(GrpcVorgangCountRequest) returns (GrpcVorgangCountResponse);
+
+    rpc GetVorgangStatistic(GrpcVorgangStatisticRequest) returns (GrpcVorgangStatisticResponse);
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/system.model.proto b/src/test/resources/wiremock/proto/system.model.proto
new file mode 100644
index 0000000..81f9efd
--- /dev/null
+++ b/src/test/resources/wiremock/proto/system.model.proto
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.system;
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.system";
+option java_outer_classname = "SystemStatusModelProto";
+
+message GrpcGetSystemStatusRequest {}
+
+message GrpcGetSystemStatusResponse {
+  bool isSearchServerAvailable = 1;
+  string javaVersion = 2;
+  string buildVersion = 3;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/system.proto b/src/test/resources/wiremock/proto/system.proto
new file mode 100644
index 0000000..ba413cd
--- /dev/null
+++ b/src/test/resources/wiremock/proto/system.proto
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.system;
+
+import "system.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.system";
+option java_outer_classname = "SystemStatusProto";
+
+service SystemStatusService {
+
+  rpc GetSystemStatus(GrpcGetSystemStatusRequest) returns (GrpcGetSystemStatusResponse);
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/vorgang.model.proto b/src/test/resources/wiremock/proto/vorgang.model.proto
new file mode 100644
index 0000000..206498e
--- /dev/null
+++ b/src/test/resources/wiremock/proto/vorgang.model.proto
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.vorgang;
+
+import "clientattribute.model.proto";
+import "common.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.vorgang";
+option java_outer_classname = "VorgangModelProto";
+
+message GrpcVorgangHeader {
+  string id = 1;
+  int64 version = 2;
+  string status = 3;
+  string name = 4;
+  string createdAt = 5;
+  string aktenzeichen = 6;
+  string assignedTo = 7;
+  string nummer = 8;
+  repeated de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute clientAttributes = 9;
+  string formEngineName = 15;
+}
+
+message GrpcVorgangWithEingang {
+  string id = 1;
+  int64 version = 2;
+  string status = 3;
+  string name = 4;
+  string createdAt = 5;
+  string aktenzeichen = 6;
+  string assignedTo = 7;
+  string nummer = 8;
+  repeated de.ozgcloud.vorgang.grpc.clientAttribute.GrpcClientAttribute clientAttributes = 9;
+
+  GrpcEingang eingang = 10;
+  string formEngineName = 15;
+  GrpcVorgangHead header = 16;
+}
+
+message GrpcVorgangHead {
+  GrpcServiceKonto serviceKonto = 1;
+  GrpcLock lock = 2;
+}
+
+message GrpcLock {
+  string clientName = 1;
+  string lockedSince = 2;
+  string reason = 3;
+}
+
+message GrpcEingang {
+  string id = 1;
+
+  GrpcEingangHeader header = 2;
+  GrpcAntragsteller antragsteller = 3;
+  GrpcZustaendigeStelle zustaendigeStelle = 4;
+
+  GrpcFormData formData = 10;
+
+  int32 numberOfAttachments = 11;
+  int32 numberOfRepresentations = 12;
+
+  repeated GrpcIncomingFileGroup attachments = 20;
+  repeated GrpcIncomingFile representations = 21;
+}
+
+message GrpcIncomingFileGroup {
+  string name = 1;
+  repeated GrpcIncomingFile files = 2;
+}
+
+message GrpcIncomingFile {
+  string id = 1;
+  string vendorId = 2;
+  string name = 3;
+  string contentType = 4;
+  int64 size = 5;
+  bytes content = 6;
+}
+
+message GrpcEingangHeader {
+  string requestId = 1;
+  string createdAt = 2;
+  string formId = 3;
+  string formName = 4;
+  string sender = 5;
+  string customer = 6 [deprecated = true];
+  string customerId = 7 [deprecated = true];
+  string client = 8 [deprecated = true];
+  string clientId = 9 [deprecated = true];
+  string formEngineName = 10;
+  GrpcServiceKonto serviceKonto = 11;
+  string vorgangNummer = 12;
+}
+
+message GrpcServiceKonto {
+  string type = 1;
+  repeated GrpcPostfachAddress postfachAddresses = 2;
+  string trustLevel = 3;
+}
+
+message GrpcPostfachAddress {
+  string version = 1;
+  de.ozgcloud.vorgang.common.GrpcObject identifier = 2;
+  int32 type = 3;
+}
+
+message GrpcAntragsteller {
+  string anrede = 1;
+  string nachname = 2;
+  string vorname = 3;
+  string geburtsdatum = 4;
+  string geburtsort = 5;
+  string geburtsname = 6;
+  string email = 7;
+  string telefon = 8;
+  string strasse = 9;
+  string hausnummer = 10;
+  string plz = 11;
+  string ort = 12;
+  string postfachId = 13 [deprecated = true];
+
+  GrpcFormData otherData = 30;
+  string firmaName = 31;
+}
+
+message GrpcFormData {
+  repeated GrpcFormField field = 1;
+  repeated GrpcSubForm form = 2;
+}
+
+message GrpcFormField {
+  string name = 1;
+  string value = 2;
+  string label = 3;
+}
+
+message GrpcSubForm {
+  string title = 1;
+  repeated GrpcFormField field = 2;
+  repeated GrpcSubForm subForm = 3;
+  string label = 4;
+  GrpcControlData controlData = 5;
+}
+
+message GrpcControlData {
+  bool metadata = 1;
+}
+
+message GrpcZustaendigeStelle {
+  string organisationseinheitenId = 1;
+  string email = 2;
+  string bezeichnung = 3;
+  string gemeindeSchluessel = 4;
+  string amtlicherRegionalSchluessel = 5;
+  string hausanschriftStrasse = 6;
+  string hausanschriftPlz = 7;
+  string hausanschriftOrt = 8;
+  string telefon = 9;
+}
+
+message GrpcQuery {
+  GrpcLogicalOperator logicalOperator = 1;
+  repeated GrpcVorgangQueryExpression expressions = 2;
+  GrpcQuery nestedQuery = 3;
+}
+
+enum GrpcLogicalOperator {
+  AND = 0;
+  OR = 1;
+}
+
+message GrpcVorgangQueryExpression {
+  string path = 1;
+  de.ozgcloud.vorgang.common.GrpcQueryOperator operator = 2;
+  oneof operand {
+    int32 operandIntValue = 3;
+    bool operandBoolValue = 4;
+    string operandStringValue = 5;
+  }
+}
+
+message GrpcCreateCollaborationVorgangRequest {
+  oneof request {
+    GrpcCreateCollaborationRequestData requestData = 1;
+  }
+}
+
+message GrpcCreateCollaborationRequestData {
+  string vorgangId = 1;
+  int32 collaborationLevel = 2;
+  string organisationEinheitId = 3;
+}
+
+message GrpcCreateCollaborationVorgangResponse {
+  string vorgangId = 1;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/vorgang.proto b/src/test/resources/wiremock/proto/vorgang.proto
new file mode 100644
index 0000000..2dbba69
--- /dev/null
+++ b/src/test/resources/wiremock/proto/vorgang.proto
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.vorgang;
+
+import "vorgang.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.vorgang";
+option java_outer_classname = "VorgangProto";
+
+service VorgangService {
+
+	rpc FindVorgang(GrpcFindVorgangRequest) returns (GrpcFindVorgangResponse) {
+	}
+	
+	rpc FindVorgangWithEingang(GrpcFindVorgangWithEingangRequest) returns (GrpcFindVorgangWithEingangResponse) {
+	}
+	
+	rpc StartCreation(GrpcCreateVorgangRequest) returns (GrpcCreateVorgangResponse) {
+	}
+	
+	rpc FinishCreation(GrpcFinishCreationRequest) returns (GrpcFinishCreationResponse) {
+	}
+
+	rpc CreateCollaborationVorgang(GrpcCreateCollaborationVorgangRequest) returns (GrpcCreateCollaborationVorgangResponse) {
+	}
+}
+
+message GrpcCreateVorgangRequest {
+	GrpcEingang eingang = 1;
+}
+
+message GrpcCreateVorgangResponse {
+	string vorgangId = 1;
+	string message = 2;
+}
+
+message GrpcFindVorgangRequest {
+	int32 offset = 1;
+	int32 limit = 2;
+	oneof request {
+		string searchBy = 3;
+		GrpcQuery query = 6;
+	}
+	GrpcFilterBy filterBy = 4;
+	GrpcOrderBy orderBy = 5;
+	
+	enum GrpcOrderBy {
+		PRIORITY = 0;
+		EA_PRIORITY = 1;
+		CREATED_AT_DESC = 2;
+		NEXT_WIEDERVORLAGE_FRIST = 3;
+	}
+}
+
+message GrpcFindVorgangResponse {
+	int64 total = 1;
+	repeated GrpcVorgangHeader vorgang = 2;
+}
+
+message GrpcFindVorgangWithEingangRequest {
+	string id = 1;
+	GrpcFilterBy filterBy = 2;
+}
+
+message GrpcFilterBy {
+	bool filterByOrganisationseinheitenId = 1;
+	repeated string organisationseinheitId = 2;
+	repeated string status = 3;
+	string assignedTo = 4;
+	bool filterByAssignedTo = 5;
+	bool hasNextWiedervorlageFrist = 6 [deprecated = true];
+}
+
+message GrpcFindVorgangWithEingangResponse {
+	GrpcVorgangWithEingang vorgangWithEingang = 1;
+}
+
+message GrpcFinishCreationRequest {
+	string vorgangId = 1;
+	repeated GrpcIncomingFileGroup attachments = 2;
+	repeated GrpcIncomingFile representations = 3;
+}
+
+message GrpcFinishCreationResponse {
+	string message = 1;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/vorgangattacheditem.model.proto b/src/test/resources/wiremock/proto/vorgangattacheditem.model.proto
new file mode 100644
index 0000000..06971f3
--- /dev/null
+++ b/src/test/resources/wiremock/proto/vorgangattacheditem.model.proto
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.vorgangAttachedItem;
+
+import "common.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.vorgangAttachedItem";
+option java_outer_classname = "VorgangAttachedItemModelProto";
+
+message GrpcVorgangAttachedItem {
+	string id = 1;
+	int64 version = 2;
+	string client = 3;
+	string vorgangId = 4;
+	string itemName = 5;
+	de.ozgcloud.vorgang.common.GrpcObject item = 6;
+}
\ No newline at end of file
diff --git a/src/test/resources/wiremock/proto/vorgangattacheditem.proto b/src/test/resources/wiremock/proto/vorgangattacheditem.proto
new file mode 100644
index 0000000..38e41cc
--- /dev/null
+++ b/src/test/resources/wiremock/proto/vorgangattacheditem.proto
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2023 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.
+ */
+syntax = "proto3";
+
+package de.ozgcloud.vorgang.vorgangAttachedItem;
+
+import "vorgangattacheditem.model.proto";
+
+option java_multiple_files = true;
+option java_package = "de.ozgcloud.vorgang.vorgangAttachedItem";
+option java_outer_classname = "VorgangAttachedItemProto";
+
+service VorgangAttachedItemService {
+	rpc GetById(GrpcVorgangAttachedItemRequest) returns (GrpcVorgangAttachedItemResponse) {
+	}
+	
+	rpc Find(GrpcFindVorgangAttachedItemRequest) returns (GrpcFindVorgangAttachedItemResponse) {
+	}
+}
+
+message GrpcVorgangAttachedItemRequest {
+	string id = 1;
+}
+
+message GrpcVorgangAttachedItemResponse {
+	GrpcVorgangAttachedItem vorgangAttachedItem = 1;
+}
+
+message GrpcFindVorgangAttachedItemRequest {
+	string vorgangId = 1;
+	string itemName = 2;
+	string client = 3;
+}
+
+message GrpcFindVorgangAttachedItemResponse {
+	repeated GrpcVorgangAttachedItem vorgangAttachedItems = 1;
+}
\ No newline at end of file
-- 
GitLab