From 78cb540aa8d17595c824fbb65dc84f77724b560a Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 30 Sep 2024 11:06:57 +0200
Subject: [PATCH] OZG-6751 Testcoverage verbessert

---
 .../information/InfoManagerProperties.java    |  7 ++-
 .../info/nachricht/NachrichtGrpcService.java  | 10 ++--
 .../info/InfoManagerApplicationTest.java      |  6 +++
 .../info/NachrichtEventTestFactory.java       |  6 ++-
 .../InfoManagerPropertiesITCase.java          | 54 +++++++++++++++++++
 .../nachricht/NachrichtenGrpcServiceTest.java | 28 ++++++++++
 .../nachricht/NachrichtenServiceTest.java     |  4 ++
 7 files changed, 107 insertions(+), 8 deletions(-)
 create mode 100644 info-manager-server/src/test/java/de/ozgcloud/info/information/InfoManagerPropertiesITCase.java

diff --git a/info-manager-server/src/main/java/de/ozgcloud/info/information/InfoManagerProperties.java b/info-manager-server/src/main/java/de/ozgcloud/info/information/InfoManagerProperties.java
index 1cd0f36..18c39e6 100644
--- a/info-manager-server/src/main/java/de/ozgcloud/info/information/InfoManagerProperties.java
+++ b/info-manager-server/src/main/java/de/ozgcloud/info/information/InfoManagerProperties.java
@@ -21,14 +21,19 @@
 package de.ozgcloud.info.information;
 
 import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
 import org.springframework.context.annotation.Configuration;
 
 import lombok.Getter;
+import lombok.Setter;
 
 @Getter
+@Setter
 @Configuration
 @ConfigurationProperties(prefix = InfoManagerProperties.PREFIX)
+@ConfigurationPropertiesScan
 public class InfoManagerProperties {
 	static final String PREFIX = "ozgcloud.infomanager";
-	private final String postfachIdKeyName = "postkorbhandle";
+	public static final String POSTKORBHANDLE = "postkorbhandle";
+	private String postfachIdKeyName = POSTKORBHANDLE;
 }
diff --git a/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java b/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java
index 4bae807..dea9163 100644
--- a/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java
+++ b/info-manager-server/src/main/java/de/ozgcloud/info/nachricht/NachrichtGrpcService.java
@@ -57,18 +57,16 @@ public class NachrichtGrpcService extends NachrichtServiceGrpc.NachrichtServiceI
 	private void saveNachricht(GrpcNewNachrichtRequest request) {
 		var nachricht = nachrichtenMapper.fromGrpcNachricht(request.getNachricht());
 
-		if (isValid(nachricht)) {
-			nachrichtService.save(nachricht);
-		}
+		checkForValidity(nachricht);
+		
+		nachrichtService.save(nachricht);
 	}
 
