From 89dbbb92d65bb208e3089efcad9b74f525cda60e Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Fri, 30 Aug 2024 15:30:13 +0200
Subject: [PATCH] OZG-6500 kc user precondition check user email

---
 .../user/KeycloakUserPreconditionService.java |  9 +++
 .../KeycloakUserPreconditionServiceTest.java  | 59 ++++++++++++++++++-
 2 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java
index 4e92bd3..d329c49 100644
--- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java
+++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java
@@ -55,6 +55,11 @@ class KeycloakUserPreconditionService {
 			return groupError;
 		}
 
+		if(!userEmailExists(user)) {
+			return Optional.of(String.format("User Email does not yet exist"));
+		}
+
+
 		return Optional.empty();
 	}
 
@@ -78,4 +83,8 @@ class KeycloakUserPreconditionService {
 				.map(groupName -> String.format("Group %s for realm %s does not exist yet", groupName, realm))
 				.findAny();
 	}
+
+	boolean userEmailExists(OzgCloudKeycloakUser user) {
+		return !user.getSpec().getKeycloakUser().getEmail().isEmpty();
+	}
 }
diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java
index 1800a5a..f12ddca 100644
--- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java
+++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java
@@ -41,6 +41,7 @@ import org.mockito.Spy;
 
 import de.ozgcloud.operator.keycloak.KeycloakClient;
 import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService;
+import io.fabric8.kubernetes.api.model.Secret;
 
 class KeycloakUserPreconditionServiceTest {
 
@@ -89,18 +90,54 @@ class KeycloakUserPreconditionServiceTest {
 
 			assertThat(response).isPresent();
 		}
+		@Test
+		void shouldReturnErrorIfUserEmailNotExists() {
+			var user = OzgCloudKeycloakUserTestFactory.create();
+			doReturn(true).when(service).realmExists(REALM);
+			//doReturn(false).when(service).userEmailExists(user);
+
+
+			var response = service.getPreconditionErrors(user);
+
+			assertThat(response).isPresent();
+		}
 
 		@Test
 		void shouldReturnEmptyIfRealmExists() {
+			var user = OzgCloudKeycloakUserTestFactory.create();
+			doReturn(true).when(service).userEmailExists(user);
 			doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString());
 			doReturn(Optional.empty()).when(service).clientsExists(any(), any());
 			doReturn(Optional.empty()).when(service).groupsExists(any(), any());
 
-			var response = service.getPreconditionErrors(OzgCloudKeycloakUserTestFactory.create());
+			var response = service.getPreconditionErrors(user);
 
 			assertThat(response).isEmpty();
 		}
 
+		@Test
+		void shouldReturnEmptyIfUserEmailExists() {
+			var user = OzgCloudKeycloakUserTestFactory.create();
+			doReturn(true).when(service).userEmailExists(user);
+			doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString());
+			doReturn(Optional.empty()).when(service).clientsExists(any(), any());
+			doReturn(Optional.empty()).when(service).groupsExists(any(), any());
+
+			var response = service.getPreconditionErrors(user);
+
+			assertThat(response).isEmpty();
+		}
+		@Test
+		void shouldCheckUserEmailExists() {
+			var user = OzgCloudKeycloakUserTestFactory.create();
+			doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString());
+			doReturn(Optional.empty()).when(service).clientsExists(any(), any());
+			doReturn(Optional.empty()).when(service).groupsExists(any(), any());
+
+			service.getPreconditionErrors(user);
+
+			verify(service).userEmailExists(user);
+		}
 		@Test
 		void shouldCheckIfKeycloakClientExists() {
 			doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString());
@@ -144,6 +181,26 @@ class KeycloakUserPreconditionServiceTest {
 		}
 	}
 
+	@Nested
+	class TestUserEmailExists {
+
+		@Test
+		void shouldRespondUserEmailExists() {
+
+			var response = service.userEmailExists(OzgCloudKeycloakUserTestFactory.create());
+
+			assertThat(response).isTrue();
+		}
+		@Test
+		void shouldRespondUserEmailNotExists() {
+            var user = OzgCloudKeycloakUserTestFactory.create();
+			user.getSpec().getKeycloakUser().setEmail("");
+			var response = service.userEmailExists(user);
+
+			assertThat(response).isFalse();
+		}
+	}
+
 	@Nested
 	class TestClientExists {
 
-- 
GitLab