From aac8f3f1dd3ae5e3a78bc4f81748b089d585c7ca Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 12 Jun 2023 09:43:17 +0200
Subject: [PATCH] add unit test to reconciler

---
 pom.xml                                       |  7 +++++
 .../java/de/ozgcloud/operator/Config.java     |  9 +++---
 .../keycloak/KeycloakUserReconciler.java      |  4 ++-
 .../operator/keycloak/KeycloakUserSpec.java   |  2 ++
 .../operator/OzgOperatorApplicationTests.java |  7 +++--
 .../keycloak/KeycloakUserReconcilerTest.java  | 28 +++++++++++++++++++
 .../keycloak/KeycloakUserSpecTestFactory.java | 15 ++++++++++
 .../KeycloakUserStatusTestFactory.java        | 12 ++++++++
 .../keycloak/KeycloakUserTestFactory.java     | 16 +++++++++++
 src/test/resources/KeycloakUserTest.yaml      |  6 ++++
 src/test/resources/application.yaml           |  4 +++
 11 files changed, 103 insertions(+), 7 deletions(-)
 create mode 100644 src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserReconcilerTest.java
 create mode 100644 src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecTestFactory.java
 create mode 100644 src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserStatusTestFactory.java
 create mode 100644 src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserTestFactory.java
 create mode 100644 src/test/resources/KeycloakUserTest.yaml
 create mode 100644 src/test/resources/application.yaml

diff --git a/pom.xml b/pom.xml
index 5492f8f..c7e70e8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,6 +16,7 @@
 	<properties>
 		<java.version>17</java.version>
 		<operator-sdk.version>5.0.0</operator-sdk.version>
+<!--		<operator-sdk.version>4.2.8</operator-sdk.version>-->
 	</properties>
 	<dependencies>
 		<dependency>
@@ -39,6 +40,12 @@
 			<artifactId>spring-boot-starter-test</artifactId>
 			<scope>test</scope>
 		</dependency>
+<!--		<dependency>-->
+<!--		    <groupId>io.javaoperatorsdk</groupId>-->
+<!--		    <artifactId>operator-framework-spring-boot-starter-test</artifactId>-->
+<!--		    <version>${operator-sdk.version}</version>-->
+<!--			<scope>test</scope>-->
+<!--		</dependency>-->
 	</dependencies>
 
 	<build>
diff --git a/src/main/java/de/ozgcloud/operator/Config.java b/src/main/java/de/ozgcloud/operator/Config.java
index a49ec66..f2fd9bb 100644
--- a/src/main/java/de/ozgcloud/operator/Config.java
+++ b/src/main/java/de/ozgcloud/operator/Config.java
@@ -5,16 +5,17 @@ import java.util.List;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import de.ozgcloud.operator.keycloak.KeycloakUserReconciler;
 import io.javaoperatorsdk.operator.Operator;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 
 @Configuration
 public class Config {
 
-//	@Bean
-//	WebPageReconciler customServiceController() {
-//		return new WebPageReconciler();
-//	}
+	@Bean
+	KeycloakUserReconciler customServiceController() {
+		return new KeycloakUserReconciler();
+	}
 
 	@Bean(initMethod = "start", destroyMethod = "stop")
 	@SuppressWarnings("rawtypes")
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserReconciler.java b/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserReconciler.java
index 8d93968..54297d2 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserReconciler.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.operator.keycloak;
 
+import java.time.LocalDate;
+
 import io.javaoperatorsdk.operator.api.reconciler.Context;
 import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
@@ -15,7 +17,7 @@ public class KeycloakUserReconciler implements Reconciler<KeycloakUser> {
 //		String name = crd.getMetadata().getName();
 		String name = crd.getSpec().getName();
 		log.info("Reconciling: {}", name);
-		crd.setStatus(KeycloakUserStatus.builder().status("Updated status for " + name).build());
+		crd.setStatus(KeycloakUserStatus.builder().status("Updated status for " + name + LocalDate.now().toString()).build());
 		return UpdateControl.updateStatus(crd);
 	}
 }
diff --git a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserSpec.java b/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserSpec.java
index 1f813f9..4e38ab0 100644
--- a/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserSpec.java
+++ b/src/main/java/de/ozgcloud/operator/keycloak/KeycloakUserSpec.java
@@ -1,10 +1,12 @@
 package de.ozgcloud.operator.keycloak;
 
+import lombok.Builder;
 import lombok.Getter;
 import lombok.Setter;
 
 @Getter
 @Setter