-	private boolean isValid(NachrichtEvent nachrichtEvent) {
+	private void checkForValidity(NachrichtEvent nachrichtEvent) {
 		Set<ConstraintViolation<NachrichtEvent>> violations = validator.validate(nachrichtEvent);
 		if (!violations.isEmpty()) {
 			throw new ConstraintViolationException(violations);
 		}
-
-		return true;
 	}
 
 	@Override
diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/InfoManagerApplicationTest.java b/info-manager-server/src/test/java/de/ozgcloud/info/InfoManagerApplicationTest.java
index bece6d4..5ccbd9a 100644
--- a/info-manager-server/src/test/java/de/ozgcloud/info/InfoManagerApplicationTest.java
+++ b/info-manager-server/src/test/java/de/ozgcloud/info/InfoManagerApplicationTest.java
@@ -22,6 +22,7 @@
  */
 package de.ozgcloud.info;
 
+import org.junit.jupiter.api.Test;
 import org.mockito.InjectMocks;
 import org.mockito.Spy;
 
@@ -29,4 +30,9 @@ class InfoManagerApplicationTest {
 	@Spy
 	@InjectMocks
 	private InfoManagerApplication application;
+
+	@Test
+	void shouldLoadContext() { //NOSONAR
+		// empty
+	}
 }
\ No newline at end of file
diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java b/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java
index e263d68..cc97023 100644
--- a/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java
+++ b/info-manager-server/src/test/java/de/ozgcloud/info/NachrichtEventTestFactory.java
@@ -47,7 +47,11 @@ public class NachrichtEventTestFactory {
 	}
 
 	public static GrpcNewNachrichtRequest createNewNachrichtRequest() {
-		return GrpcNewNachrichtRequest.newBuilder().setNachricht(createGrpcNachricht()).build();
+		return createNewNachrichtRequestBuilder().setNachricht(createGrpcNachricht()).build();
+	}
+
+	public static GrpcNewNachrichtRequest.Builder createNewNachrichtRequestBuilder() {
+		return GrpcNewNachrichtRequest.newBuilder().setNachricht(createGrpcNachricht());
 	}
 
 	public static GrpcFinishedNachrichtRequest createFinishNachrichtRequest() {
diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/information/InfoManagerPropertiesITCase.java b/info-manager-server/src/test/java/de/ozgcloud/info/information/InfoManagerPropertiesITCase.java
new file mode 100644
index 0000000..04e51e5
--- /dev/null
+++ b/info-manager-server/src/test/java/de/ozgcloud/info/information/InfoManagerPropertiesITCase.java
@@ -0,0 +1,54 @@
+package de.ozgcloud.info.information;
+
+import static de.ozgcloud.info.information.InfoManagerProperties.*;
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+
+import de.ozgcloud.common.test.ITCase;
+
+@SpringBootTest(classes = { InfoManagerProperties.class })
+@ITCase
+class InfoManagerPropertiesITCase {
+	@TestPropertySource(properties = {
+	  InfoManagerProperties.PREFIX + ".postfachIdKeyName" + "=" + TestLoadingConfiguration.OTHER_POSTFACH_KEY,
+	})
+	@Nested
+	class TestLoadingConfiguration {
+		static final String OTHER_POSTFACH_KEY = "otherPostfachKey";
+
+		@Autowired
+		private InfoManagerProperties infoManagerProperties;
+
+		@Test
+		void shouldHaveProperties() {
+			assertThat(infoManagerProperties).isNotNull();
+		}
+
+		@Test
+		void testPostfachHandleKey() {
+			assertThat(infoManagerProperties.getPostfachIdKeyName()).isEqualTo(OTHER_POSTFACH_KEY);
+		}
+	}
+
+	@Nested
+	class TestLoadingDefaultConfiguration {
+
+		@Autowired
+		private InfoManagerProperties infoManagerProperties;
+
+		@Test
+		void shouldHaveProperties() {
+			assertThat(infoManagerProperties).isNotNull();
+		}
+
+		@Test
+		void testPostfachHandleKey() {
+			assertThat(infoManagerProperties.getPostfachIdKeyName()).isEqualTo(POSTKORBHANDLE);
+		}
+	}
+}
\ No newline at end of file
diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceTest.java b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceTest.java
index 223e74b..5c31a18 100644
--- a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceTest.java
+++ b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenGrpcServiceTest.java
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.*;
 
 import java.util.Set;
 
+import jakarta.validation.ConstraintViolation;
 import jakarta.validation.ConstraintViolationException;
 import jakarta.validation.Validator;
 
@@ -129,6 +130,33 @@ class NachrichtenGrpcServiceTest {
 		}
 	}
 
+	@Nested
+	class TestSaveInvalidNewNachrichtEvent {
+		@Mock
+		private StreamObserver<GrpcNewNachrichtReply> newNachrichtStreamObserver;
+		private final GrpcNachricht invalidNachricht = NachrichtEventTestFactory.createGrpcNachrichtBuilder().setNachrichtenListUrl("invalid")
+		  .build();
+		private final GrpcNewNachrichtRequest invalidNachrichtRequest = NachrichtEventTestFactory.createNewNachrichtRequestBuilder()
+		  .setNachricht(invalidNachricht).build();
+
+		@BeforeEach
+		@SuppressWarnings("unchecked")
+		void init() {
+			when(nachrichtenMapper.fromGrpcNachricht(any())).thenReturn(
+			  NachrichtEventTestFactory.createNachrichtEventBuilder().id(null).nachrichtenListUrl("invalid").build());
+			var constraintViolation = mock(ConstraintViolation.class);
+
+			when(validator.validate(any(NachrichtEvent.class))).thenReturn(Set.of(constraintViolation));
+		}
+
+		@Test
+		void shouldNotCreateNachrichtBecauseInvalidNachrichtenListUrl() {
+			nachrichtenGrpcService.saveNewNachricht(invalidNachrichtRequest, newNachrichtStreamObserver);
+
+			verify(nachrichtenService, never()).save(any());
+		}
+	}
+
 	@Nested
 	class TestFinishNachrichtEvent {
 		@Mock
diff --git a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenServiceTest.java b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenServiceTest.java
index 38d8a14..d93e6e6 100644
--- a/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenServiceTest.java
+++ b/info-manager-server/src/test/java/de/ozgcloud/info/nachricht/NachrichtenServiceTest.java
@@ -94,6 +94,10 @@ class NachrichtenServiceTest {
 	class TestFinishNachrichtEvent {
 		@Test
 		void shouldCallDelete() {
+			when(
+			  repository.findByPostfachIdAndNachrichtenListUrl(NachrichtEventTestFactory.POSTKORB_HANDLE, NachrichtEventTestFactory.URL)).thenReturn(
+			  Optional.of(NachrichtEventTestFactory.createNachrichtEvent()));
+			
 			service.finish(NachrichtEventTestFactory.createNachrichtEvent());
 
 			verify(repository, atMostOnce()).findByPostfachIdAndNachrichtenListUrl(NachrichtEventTestFactory.POSTKORB_HANDLE,
-- 
GitLab