From dc6521a4548192ea55ba23b2ec5d086eb4ee6d0e Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 27 Aug 2024 22:30:28 +0200
Subject: [PATCH] OZG-6177 add junittests

---
 ...udElsterTransferUserRemoteServiceTest.java | 235 ++++++++++++++++++
 ...OzgCloudElsterTransferUserServiceTest.java |   5 +
 2 files changed, 240 insertions(+)
 create mode 100644 src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java
 create mode 100644 src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java

diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java
new file mode 100644
index 0000000..4972d12
--- /dev/null
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java
@@ -0,0 +1,235 @@
+package de.ozgcloud.operator.elstertransfer.user;
+
+import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
+import io.fabric8.kubernetes.api.model.ConfigMapList;
+import io.fabric8.kubernetes.api.model.KubernetesResourceList;
+import io.fabric8.kubernetes.api.model.PodTemplateSpec;
+import io.fabric8.kubernetes.api.model.Secret;
+import io.fabric8.kubernetes.api.model.SecretBuilder;
+import io.fabric8.kubernetes.api.model.SecretList;
+import io.fabric8.kubernetes.api.model.apps.Deployment;
+import io.fabric8.kubernetes.api.model.apps.DeploymentList;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.Resource;
+import io.fabric8.kubernetes.client.dsl.RollableScalableResource;
+import io.fabric8.kubernetes.api.model.ObjectMeta;
+import io.fabric8.kubernetes.api.model.apps.Deployment;
+import io.fabric8.kubernetes.api.model.apps.DeploymentSpec;
+import io.fabric8.kubernetes.api.model.PodTemplateSpec;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Base64;
+import java.util.HashMap;
+import java.util.Map;
+import io.fabric8.kubernetes.client.KubernetesClient;
+import io.fabric8.kubernetes.client.dsl.AppsAPIGroupDSL;
+import io.fabric8.kubernetes.client.dsl.MixedOperation;
+import io.fabric8.kubernetes.client.dsl.NonNamespaceOperation;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.mockito.Spy;
+
+import static org.junit.jupiter.api.Assertions.*;
+import static org.mockito.Mockito.*;
+
+class OzgCloudElsterTransferUserRemoteServiceTest {
+
+    @Mock
+    private KubernetesClient client;
+
+    @Mock
+    private RollableScalableResource<Deployment> deploymentResource;
+
+    
+    @Mock
+    private AppsAPIGroupDSL appsAPIGroupDSL;
+    @Mock
+    private Resource<Secret> secretResource;
+
+    @Spy
+    @InjectMocks
+    private OzgCloudElsterTransferUserRemoteService remoteService;
+
+
+    @Mock
+    private MixedOperation<Deployment, DeploymentList, RollableScalableResource<Deployment>> deploymentOperation;
+    @Mock
+    private MixedOperation<ConfigMap, ConfigMapList, Resource<ConfigMap>> configMapOperation;
+
+    @Mock
+    private NonNamespaceOperation<ConfigMap, ConfigMapList, Resource<ConfigMap>> nonNamespaceOperation;
+
+    @Mock
+    private Resource<ConfigMap> configMapResource;
+
+    @Mock
+    private MixedOperation<Secret, SecretList, Resource<Secret>> secretOperation;
+
+
+    @Mock
+    private ConfigMap configMap;
+
+
+    private static final String namespace = OzgCloudElsterTransferUserTestFactory.METADATA_NAMESPACE;
+    private static final String configMapName = OzgCloudElsterTransferUserTestFactory.CONFIG_MAP_NAME;
+    private static final String deploymentName = OzgCloudElsterTransferUserTestFactory.ETR_DEPLOYMENT_NAME;
+    private static final String secretName = OzgCloudElsterTransferUserTestFactory.MUK_USER_SECRET_NAME;
+    private static final String configmapNamespace = "etr-user-creation";
+
+    @DisplayName("test configmap")
+	@Nested
+	class TestConfigMap {
+    @BeforeEach
+    void setUp() {
+       // MockitoAnnotations.openMocks(this);
+        when(client.configMaps()).thenReturn(configMapOperation);
+        when(configMapOperation.inNamespace(configmapNamespace)).thenReturn(nonNamespaceOperation);
+    }
+     @Test
+    void testCallGetConfigMap() {
+        
+        when(nonNamespaceOperation.withName(configMapName)).thenReturn(configMapResource);
+        when(configMapResource.get()).thenReturn(configMap);
+       
+        remoteService.getConfigMap(configmapNamespace, configMapName);
+
+        //verify(configMapOperation.inNamespace(namespace).withName(configMapName)).get();
+
+        //verify(configMapOperation).inNamespace(configmapNamespace);
+        //verify(nonNamespaceOperation).withName(configMapName);
+        //verify(configMapResource).get();
+        verify(client.configMaps().inNamespace(configmapNamespace).withName(configMapName)).get();
+    }
+
+
+    @Test
+    void testCreateConfigMap() {
+        when(nonNamespaceOperation.resource(any(ConfigMap.class))).thenReturn(configMapResource);
+            configMap = new ConfigMapBuilder()
+                .withNewMetadata()
+                .withName(configMapName)
+                .endMetadata()
+                .addToData("key", "value")
+                .build();
+                when(configMapResource.create()).thenReturn(configMap);
+
+
+        ConfigMap result = remoteService.createConfigMap(configmapNamespace, configMapName);
+
+        assertNotNull(result);
+        assert configMapName.equals(result.getMetadata().getName());
+
+        //
+      //  verify(client).configMaps();
+        //verify(configMapOperation).inNamespace(configmapNamespace);
+       // verify(nonNamespaceOperation).resource(any(ConfigMap.class));
+       // verify(configMapResource).create();
+        verify(client.configMaps().inNamespace(configmapNamespace).resource(result)).create();
+    }
+
+    @Test
+    void testUpdateConfigMapData() {
+        when(nonNamespaceOperation.resource(any(ConfigMap.class))).thenReturn(configMapResource);
+
+        String key = "test-key";
+        String data = "new-data";
+
+        Map<String, String> mapData = new HashMap<>();
+        mapData.put("initial-key", "initial-value");
+
+        ConfigMap configMap = new ConfigMap();
+        configMap.setMetadata(new io.fabric8.kubernetes.api.model.ObjectMeta());
+        configMap.getMetadata().setNamespace(configmapNamespace);
+        configMap.setData(mapData);
+
+        remoteService.updateConfigMapData(configMap, key, data);
+
+        // Assert: Verify the data is updated in the ConfigMap
+        assert configMap.getData().containsKey(key);
+        assert "new-data".equals(configMap.getData().get(key));
+
+        // Verify interactions with Kubernetes client
+        verify(client).configMaps();
+        verify(configMapOperation).inNamespace(configmapNamespace);
+        verify(nonNamespaceOperation).resource(configMap);
+        verify(configMapResource).update();
+    }
+}
+
+ @DisplayName("restart deployment")
+	@Nested
+	class TestRestartDeployment {
+        Deployment deployment= new Deployment();
+        @BeforeEach
+        void setUp() {
+           
+        deployment.setSpec(new DeploymentSpec());
+        deployment.getSpec().setTemplate(new PodTemplateSpec());
+        deployment.getSpec().getTemplate().setMetadata(new ObjectMeta());
+        }
+    @Test
+    void testRestartDeployment() {
+        when(client.apps()).thenReturn(appsAPIGroupDSL);
+        when(appsAPIGroupDSL.deployments()).thenReturn(deploymentOperation);
+        when(deploymentOperation.inNamespace(anyString())).thenReturn(deploymentOperation);
+        when(deploymentOperation.withName(anyString())).thenReturn(deploymentResource);
+        when(deploymentResource.get()).thenReturn(deployment);
+
+        remoteService.restartDeployment(namespace, deploymentName);
+
+
+        verify(deploymentResource).get();
+        verify(deploymentResource).replace(deployment);
+        verify(remoteService).setRestartFlag(deployment);
+    }
+
+    @Test
+    void testSetRestartFlag() {       
+        Map<String, String> annotations = new HashMap<>();
+        deployment.getSpec().getTemplate().getMetadata().setAnnotations(annotations);
+
+        remoteService.setRestartFlag(deployment);
+
+        assert annotations.containsKey("kubectl.kubernetes.io/restartedAt");
+        assert annotations.get("kubectl.kubernetes.io/restartedAt") != null;
+    }
+}
+
+    @Test
+    void shouldCallCreateOrUpdateSecret() {
+        when(client.secrets()).thenReturn(secretOperation);
+        when(secretOperation.inNamespace(anyString())).thenReturn(secretOperation);
+        when(secretOperation.resource(any(Secret.class))).thenReturn(secretResource);
+    
+        String userPassword = "test-password";
+        Secret secret = new SecretBuilder()
+				.withNewMetadata()
+				.withName(secretName)
+				.endMetadata()
+				.addToData("login", Base64.getEncoder().encodeToString(namespace.getBytes()))
+				.addToData("password", Base64.getEncoder().encodeToString(userPassword.getBytes()))
+				.build();
+
+        remoteService.createOrUpdateSecret(namespace, userPassword, secretName);
+
+        //verify(secretOperation).inNamespace(namespace);
+        //verify(secretOperation).resource(secret);
+       // verify(secretResource).createOrReplace();
+        verify(client.secrets().inNamespace(namespace).resource(secret)).createOrReplace();
+        
+
+    }
+ 
+}
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
new file mode 100644
index 0000000..ad2e148
--- /dev/null
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
@@ -0,0 +1,5 @@
+package de.ozgcloud.operator.elstertransfer.user;
+
+public class OzgCloudElsterTransferUserServiceTest {
+    
+}
-- 
GitLab