+@Builder
 public class KeycloakUserSpec {
 
 	private String name;
diff --git a/src/test/java/de/ozgcloud/operator/OzgOperatorApplicationTests.java b/src/test/java/de/ozgcloud/operator/OzgOperatorApplicationTests.java
index f0e8352..5a93a7b 100644
--- a/src/test/java/de/ozgcloud/operator/OzgOperatorApplicationTests.java
+++ b/src/test/java/de/ozgcloud/operator/OzgOperatorApplicationTests.java
@@ -1,12 +1,15 @@
 package de.ozgcloud.operator;
 
 import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
 
-//@SpringBootTest
+import io.javaoperatorsdk.operator.springboot.starter.test.EnableMockOperator;
+
+@SpringBootTest
+@EnableMockOperator
 class OzgOperatorApplicationTests {
 
 	@Test
 	void contextLoads() {
 	}
-
 }
diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserReconcilerTest.java b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserReconcilerTest.java
new file mode 100644
index 0000000..0ce2f63
--- /dev/null
+++ b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserReconcilerTest.java
@@ -0,0 +1,28 @@
+package de.ozgcloud.operator.keycloak;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import lombok.SneakyThrows;
+
+class KeycloakUserReconcilerTest {
+
+	KeycloakUserReconciler conciler = new KeycloakUserReconciler();
+
+	@Nested
+	class TestKeycloalUserStatus {
+
+		@Test
+		@SneakyThrows
+		void shouldSetStatus() {
+
+			KeycloakUser user = KeycloakUserTestFactory.create();
+
+			conciler.reconcile(user, null);
+
+			assertThat(user.getStatus().getStatus()).contains("Updated");
+		}
+	}
+}
diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecTestFactory.java
new file mode 100644
index 0000000..98a25f9
--- /dev/null
+++ b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserSpecTestFactory.java
@@ -0,0 +1,15 @@
+package de.ozgcloud.operator.keycloak;
+
+class KeycloakUserSpecTestFactory {
+
+	public static final String NAME = "Hans";
+
+	public static KeycloakUserSpec create() {
+		return createBuilder().build();
+	}
+
+	private static KeycloakUserSpec.KeycloakUserSpecBuilder createBuilder() {
+		return KeycloakUserSpec.builder()
+				.name(NAME);
+	}
+}
diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserStatusTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserStatusTestFactory.java
new file mode 100644
index 0000000..d756b40
--- /dev/null
+++ b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserStatusTestFactory.java
@@ -0,0 +1,12 @@
+package de.ozgcloud.operator.keycloak;
+
+class KeycloakUserStatusTestFactory {
+
+	public static KeycloakUserStatus create() {
+		return createBuiler().build();
+	}
+
+	private static KeycloakUserStatus.KeycloakUserStatusBuilder createBuiler() {
+		return KeycloakUserStatus.builder();
+	}
+}
diff --git a/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserTestFactory.java b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserTestFactory.java
new file mode 100644
index 0000000..8e4f870
--- /dev/null
+++ b/src/test/java/de/ozgcloud/operator/keycloak/KeycloakUserTestFactory.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.operator.keycloak;
+
+class KeycloakUserTestFactory {
+
+	public static final KeycloakUserStatus KEYCLOAK_USER_STATUS = KeycloakUserStatusTestFactory.create();
+
+	public static final KeycloakUserSpec KEYCLOAK_USER_SPEC = KeycloakUserSpecTestFactory.create();
+
+	public static KeycloakUser create() {
+		KeycloakUser keycloakUser = new KeycloakUser();
+		keycloakUser.setStatus(KEYCLOAK_USER_STATUS);
+		keycloakUser.setSpec(KEYCLOAK_USER_SPEC);
+		return keycloakUser;
+	}
+
+}
diff --git a/src/test/resources/KeycloakUserTest.yaml b/src/test/resources/KeycloakUserTest.yaml
new file mode 100644
index 0000000..77f7702
--- /dev/null
+++ b/src/test/resources/KeycloakUserTest.yaml
@@ -0,0 +1,6 @@
+apiVersion: "operator.ozgcloud.de/v1"
+kind: KeycloakUser
+metadata:
+  name: keycloakuser-test
+spec:
+  name: helge
diff --git a/src/test/resources/application.yaml b/src/test/resources/application.yaml
new file mode 100644
index 0000000..df32da5
--- /dev/null
+++ b/src/test/resources/application.yaml
@@ -0,0 +1,4 @@
+
+javaoperatorsdk:
+  test:
+    crdPaths: classpath:KeycloakUserTest.yaml
\ No newline at end of file
-- 
GitLab