From 3f28c5a9d3a4348d4ae6cb746e5833263361749d Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Thu, 25 Apr 2024 12:40:56 +0200
Subject: [PATCH] OZG-5167: bind grpc call

---
 .../alfa/bescheid/BescheidRemoteService.java  |  5 ++-
 .../bescheid/BescheidRemoteServiceTest.java   | 40 +++++++++++++++++++
 ...scheidManagerConfigRequestTestFactory.java | 14 +++++++
 ...cheidManagerConfigResponseTestFactory.java | 18 +++++++++
 ...rpcBescheidManagerFeaturesTestFactory.java | 16 ++++++++
 pom.xml                                       |  2 +-
 6 files changed, 92 insertions(+), 3 deletions(-)
 create mode 100644 alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java
 create mode 100644 alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
 create mode 100644 alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java

diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
index 5050e20b40..52a882303b 100644
--- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
+++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidRemoteService.java
@@ -8,6 +8,7 @@ import org.springframework.stereotype.Service;
 import de.ozgcloud.alfa.common.GrpcUtil;
 import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub;
 import de.ozgcloud.bescheid.GrpcBescheid;
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse;
 import net.devh.boot.grpc.client.inject.GrpcClient;
@@ -37,7 +38,7 @@ class BescheidRemoteService {
 	}
 
 	public boolean canCreateBescheidDocument() {
-		// TODO: waiting for OZG-5585
-		return true;
+		var response = bescheidServiceStub.getConfig(GrpcBescheidManagerConfigRequest.newBuilder().build());
+		return response.hasFeatures() && response.getFeatures().getCanCreateBescheidDocument();
 	}
 }
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
index 07da3f1e48..d08fe3d917 100644
--- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidRemoteServiceTest.java
@@ -14,6 +14,8 @@ import org.mockito.Spy;
 
 import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory;
 import de.ozgcloud.bescheid.BescheidServiceGrpc.BescheidServiceBlockingStub;
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest;
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftRequest;
 import de.ozgcloud.bescheid.GrpcGetBescheidDraftResponse;
 
@@ -122,12 +124,50 @@ class BescheidRemoteServiceTest {
 	@Nested
 	class TestCanCreateBescheidDocument {
 
+		private final GrpcBescheidManagerConfigRequest request = GrpcBescheidManagerConfigRequestTestFactory.create();
+		private final GrpcBescheidManagerConfigResponse respone = GrpcBescheidManagerConfigResponseTestFactory.create();
+
+		@BeforeEach
+		void setUp() {
+			when(bescheidServiceStub.getConfig(request)).thenReturn(respone);
+		}
+
+		@Test
+		void shouldCallRemoteService() {
+			service.canCreateBescheidDocument();
+
+			verify(bescheidServiceStub).getConfig(request);
+		}
+
 		@Test
 		void shouldReturnTrue() {
 			var canCreate = service.canCreateBescheidDocument();
 
 			assertThat(canCreate).isTrue();
 		}
+
+		@Test
+		void shouldReturnFalseIfNoFeaturesAvailable() {
+			when(bescheidServiceStub.getConfig(request)).thenReturn(GrpcBescheidManagerConfigResponseTestFactory.empty());
+
+			var canCreate = service.canCreateBescheidDocument();
+
+			assertThat(canCreate).isFalse();
+		}
+
+		@Test
+		void shouldReturnFalseIfFeatureDisabled() {
+			var respones = GrpcBescheidManagerConfigResponseTestFactory.createBuilder()
+					.setFeatures(GrpcBescheidManagerFeaturesTestFactory.createBuilder()
+							.setCanCreateBescheidDocument(false)
+							.build())
+					.build();
+			when(bescheidServiceStub.getConfig(request)).thenReturn(respones);
+
+			var canCreate = service.canCreateBescheidDocument();
+
+			assertThat(canCreate).isFalse();
+		}
 	}
 
 }
\ No newline at end of file
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java
new file mode 100644
index 0000000000..b3b7518632
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigRequestTestFactory.java
@@ -0,0 +1,14 @@
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigRequest;
+
+public class GrpcBescheidManagerConfigRequestTestFactory {
+
+	public static GrpcBescheidManagerConfigRequest create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcBescheidManagerConfigRequest.Builder createBuilder() {
+		return GrpcBescheidManagerConfigRequest.newBuilder();
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
new file mode 100644
index 0000000000..d15b8aea1d
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerConfigResponseTestFactory.java
@@ -0,0 +1,18 @@
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.bescheid.GrpcBescheidManagerConfigResponse;
+
+public class GrpcBescheidManagerConfigResponseTestFactory {
+
+	public static GrpcBescheidManagerConfigResponse empty() {
+		return GrpcBescheidManagerConfigResponse.newBuilder().build();
+	}
+
+	public static GrpcBescheidManagerConfigResponse create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcBescheidManagerConfigResponse.Builder createBuilder() {
+		return GrpcBescheidManagerConfigResponse.newBuilder().setFeatures(GrpcBescheidManagerFeaturesTestFactory.create());
+	}
+}
diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java
new file mode 100644
index 0000000000..fc745ca20b
--- /dev/null
+++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/GrpcBescheidManagerFeaturesTestFactory.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.alfa.bescheid;
+
+import de.ozgcloud.bescheid.GrpcBescheidManagerFeatures;
+
+public class GrpcBescheidManagerFeaturesTestFactory {
+
+	public static final boolean CAN_CREATE_BESCHEID = true;
+
+	public static GrpcBescheidManagerFeatures create() {
+		return createBuilder().build();
+	}
+
+	public static GrpcBescheidManagerFeatures.Builder createBuilder() {
+		return GrpcBescheidManagerFeatures.newBuilder().setCanCreateBescheidDocument(CAN_CREATE_BESCHEID);
+	}
+}
diff --git a/pom.xml b/pom.xml
index b061f02e10..7986fc9ca3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,7 +50,7 @@
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
-		<vorgang-manager.version>2.6.0</vorgang-manager.version>
+		<vorgang-manager.version>2.7.0-SNAPSHOT</vorgang-manager.version>
 		<ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version>
 		<user-manager.version>2.2.0</user-manager.version>
 
-- 
GitLab