From bd0298993168eb3ea0d7c5b51f8ea37b64e0f019 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 21 Oct 2024 17:02:40 +0200
Subject: [PATCH] 6711 resolve part of the comments

---
 Jenkinsfile                                   |  60 ++++---
 README.md                                     |   1 +
 pom.xml                                       | 154 +-----------------
 src/main/helm/templates/deployment.yaml       |  25 +--
 ...ransfer_operator_user_read_write_role.yaml |  40 -----
 ...operator_user_read_write_role_binding.yaml |  12 ++
 .../helm/templates/rbacs/service_account.yaml |  24 +--
 src/main/helm/values.yaml                     |  26 ---
 ... ElsterTransferOperatorConfiguration.java} |   2 +-
 .../elstertransfer/user/Constants.java        |  16 ++
 ...gCloudElsterTransferConfigMapUserList.java |  10 +-
 .../OzgCloudElsterTransferUserReconciler.java |  31 ++--
 ...gCloudElsterTransferUserRemoteService.java |  42 +++--
 .../OzgCloudElsterTransferUserService.java    |  32 ++--
 .../user/UserUpdateControlBuilder.java        |  62 +++++++
 src/test/helm/deployment_env_test.yaml        |  27 +--
 .../helm/deployment_matchlabels_test.yaml     |  35 +---
 .../helm/deployment_metadata_labels_test.yaml |  41 +----
 .../helm/deployment_pull_secret_test.yaml     |  40 ++---
 src/test/helm/deployment_resources_test.yaml  |  27 +--
 src/test/helm/deployment_test.yaml            |  38 +----
 src/test/helm/helm-linter-values.yaml         |   4 -
 ...tor_user_read_write_role_binding_test.yaml |  35 ++++
 ...er_operator_user_read_write_role_test.yaml |  60 +------
 src/test/helm/rbacs/service_account_test.yaml |  24 +--
 ...ElsterTransferOperatorApplicationTest.java |  35 ----
 ...zgCloudElsterTransferConfigMapFactory.java |  15 +-
 ...lsterTransferConfigMapUserListFactory.java |  15 +-
 ...udElsterTransferConfigMapUserListTest.java |  38 +++--
 ...CloudElsterTransferUserReconcilerTest.java |  43 +----
 ...udElsterTransferUserRemoteServiceTest.java |  17 +-
 ...OzgCloudElsterTransferUserServiceTest.java |  18 +-
 ...OzgCloudElsterTransferUserTestFactory.java |   5 +-
 33 files changed, 334 insertions(+), 720 deletions(-)
 create mode 100644 src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding.yaml
 rename src/main/java/de/ozgcloud/operator/{Config.java => ElsterTransferOperatorConfiguration.java} (97%)
 create mode 100644 src/main/java/de/ozgcloud/operator/elstertransfer/user/Constants.java
 create mode 100644 src/main/java/de/ozgcloud/operator/elstertransfer/user/UserUpdateControlBuilder.java
 create mode 100644 src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding_test.yaml
 delete mode 100644 src/test/java/de/ozgcloud/operator/elstertransfer/ElsterTransferOperatorApplicationTest.java

diff --git a/Jenkinsfile b/Jenkinsfile
index 2889a53..0667333 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -81,11 +81,11 @@ pipeline {
                     }
                 }
             }
-           // post {
-             //   always{
-               //     junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true
-             //   }
-           // }
+            post {
+                always{
+                    junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true
+                }
+            }
         }
 
         stage('Deploy to Nexus'){
@@ -192,6 +192,18 @@ pipeline {
             }
         }
     }
+    post {
+        always{
+            junit testResults: '**/target/surefire-reports/*.xml', skipPublishingChecks: true
+        }
+        failure {
+            script {
+                if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'release') {
+                    sendFailureMessage()
+                }
+            }
+        }
+    }
 }
 
 
@@ -214,12 +226,9 @@ String getHelmRepoUrl(){
 }
 
 String generateHelmChartVersion() {
-    def chartVersion = getPomVersion('pom.xml')
-
-    if (isMasterBranch()) {
-        chartVersion += "-${env.GIT_COMMIT.take(7)}"
-    }
-    else if (!isReleaseBranch()) {
+    def chartVersion = "${getPomVersion('pom.xml')}"+"-${env.GIT_COMMIT.take(7)}"
+    
+    if (!isReleaseBranch()) {
         chartVersion += "-${env.BRANCH_NAME}"
     }
 
@@ -326,19 +335,9 @@ String getPomVersion(String pomFile){
 }
 
 String generateImageTag() {
-    def imageTag = "${env.BRANCH_NAME}-${getPomVersion('pom.xml')}"
-
-    if (env.BRANCH_NAME == 'master') {
-        imageTag += "-${env.GIT_COMMIT.take(7)}"
-    }
-
-    return imageTag
+    return "${env.BRANCH_NAME}-${getPomVersion('pom.xml')}"+"-${env.GIT_COMMIT.take(7)}"
 }
 
-String getParentPomVersion(String filePath) {
-    def pom = readMavenPom file: filePath
-    return pom.parent.version
-}
 
 Boolean isReleaseVersion(List versions) {
     return matchRegexVersion(versions, RELEASE_REGEX)
@@ -357,3 +356,20 @@ Boolean matchRegexVersion(List versions, String regex) {
 
     return true
 }
+
+Void sendFailureMessage() {
+    def room = ''
+    def data = """{"msgtype":"m.text", \
+                    "body":"FachstelleServer: Build Failed. Stage: ${FAILED_STAGE} Build-ID: ${env.BUILD_NUMBER} Link: ${BLUE_OCEAN_URL}", \
+                    "format": "org.matrix.custom.html", \
+                    "formatted_body":"FachstelleServer: Build Failed. Stage: ${FAILED_STAGE} Build-ID: <a href='${BLUE_OCEAN_URL}'>${env.BUILD_NUMBER}</a>"}"""
+
+    if (env.BRANCH_NAME == 'master') {
+        room = "!iQPAvQIiRwRpNOszjw:matrix.ozg-sh.de"
+    }
+    else if (env.BRANCH_NAME == 'release') {
+        room = "!oWZpUGTFsxkJIYNfYg:matrix.ozg-sh.de"
+    }
+
+    sh "curl -XPOST -H 'authorization: Bearer ${getElementAccessToken()}' -d '${data}' https://matrix.ozg-sh.de/_matrix/client/v3/rooms/$room/send/m.room.message"
+}
diff --git a/README.md b/README.md
index ce74e20..c487311 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
+# Ozgcloud-Elster-Transfer Operator
 Um die Mandantenfähigkeit des Elster-Transfer Service nutzen zu können, muss für jede Kommune ein Service User im Elster-Transfer angelegt werden.
 Hierfür soll ein neuer Operator für den Elster-Transfer entwickelt werden. Der Operator soll einen neuen Nutzer anlegen und die Logindaten in den Namespace der Kommune ablegen.
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 4b246e0..e3fd9ba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,9 +4,9 @@
 	<modelVersion>4.0.0</modelVersion>
 
 	<parent>
-		<groupId>org.springframework.boot</groupId>
-		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>3.2.6</version>
+		<groupId>de.ozgcloud.common</groupId>
+		<artifactId>ozgcloud-common-parent</artifactId>
+		<version>4.3.2</version>
 		<relativePath/>
 	</parent>
 
@@ -19,32 +19,13 @@
 
 
 	<properties>
-		<spring-boot.version>3.1.8</spring-boot.version>
 		<operator-sdk.version>5.4.1</operator-sdk.version>
-
-		<!-- tools -->
-		<commons-beanutils.version>1.9.4</commons-beanutils.version>
-		<lombok.version>1.18.28</lombok.version>
-		<mapstruct.version>1.5.5.Final</mapstruct.version>
-		<reflections.version>0.10.2</reflections.version>
-		<validation-api.version>2.0.1.Final</validation-api.version>
-		<lorem.version>2.2</lorem.version>
-		<elster-transfer.version>elster-transfer-24.04-rest-api-docs.yaml</elster-transfer.version>
-
-		<!-- test -->
-		<junit-jupiter.version>5.10.1</junit-jupiter.version>
-		<kubernetes-server-mock.version>6.9.2</kubernetes-server-mock.version>
-		<io.javaoperatorsdk.version>0.9.5</io.javaoperatorsdk.version>
-
-		<!-- plugin -->
-		<license-maven-plugin.version>4.1</license-maven-plugin.version>
-		<ozgcloud-license.version>1.6.0</ozgcloud-license.version>
-		<spring-boot.build-image.imageName>docker.ozg-sh.de/ozgcloud-elster-transfer-operator:build-latest
-		</spring-boot.build-image.imageName>
-
+		<spring-security-core.version>6.3.3</spring-security-core.version>
+		<spring-boot.build-image.imageName>docker.ozg-sh.de/ozgcloud-elster-transfer-operator:build-latest</spring-boot.build-image.imageName>
 	</properties>
 
 	<dependencies>
+
 		<!-- spring -->
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
@@ -53,31 +34,18 @@
 		<dependency>
 			<groupId>io.javaoperatorsdk</groupId>
 			<artifactId>operator-framework-spring-boot-starter</artifactId>
+			<version>${operator-sdk.version}</version>
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-actuator</artifactId>
 		</dependency>
-		<dependency>
+         <dependency>
 			<groupId>org.springframework.security</groupId>
 			<artifactId>spring-security-core</artifactId>
-			<version>5.7.2</version> <!-- Use the appropriate version for your project -->
+			<version>${spring-security-core.version}</version>
 		</dependency>
-
 		<!-- tools -->
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>commons-beanutils</groupId>
-			<artifactId>commons-beanutils</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>com.thedeanda</groupId>
-			<artifactId>lorem</artifactId>
-		</dependency>
-
 		<dependency>
 			<groupId>org.yaml</groupId>
 			<artifactId>snakeyaml</artifactId>
@@ -95,110 +63,8 @@
 				</exclusion>
 			</exclusions>
 		</dependency>
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-engine</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.junit.jupiter</groupId>
-			<artifactId>junit-jupiter-params</artifactId>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>io.fabric8</groupId>
-			<artifactId>kubernetes-server-mock</artifactId>
-			<scope>test</scope>
-		</dependency>
 	</dependencies>
 
-	<dependencyManagement>
-		<dependencies>
-			<!-- own projects -->
-			<dependency>
-				<groupId>de.ozgcloud.common</groupId>
-				<artifactId>ozgcloud-common-license</artifactId>
-				<version>${ozgcloud-license.version}</version>
-			</dependency>
-
-			<!-- spring -->
-			<dependency>
-				<groupId>org.springframework.boot</groupId>
-				<artifactId>spring-boot-starter</artifactId>
-				<version>${spring-boot.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>io.javaoperatorsdk</groupId>
-				<artifactId>operator-framework-spring-boot-starter</artifactId>
-				<version>${operator-sdk.version}</version>
-			</dependency>
-
-			<!-- tools -->
-			<dependency>
-				<groupId>org.projectlombok</groupId>
-				<artifactId>lombok</artifactId>
-				<version>${lombok.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.mapstruct</groupId>
-				<artifactId>mapstruct</artifactId>
-				<version>${mapstruct.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.reflections</groupId>
-				<artifactId>reflections</artifactId>
-				<version>${reflections.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>commons-beanutils</groupId>
-				<artifactId>commons-beanutils</artifactId>
-				<version>${commons-beanutils.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>com.thedeanda</groupId>
-				<artifactId>lorem</artifactId>
-				<version>${lorem.version}</version>
-			</dependency>
-
-			<!-- javax -->
-			<dependency>
-				<groupId>javax.validation</groupId>
-				<artifactId>validation-api</artifactId>
-				<version>${validation-api.version}</version>
-			</dependency>
-
-			<!-- test -->
-			<dependency>
-				<groupId>org.junit.jupiter</groupId>
-				<artifactId>junit-jupiter-engine</artifactId>
-				<version>${junit-jupiter.version}</version>
-				<scope>test</scope>
-			</dependency>
-			<dependency>
-				<groupId>org.junit.jupiter</groupId>
-				<artifactId>junit-jupiter-params</artifactId>
-				<version>${junit-jupiter.version}</version>
-				<scope>test</scope>
-			</dependency>
-			<dependency>
-				<groupId>io.fabric8</groupId>
-				<artifactId>kubernetes-server-mock</artifactId>
-				<version>${kubernetes-server-mock.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>io.javaoperatorsdk</groupId>
-				<artifactId>jenvtest-fabric8-client-support</artifactId>
-				<version>${io.javaoperatorsdk.version}</version>
-				<scope>test</scope>
-			</dependency>
-			<dependency>
-				<groupId>io.javaoperatorsdk</groupId>
-				<artifactId>jenvtest</artifactId>
-				<version>${io.javaoperatorsdk.version}</version>
-				<scope>test</scope>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
 
 	<build>
 		<pluginManagement>
@@ -206,7 +72,6 @@
 				<plugin>
 					<groupId>com.mycila</groupId>
 					<artifactId>license-maven-plugin</artifactId>
-					<version>${license-maven-plugin.version}</version>
 					<configuration>
 						<mapping>
 							<ts>SLASHSTAR_STYLE</ts>
@@ -227,7 +92,6 @@
 						<dependency>
 							<groupId>de.ozgcloud.common</groupId>
 							<artifactId>ozgcloud-common-license</artifactId>
-							<version>${ozgcloud-license.version}</version>
 						</dependency>
 					</dependencies>
 				</plugin>
diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml
index b4f06b7..e550d45 100644
--- a/src/main/helm/templates/deployment.yaml
+++ b/src/main/helm/templates/deployment.yaml
@@ -1,27 +1,4 @@
 
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
-
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -47,7 +24,7 @@ spec:
       serviceAccountName: ozgcloud-elster-transfer-operator-service-account
       containers:
       - name: ozgcloud-elster-transfer-operator
-        image: "{{ required "image.repo must be set" (.Values.image).repo }}/{{ required "image.name must be set" (.Values.image).name }}:{{ required "image.tag must be set" (.Values.image).tag }}"
+        image: "{{ (.Values.image).repo }}/{{ (.Values.image).name }}:{{ coalesce (.Values.image).tag "latest" }}"
         env:
         {{- with include "app.getCustomList" . }}
 {{ . | indent 8 }}
diff --git a/src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role.yaml b/src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role.yaml
index 753e24b..22f3bf5 100644
--- a/src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role.yaml
+++ b/src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role.yaml
@@ -1,43 +1,3 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
-
-
-
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: ozgcloud-elster-transfer-operator-user-read-write-role-binding
-subjects:
-- kind: ServiceAccount
-  name: ozgcloud-elster-transfer-operator-service-account
-  namespace: {{ include "app.namespace" . }}
-roleRef:
-  kind: ClusterRole
-  name: ozgcloud-elster-transfer-operator-user-read-write-role
-  apiGroup: rbac.authorization.k8s.io
-
----
 
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
diff --git a/src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding.yaml b/src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding.yaml
new file mode 100644
index 0000000..208df7c
--- /dev/null
+++ b/src/main/helm/templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding.yaml
@@ -0,0 +1,12 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+  name: ozgcloud-elster-transfer-operator-user-read-write-role-binding
+subjects:
+- kind: ServiceAccount
+  name: ozgcloud-elster-transfer-operator-service-account
+  namespace: {{ include "app.namespace" . }}
+roleRef:
+  kind: ClusterRole
+  name: ozgcloud-elster-transfer-operator-user-read-write-role
+  apiGroup: rbac.authorization.k8s.io
diff --git a/src/main/helm/templates/rbacs/service_account.yaml b/src/main/helm/templates/rbacs/service_account.yaml
index e4c3b8a..2085b96 100644
--- a/src/main/helm/templates/rbacs/service_account.yaml
+++ b/src/main/helm/templates/rbacs/service_account.yaml
@@ -1,26 +1,4 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 apiVersion: v1
 kind: ServiceAccount
 metadata:
diff --git a/src/main/helm/values.yaml b/src/main/helm/values.yaml
index d71f827..8b13789 100644
--- a/src/main/helm/values.yaml
+++ b/src/main/helm/values.yaml
@@ -1,27 +1 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
-
-image:
-  repo: docker.ozg-sh.de
 
diff --git a/src/main/java/de/ozgcloud/operator/Config.java b/src/main/java/de/ozgcloud/operator/ElsterTransferOperatorConfiguration.java
similarity index 97%
rename from src/main/java/de/ozgcloud/operator/Config.java
rename to src/main/java/de/ozgcloud/operator/ElsterTransferOperatorConfiguration.java
index 4a99874..131e324 100644
--- a/src/main/java/de/ozgcloud/operator/Config.java
+++ b/src/main/java/de/ozgcloud/operator/ElsterTransferOperatorConfiguration.java
@@ -33,7 +33,7 @@ import io.javaoperatorsdk.operator.Operator;
 import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
 
 @Configuration
-public class Config {
+public class ElsterTransferOperatorConfiguration {
 
 	public static final Duration RECONCILER_RETRY_SECONDS = Duration.ofSeconds(20);
 	public static final Duration RECONCILER_RETRY_SECONDS_ON_ERROR = Duration.ofSeconds(60);
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/Constants.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/Constants.java
new file mode 100644
index 0000000..49f4eec
--- /dev/null
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/Constants.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.operator.elstertransfer.user;
+
+public class Constants {
+
+    public static final String CONFIG_MAP_NAME = "etr-user-config";
+    public static final String USERS_KEY = "users.yaml";
+    public static final String ELSTER_TRANSFER_USER_LOGIN_KEY = "login";
+	public static final String ELSTER_TRANSFER_USER_PASSWORD_KEY = "password";
+	// todo
+	public static final String ETR_NAMESPACE = "etr-user-creation";
+	public static final String USER_ROLE = "USER";
+	public static final String ETR_DEPLOYMENT_NAME = "elster-transfer";
+	public static final String MUK_USER_SECRET_NAME = "muk-user-secret";
+
+    
+}
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java
index 4c6b1a3..e6c665c 100644
--- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserList.java
@@ -18,12 +18,8 @@ public class OzgCloudElsterTransferConfigMapUserList {
 	}
 
 	boolean existsUser(String login) {
-		for (Map<String, Object> existingUser : usersList) {
-			if (login.equals(existingUser.get("login"))) {
-				return true;
-			}
-		}
-		return false;
+		return usersList.stream()
+				.anyMatch(existingUser -> login.equals(existingUser.get("login")));
 	}
 
 	void addUserToList(String login, String passwordHash, String role) {
@@ -39,8 +35,6 @@ public class OzgCloudElsterTransferConfigMapUserList {
 		usersList.removeIf(userMap -> userLogin.equals(userMap.get("login")));
 	}
 
-	// TODO Prüfen, ob diese Methode tatsächlich gebraucht wird! Sonst überall mit
-	// der Klasse arbeiten.
 	public List<Map<String, Object>> getUsersList() {
 		return usersList;
 	}
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java
index 404c701..09806f5 100644
--- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconciler.java
@@ -2,7 +2,7 @@ package de.ozgcloud.operator.elstertransfer.user;
 
 import org.springframework.stereotype.Component;
 
-import de.ozgcloud.operator.Config;
+import de.ozgcloud.operator.ElsterTransferOperatorConfiguration;
 import de.ozgcloud.operator.elstertransfer.OzgCloudCustomResourceStatus;
 import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
 import io.javaoperatorsdk.operator.api.reconciler.Context;
@@ -19,7 +19,7 @@ import lombok.extern.log4j.Log4j2;
 @Component
 public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloudElsterTransferUser>, Cleaner<OzgCloudElsterTransferUser> {
 
-	private final OzgCloudElsterTransferUserService elsterTransferUserService;
+	private final OzgCloudElsterTransferUserService service;
 	
 	@Override
 	public UpdateControl<OzgCloudElsterTransferUser> reconcile(OzgCloudElsterTransferUser elsterTransferUser,
@@ -27,33 +27,34 @@ public class OzgCloudElsterTransferUserReconciler implements Reconciler<OzgCloud
 		try {
 			String namespace = elsterTransferUser.getMetadata().getNamespace();
 
-			elsterTransferUserService.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
+			service.updateConfigMapAndRestartDeploymentAndCreateSecret(namespace);
 
-			elsterTransferUser.setStatus(getElsterTransferUserStatus(OzgCloudCustomResourceStatus.OK, "Status: OK"));
-			return UpdateControl.updateStatus(elsterTransferUser);
+			return UserUpdateControlBuilder.fromResource(elsterTransferUser)
+					.withStatus(OzgCloudCustomResourceStatus.OK)
+					.withMessage("Status: OK")
+					.withReschedule(ElsterTransferOperatorConfiguration.RECONCILER_RETRY_SECONDS)
+					.build();
 		} catch (Exception e) {
-			LOG.warn(elsterTransferUser.getMetadata().getName() + " could not reconcile in namespace "
-					+ elsterTransferUser.getMetadata().getNamespace(), e);
-			elsterTransferUser
-					.setStatus(getElsterTransferUserStatus(OzgCloudCustomResourceStatus.ERROR, e.getMessage()));
-			return UpdateControl.updateStatus(elsterTransferUser).rescheduleAfter(Config.RECONCILER_RETRY_SECONDS);
+			LOG.warn("{} could not reconcile in namespace {}: {}.", elsterTransferUser.getMetadata().getName(), elsterTransferUser.getMetadata().getNamespace(), e);
+					return UserUpdateControlBuilder.fromResource(elsterTransferUser)
+					.withStatus(OzgCloudCustomResourceStatus.ERROR)
+					.withMessage(e.getMessage())
+					.withReschedule(ElsterTransferOperatorConfiguration.RECONCILER_RETRY_SECONDS_ON_ERROR)
+					.build();
 		}
 	}
 
-	OzgCloudElsterTransferUserStatus getElsterTransferUserStatus(OzgCloudCustomResourceStatus status, String message) {
-		return OzgCloudElsterTransferUserStatus.builder().status(status).message(message).build();
-	}
 
 	@Override
 	public DeleteControl cleanup(OzgCloudElsterTransferUser user, Context<OzgCloudElsterTransferUser> context) {
 		LOG.info("{} cleanup...", user.getMetadata().getName());
 		String namespace = user.getMetadata().getNamespace();
 		try {
-			elsterTransferUserService.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
+			service.deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
 			return DeleteControl.defaultDelete();
 		} catch (Exception e) {
 			LOG.warn(namespace + " could not delete.", e);
-			return DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR);
+			return DeleteControl.noFinalizerRemoval().rescheduleAfter(ElsterTransferOperatorConfiguration.RECONCILER_RETRY_SECONDS_ON_ERROR);
 		}
 	}
 
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java
index 23a43fa..2f0760d 100644
--- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteService.java
@@ -1,6 +1,7 @@
 package de.ozgcloud.operator.elstertransfer.user;
 
 import java.util.Base64;
+import java.util.Objects;
 
 import org.springframework.stereotype.Component;
 import org.yaml.snakeyaml.Yaml;
@@ -20,17 +21,21 @@ public class OzgCloudElsterTransferUserRemoteService {
 
 	private final KubernetesClient client;
 
+
 	public ConfigMap getConfigMap(String configmapNamespace, String configMapName) {
 		return client.configMaps().inNamespace(configmapNamespace).withName(configMapName).get();
 	}
 
 	public ConfigMap createConfigMap(String configmapNamespace, String configMapName) {
-		ConfigMap configMap = new ConfigMapBuilder()
-				.withNewMetadata()
-				.withName(configMapName)
-				.endMetadata()
-				.build();
-		return client.configMaps().inNamespace(configmapNamespace).resource(configMap).create();
+		return client.configMaps().inNamespace(configmapNamespace).resource(buildConfigMap(configMapName)).create();
+	}
+
+	public ConfigMap buildConfigMap(String configMapName) {
+			return  new ConfigMapBuilder()
+			.withNewMetadata()
+			.withName(configMapName)
+			.endMetadata()
+			.build();
 	}
 
 	public void updateConfigMapData(ConfigMap configMap, String key, String data) {
@@ -39,27 +44,36 @@ public class OzgCloudElsterTransferUserRemoteService {
 	}
 
 	public void restartDeployment(String namespace, String deploymentName) {
-		Resource<Deployment> deploymentResource = client.apps().deployments().inNamespace(namespace).withName(deploymentName);
+		Resource<Deployment> deploymentResource = getDeploymentResource(namespace, deploymentName);
 		Deployment deployment = deploymentResource.get();
-		if (deployment != null) {
-			setRestartFlag(deployment);
+		
+		if (Objects.nonNull(deployment)) {
+			setRestartAt(deployment);
 			deploymentResource.replace(deployment);
 		}
 	}
 
-	void setRestartFlag(Deployment deployment) {
+	public Resource<Deployment> getDeploymentResource(String namespace, String deploymentName) {
+		return  client.apps().deployments().inNamespace(namespace).withName(deploymentName);
+	}
+
+	void setRestartAt(Deployment deployment) {
 		deployment.getSpec().getTemplate().getMetadata().getAnnotations()
 				.put("kubectl.kubernetes.io/restartedAt", String.valueOf(System.currentTimeMillis()));
 	}
 
 	public void createOrUpdateSecret(String namespace, String userPassword, String secretName) {
-		Secret secret = new SecretBuilder()
+		client.secrets().inNamespace(namespace).resource(buildUserSecret(namespace, userPassword, secretName )).createOrReplace();
+	}
+
+	public Secret buildUserSecret(String namespace, String userPassword, String secretName) {
+		return new SecretBuilder()
 				.withNewMetadata()
 				.withName(secretName)
 				.endMetadata()
-				.addToData("login", Base64.getEncoder().encodeToString(namespace.getBytes()))
-				.addToData("password", Base64.getEncoder().encodeToString(userPassword.getBytes()))
+				.addToData(Constants.ELSTER_TRANSFER_USER_LOGIN_KEY, Base64.getEncoder().encodeToString(namespace.getBytes()))
+				.addToData(Constants.ELSTER_TRANSFER_USER_PASSWORD_KEY, Base64.getEncoder().encodeToString(userPassword.getBytes()))
 				.build();
-		client.secrets().inNamespace(namespace).resource(secret).createOrReplace();
 	}
+
 }
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java
index 23c4ea0..8c33ba8 100644
--- a/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserService.java
@@ -10,6 +10,7 @@ import org.springframework.stereotype.Component;
 import org.yaml.snakeyaml.Yaml;
 
 import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.micrometer.common.util.StringUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.log4j.Log4j2;
 
@@ -19,22 +20,15 @@ import lombok.extern.log4j.Log4j2;
 public class OzgCloudElsterTransferUserService {
 
 	private final OzgCloudElsterTransferUserRemoteService remoteService;
-	private static final String USERS_KEY = "users.yaml";
-	// todo
-	private static final String ETR_NAMESPACE = "etr-user-creation";
-	public static final String USER_ROLE = "USER";
-	private static final String CONFIG_MAP_NAME = "etr-user-config";
-	private static final String ETR_DEPLOYMENT_NAME = "elster-transfer";
-	private static final String MUK_USER_SECRET_NAME = "muk-user-secret";
 
 	public void updateConfigMapAndRestartDeploymentAndCreateSecret(String namespace) {
 		LOG.info("Updating/Creating Configmap");
-		String userPassword = generateUsersYamlAndUpdateConfigMap(namespace, ETR_NAMESPACE, CONFIG_MAP_NAME);
-		if (!userPassword.isEmpty()) {
+		String userPassword = generateUsersYamlAndUpdateConfigMap(namespace, Constants.ETR_NAMESPACE, Constants.ELSTER_TRANSFER_USER_LOGIN_KEY);
+		if (StringUtils.isNotEmpty(userPassword)) {
 			LOG.info("Restarting Deployment");
-			restartDeployment(ETR_NAMESPACE, ETR_DEPLOYMENT_NAME);
+			restartDeployment(Constants.ETR_NAMESPACE, Constants.ETR_DEPLOYMENT_NAME);
 			LOG.info("Creating Secret");
-			createOrUpdateSecret(namespace, userPassword, MUK_USER_SECRET_NAME);
+			createOrUpdateSecret(namespace, userPassword, Constants.MUK_USER_SECRET_NAME);
 		}
 	}
 
@@ -44,13 +38,13 @@ public class OzgCloudElsterTransferUserService {
 			LOG.info("keep data");
 			return;
 		}
-		if (!userExists(namespace, ETR_NAMESPACE, CONFIG_MAP_NAME)) {
+		if (!userExists(namespace, Constants.ETR_NAMESPACE, Constants.ELSTER_TRANSFER_USER_LOGIN_KEY)) {
 			LOG.info("User not exists");
 			return;
 		}
 		LOG.info("{} do cleanup...", user.getMetadata());
-		deleteUser(user.getMetadata().getNamespace(), CONFIG_MAP_NAME);
-		restartDeployment(ETR_NAMESPACE, ETR_DEPLOYMENT_NAME);
+		deleteUser(user.getMetadata().getNamespace(), Constants.ELSTER_TRANSFER_USER_LOGIN_KEY);
+		restartDeployment(Constants.ETR_NAMESPACE, Constants.ETR_DEPLOYMENT_NAME);
 	}
 
 	String generateUsersYamlAndUpdateConfigMap(String namespace, String configmapNamespace, String configMapName) {
@@ -91,7 +85,7 @@ public class OzgCloudElsterTransferUserService {
 			LOG.debug("Creating ConfigMap '{}' in namespace '{}'", configMapName, configmapNamespace);
 			configMap = remoteService.createConfigMap(configmapNamespace, configMapName);
 		}
-		remoteService.updateConfigMapData(configMap, USERS_KEY, usersYaml);
+		remoteService.updateConfigMapData(configMap, Constants.USERS_KEY, usersYaml);
 		LOG.debug("ConfigMap updated successfully: {}", configMapName);
 	}
 
@@ -109,13 +103,13 @@ public class OzgCloudElsterTransferUserService {
 	}
 
 	void deleteUser(String userLogin, String configMapName) {
-		ConfigMap configMap = remoteService.getConfigMap(ETR_NAMESPACE, configMapName);
+		ConfigMap configMap = remoteService.getConfigMap(Constants.ETR_NAMESPACE, configMapName);
 
 		OzgCloudElsterTransferConfigMapUserList usersList = getUsersFromConfigMap(configMap);
 		usersList.removeDeleted(userLogin);
 		String updatedUsersYaml = constructYamlEntries(usersList);
 
-		remoteService.updateConfigMapData(configMap, USERS_KEY, updatedUsersYaml);
+		remoteService.updateConfigMapData(configMap, Constants.USERS_KEY, updatedUsersYaml);
 		LOG.info("User with login '{}' removed from configmap successfully", userLogin);
 	}
 
@@ -125,7 +119,7 @@ public class OzgCloudElsterTransferUserService {
 	}
 
 	OzgCloudElsterTransferConfigMapUserList getUsersFromConfigMap(ConfigMap configMap) {
-		String usersYaml = configMap.getData().get(USERS_KEY);
+		String usersYaml = configMap.getData().get(Constants.USERS_KEY);
 		Map<String, Object> load = new Yaml().load(usersYaml);
 		List<Map<String, Object>> usersList = (List<Map<String, Object>>) load.get("users");
 		return new OzgCloudElsterTransferConfigMapUserList(usersList);
@@ -136,7 +130,7 @@ public class OzgCloudElsterTransferUserService {
 	}
 
 	void addNewUserToList(OzgCloudElsterTransferConfigMapUserList usersList, String login, String passwordHash) {
-		usersList.addUserToList(login, passwordHash, USER_ROLE);
+		usersList.addUserToList(login, passwordHash, Constants.USER_ROLE);
 	}
 
 	String constructYamlEntries(OzgCloudElsterTransferConfigMapUserList userList) {
diff --git a/src/main/java/de/ozgcloud/operator/elstertransfer/user/UserUpdateControlBuilder.java b/src/main/java/de/ozgcloud/operator/elstertransfer/user/UserUpdateControlBuilder.java
new file mode 100644
index 0000000..2d585ea
--- /dev/null
+++ b/src/main/java/de/ozgcloud/operator/elstertransfer/user/UserUpdateControlBuilder.java
@@ -0,0 +1,62 @@
+package de.ozgcloud.operator.elstertransfer.user;
+
+import java.time.Duration;
+import java.util.Optional;
+
+import de.ozgcloud.operator.elstertransfer.OzgCloudCustomResourceStatus;
+import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
+
+class UserUpdateControlBuilder {
+
+	private OzgCloudElsterTransferUser resource;
+
+	private OzgCloudCustomResourceStatus status;
+	private Optional<String> message = Optional.empty();
+
+	private boolean reschedule = false;
+	private Duration scheduleDuration;
+
+	public UserUpdateControlBuilder(OzgCloudElsterTransferUser resource) {
+		this.resource = resource;
+	}
+
+	public static UserUpdateControlBuilder fromResource(OzgCloudElsterTransferUser resource) {
+		return new UserUpdateControlBuilder(resource);
+	}
+
+	public UserUpdateControlBuilder withStatus(OzgCloudCustomResourceStatus status) {
+		this.status = status;
+		return this;
+	}
+
+	public UserUpdateControlBuilder withMessage(String message) {
+		this.message = Optional.ofNullable(message);
+		return this;
+	}
+
+	public UserUpdateControlBuilder withReschedule(Duration duration) {
+		this.reschedule = true;
+		this.scheduleDuration = duration;
+		return this;
+	}
+
+	public UpdateControl<OzgCloudElsterTransferUser> build() {
+		resource.setStatus(buildOzgCloudElsterTransferUserStatus());
+
+		return buildUpdateControl();
+	}
+
+	private OzgCloudElsterTransferUserStatus buildOzgCloudElsterTransferUserStatus() {
+		var userStatus = OzgCloudElsterTransferUserStatus.builder().status(status);
+		message.ifPresent(userStatus::message);
+
+		return userStatus.build();
+	}
+
+	private UpdateControl<OzgCloudElsterTransferUser> buildUpdateControl() {
+		if (reschedule) {
+			return UpdateControl.updateStatus(resource).rescheduleAfter(scheduleDuration);
+		}
+		return UpdateControl.updateStatus(resource);
+	}
+}
diff --git a/src/test/helm/deployment_env_test.yaml b/src/test/helm/deployment_env_test.yaml
index 1e21ede..ebce42e 100644
--- a/src/test/helm/deployment_env_test.yaml
+++ b/src/test/helm/deployment_env_test.yaml
@@ -1,35 +1,10 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 
 suite: test environments
 templates:
   - templates/deployment.yaml
 set:
   imagePullSecret: "docker-secret"
-  image:
-    name: hase
-    tag: latest
 tests:
   - it: check customList as list
     set:
diff --git a/src/test/helm/deployment_matchlabels_test.yaml b/src/test/helm/deployment_matchlabels_test.yaml
index 00d21b3..3cc8ad2 100644
--- a/src/test/helm/deployment_matchlabels_test.yaml
+++ b/src/test/helm/deployment_matchlabels_test.yaml
@@ -1,44 +1,21 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 
 suite: deployment matchlabels
 release:
   name: ozgcloud-elstertransfer-operator
-  namespace: sh-helm-test
+  namespace: by-helm-test
 templates:
   - templates/deployment.yaml
 set:
   imagePullSecret: "docker-secret"
-  image:
-    name: hase
-    tag: latest
 tests:
-  - it: check matchlabels
+  - it: should have set kubernetes name
     asserts:
       - equal:
           path: spec.selector.matchLabels["app.kubernetes.io/name"]
           value: ozgcloud-elstertransfer-operator
+  - it: should have set kubernetes namespace
+    asserts:
       - equal:
           path: spec.selector.matchLabels["app.kubernetes.io/namespace"]
-          value: sh-helm-test
\ No newline at end of file
+          value: by-helm-test
\ No newline at end of file
diff --git a/src/test/helm/deployment_metadata_labels_test.yaml b/src/test/helm/deployment_metadata_labels_test.yaml
index 1c01f24..0821ece 100644
--- a/src/test/helm/deployment_metadata_labels_test.yaml
+++ b/src/test/helm/deployment_metadata_labels_test.yaml
@@ -1,44 +1,21 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 
 suite: deployment test metadata labels
 release:
   name: ozgcloud-elstertransfer-operator
-  namespace: sh-helm-test
+  namespace: by-helm-test
 templates:
   - templates/deployment.yaml
 set:
   imagePullSecret: "docker-secret"
-  image:
-    name: hase
-    tag: latest
 tests:
-  - it: check default labels
+  - it: check default labels namespace
     asserts:
-      - equal:
-          path: metadata.labels["app.kubernetes.io/name"]
-          value: ozgcloud-elstertransfer-operator
       - equal:
           path: metadata.labels["app.kubernetes.io/namespace"]
-          value: sh-helm-test
\ No newline at end of file
+          value: by-helm-test
+  - it: check default labels name
+    asserts:
+      - equal:
+          path: metadata.labels["app.kubernetes.io/name"]
+          value: ozgcloud-elstertransfer-operator
\ No newline at end of file
diff --git a/src/test/helm/deployment_pull_secret_test.yaml b/src/test/helm/deployment_pull_secret_test.yaml
index fb3d44e..b66ec8b 100644
--- a/src/test/helm/deployment_pull_secret_test.yaml
+++ b/src/test/helm/deployment_pull_secret_test.yaml
@@ -1,41 +1,21 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 
 suite: deployment pull secret
 release:
   name: ozgcloud-elstertransfer-operator
-  namespace: sh-helm-test
+  namespace: by-helm-test
 templates:
   - deployment.yaml
-set:
-  image:
-    name: hase
-    tag: latest
-  imagePullSecret: imagePullSecret
+
 tests:
-  - it: validate image pull secret resource name
+  - it: should set imagePullSecret
+    set:
+      imagePullSecret: imagePullSecret
     asserts:
       - equal:
           path: spec.template.spec.imagePullSecrets[0].name
           value: imagePullSecret
+  - it: should fail tempalte with error message when not set
+    asserts:
+      - failedTemplate:
+          errorMessage: imagePullSecret must be set
\ No newline at end of file
diff --git a/src/test/helm/deployment_resources_test.yaml b/src/test/helm/deployment_resources_test.yaml
index 8902036..c3957f4 100644
--- a/src/test/helm/deployment_resources_test.yaml
+++ b/src/test/helm/deployment_resources_test.yaml
@@ -1,26 +1,4 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 
 suite: deployment resources test
 release:
@@ -29,9 +7,6 @@ templates:
   - templates/deployment.yaml
 set:
   imagePullSecret: "docker-secret"
-  image:
-    name: hase
-    tag: latest
 tests:
   - it: test resources
     set:
diff --git a/src/test/helm/deployment_test.yaml b/src/test/helm/deployment_test.yaml
index 03891b4..99949ff 100644
--- a/src/test/helm/deployment_test.yaml
+++ b/src/test/helm/deployment_test.yaml
@@ -1,40 +1,20 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 
 suite: deployment test
 release:
   name: intelliform-adapter
-  namespace: sh-helm-test
+  namespace: by-helm-test
 templates:
   - deployment.yaml
-set:
-  imagePullSecret: "docker-secret"
-  image:
-    name: hase
-    tag: latest
+
 tests:
   - it: validate image type and container image
+    set:
+      imagePullSecret: "docker-secret"
+      image:
+        name: hase
+        tag: latest
+        repo: docker.ozg-sh.de
     asserts:
       - isKind:
           of: Deployment
diff --git a/src/test/helm/helm-linter-values.yaml b/src/test/helm/helm-linter-values.yaml
index c63c797..db1bb62 100644
--- a/src/test/helm/helm-linter-values.yaml
+++ b/src/test/helm/helm-linter-values.yaml
@@ -1,8 +1,4 @@
 elstertransfer:
   namespace: elster-transfer
 
-image:
-  name: image
-  tag: tag
-
 imagePullSecret: image-pull-secret
\ No newline at end of file
diff --git a/src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding_test.yaml b/src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding_test.yaml
new file mode 100644
index 0000000..205ade6
--- /dev/null
+++ b/src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding_test.yaml
@@ -0,0 +1,35 @@
+
+suite: ElsterTransfer user rbac test
+release:
+  name: ozgcloud-elstertransfer-operator
+  namespace: test-namespace
+templates:
+  - templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_binding.yaml
+tests:
+  - it: test ClusterRoleBinding metadata
+    asserts:
+      - isKind:
+          of: ClusterRoleBinding
+      - isAPIVersion:
+          of: rbac.authorization.k8s.io/v1
+      - equal:
+          path: metadata.name
+          value: ozgcloud-elster-transfer-operator-user-read-write-role-binding
+ 
+  - it: test ClusterRoleBinding subject
+    asserts:
+      - contains:
+          path: subjects
+          content:
+            kind: ServiceAccount
+            name: ozgcloud-elster-transfer-operator-service-account
+            namespace: test-namespace
+  - it: test ClusterRoleBinding roleRef
+    asserts:
+      - equal:
+          path: roleRef
+          value:
+            kind: ClusterRole
+            name: ozgcloud-elster-transfer-operator-user-read-write-role
+            apiGroup: rbac.authorization.k8s.io
+
diff --git a/src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_test.yaml b/src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_test.yaml
index 4ab755d..e3faded 100644
--- a/src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_test.yaml
+++ b/src/test/helm/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role_test.yaml
@@ -1,26 +1,3 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
 
 suite: ElsterTransfer user rbac test
 release:
@@ -29,48 +6,16 @@ release:
 templates:
   - templates/rbacs/ozgcloud_elstertransfer_operator_user_read_write_role.yaml
 tests:
-  - it: test ClusterRoleBinding metadata
-    asserts:
-      - isKind:
-          of: ClusterRoleBinding
-        documentIndex: 0
-      - isAPIVersion:
-          of: rbac.authorization.k8s.io/v1
-      - equal:
-          path: metadata.name
-          value: ozgcloud-elster-transfer-operator-user-read-write-role-binding
-        documentIndex: 0
- 
-  - it: test ClusterRoleBinding subject
-    asserts:
-      - contains:
-          path: subjects
-          content:
-            kind: ServiceAccount
-            name: ozgcloud-elster-transfer-operator-service-account
-            namespace: test-namespace
-        documentIndex: 0
-  - it: test ClusterRoleBinding roleRef
-    asserts:
-      - equal:
-          path: roleRef
-          value:
-            kind: ClusterRole
-            name: ozgcloud-elster-transfer-operator-user-read-write-role
-            apiGroup: rbac.authorization.k8s.io
-        documentIndex: 0
 
   - it: test ClusterRole metadata
     asserts:
       - isKind:
           of: ClusterRole
-        documentIndex: 1
       - isAPIVersion:
           of: rbac.authorization.k8s.io/v1
       - equal:
           path: metadata.name
           value: ozgcloud-elster-transfer-operator-user-read-write-role
-        documentIndex: 1
     
   - it: test ClusterRoleBinding rules
     asserts:
@@ -90,7 +35,4 @@ tests:
                 - create
                 - update
                 - patch
-                - delete
-            
-
-        documentIndex: 1
\ No newline at end of file
+                - delete
\ No newline at end of file
diff --git a/src/test/helm/rbacs/service_account_test.yaml b/src/test/helm/rbacs/service_account_test.yaml
index ee4fc36..799580d 100644
--- a/src/test/helm/rbacs/service_account_test.yaml
+++ b/src/test/helm/rbacs/service_account_test.yaml
@@ -1,26 +1,4 @@
-#
-# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
-# Ministerpräsidenten des Landes Schleswig-Holstein
-# Staatskanzlei
-# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
-#
-# Lizenziert unter der EUPL, Version 1.2 oder - sobald
-# diese von der Europäischen Kommission genehmigt wurden -
-# Folgeversionen der EUPL ("Lizenz");
-# Sie dürfen dieses Werk ausschließlich gemäß
-# dieser Lizenz nutzen.
-# Eine Kopie der Lizenz finden Sie hier:
-#
-# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
-#
-# Sofern nicht durch anwendbare Rechtsvorschriften
-# gefordert oder in schriftlicher Form vereinbart, wird
-# die unter der Lizenz verbreitete Software "so wie sie
-# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
-# ausdrücklich oder stillschweigend - verbreitet.
-# Die sprachspezifischen Genehmigungen und Beschränkungen
-# unter der Lizenz sind dem Lizenztext zu entnehmen.
-#
+
 
 suite: ServiceAccount test
 release:
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/ElsterTransferOperatorApplicationTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/ElsterTransferOperatorApplicationTest.java
deleted file mode 100644
index df437f6..0000000
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/ElsterTransferOperatorApplicationTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
- * Ministerpräsidenten des Landes Schleswig-Holstein
- * Staatskanzlei
- * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
- *
- * Lizenziert unter der EUPL, Version 1.2 oder - sobald
- * diese von der Europäischen Kommission genehmigt wurden -
- * Folgeversionen der EUPL ("Lizenz");
- * Sie dürfen dieses Werk ausschließlich gemäß
- * dieser Lizenz nutzen.
- * Eine Kopie der Lizenz finden Sie hier:
- *
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
- *
- * Sofern nicht durch anwendbare Rechtsvorschriften
- * gefordert oder in schriftlicher Form vereinbart, wird
- * die unter der Lizenz verbreitete Software "so wie sie
- * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
- * ausdrücklich oder stillschweigend - verbreitet.
- * Die sprachspezifischen Genehmigungen und Beschränkungen
- * unter der Lizenz sind dem Lizenztext zu entnehmen.
- */
-package de.ozgcloud.operator.elstertransfer;
-
-import org.junit.jupiter.api.Test;
-
-//@SpringBootTest
-//@EnableMockOperator
-class ElsterTransferOperatorApplicationTest {
-
-	@Test
-	void contextLoads() {
-	}
-}
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapFactory.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapFactory.java
index 5b643cb..1a5d638 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapFactory.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapFactory.java
@@ -7,8 +7,6 @@ import io.fabric8.kubernetes.api.model.ConfigMap;
 import io.fabric8.kubernetes.api.model.ConfigMapBuilder;
 
 public class OzgCloudElsterTransferConfigMapFactory {
-	private static final String CONFIG_MAP_NAME = "etr-user-config";
-	private static final String USERS_KEY = "users.yaml";
 
 	public static ConfigMap create() {
 		String usersYaml = "fileFormat: 1\n" +
@@ -18,16 +16,21 @@ public class OzgCloudElsterTransferConfigMapFactory {
 				"    credentials:\n" +
 				"      passwortHash: \"$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a\"\n" +
 				"    gruppe: \"Administratoren\"\n";
+		
 
 		Map<String, String> data = new HashMap<>();
-		data.put(USERS_KEY, usersYaml);
-		ConfigMap configMap = new ConfigMapBuilder()
+		data.put(Constants.USERS_KEY, usersYaml);
+		return createConfigMap(data);
+		
+	}
+
+	static ConfigMap createConfigMap(Map<String, String> data) {
+		return new ConfigMapBuilder()
 				.withNewMetadata()
-				.withName(CONFIG_MAP_NAME)
+				.withName(Constants.CONFIG_MAP_NAME)
 				.endMetadata()
 				.withData(data)
 				.build();
-		return configMap;
 	}
 
 }
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java
index 42b6a4d..bb2ec02 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListFactory.java
@@ -8,13 +8,14 @@ import java.util.Map;
 public class OzgCloudElsterTransferConfigMapUserListFactory {
 
 	public static List<Map<String, Object>> create() {
-		Map<String, Object> user1 = new HashMap<>();
-		user1.put("login", "user1");
-		user1.put("rolle", "USER");
-		user1.put("gruppe", "user1");
-		Map<String, String> credentials = new HashMap<>();
-		credentials.put("passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a");
-		user1.put("credentials", credentials);
+		Map<String, Object> user1 = Map.of(
+			"login", "user1",
+			"rolle", "USER",
+			"gruppe", "user1",
+			"credentials", Map.of(
+				"passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a"
+			)
+		);
 		List<Map<String, Object>> usersList = Arrays.asList(user1);
 		return usersList;
 	}
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListTest.java
index 5ca2987..ff7413b 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListTest.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferConfigMapUserListTest.java
@@ -1,6 +1,7 @@
 package de.ozgcloud.operator.elstertransfer.user;
 
-import static org.junit.jupiter.api.Assertions.*;
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -20,25 +21,25 @@ class OzgCloudElsterTransferConfigMapUserListTest {
 	}
 
 	@Nested
-	class ExistsUserTests {
+	class TestExistsUser {
 		@Test
 		void shouldReturnTrueWhenUserExists() {
-			assertTrue(configMapUserList.existsUser("user1"));
+			assertThat(configMapUserList.existsUser("user1")).isTrue();
 		}
 
 		@Test
 		void shouldReturnFalseWhenUserDoesNotExist() {
-			assertFalse(configMapUserList.existsUser("nonExistentUser"));
+			assertThat(configMapUserList.existsUser("nonExistentUser")).isFalse();
 		}
 	}
 
 	@Nested
-	class AddUserTests {
+	class TestAddUser {
 		@Test
 		void shouldAddUser() {
 			configMapUserList.addUserToList("newUser", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a", "USER");
 
-			assertTrue(configMapUserList.existsUser("newUser"));
+			assertThat(configMapUserList.existsUser("newUser")).isTrue();
 		}
 
 		@Test
@@ -50,42 +51,43 @@ class OzgCloudElsterTransferConfigMapUserListTest {
 					.findFirst()
 					.orElseThrow();
 
-			assertEquals("USER", addedUser.get("rolle"));
-			assertEquals(Map.of("passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a"), addedUser.get("credentials"));
-			assertEquals("newUser", addedUser.get("gruppe"));
+			assertThat(addedUser.get("rolle")).isEqualTo("USER");
+			assertThat(Map.of("passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a")).isEqualTo(addedUser.get("credentials"));
+			assertThat("newUser").isEqualTo(addedUser.get("gruppe"));
 		}
 	}
 
 	@Nested
-	class RemoveUserTests {
+	class TestRemoveUser {
 		@Test
 		void shouldRemoveUserCorrectly() {
 			configMapUserList.removeDeleted("user1");
 
-			assertFalse(configMapUserList.existsUser("user1"));
+			assertThat(configMapUserList.existsUser("user1")).isFalse();
 		}
 	}
 
 	@Nested
-	class GetUsersListTests {
+	class TestGetUsersList {
 
 		@Test
 		void shouldReturnCurrentUsersList() {
 			List<Map<String, Object>> userList = configMapUserList.getUsersList();
 			Map<String, Object> user = userList.get(0);
 
-			assertEquals(1, userList.size());
-			assertEquals("user1", user.get("login"));
-			assertEquals("USER", user.get("rolle"));
-			assertEquals(Map.of("passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a"), user.get("credentials"));
-			assertEquals("user1", user.get("gruppe"));
+			assertThat(userList).hasSize(1);
+			assertThat(user.get("gruppe")).isEqualTo("user1");
+			assertThat(user.get("login")).isEqualTo("user1");
+			assertThat(user.get("rolle")).isEqualTo("USER");
+			assertThat(user.get("credentials")).isEqualTo(Map.of("passwortHash", "$2a$12$cqKZMcwTUe/tju7PIFGhperWdV2Xa9o4fVw5eClbzatRhvxZphE1a"));
+			assertThat(user.get("gruppe")).isEqualTo("user1");
 		}
 
 		@Test
 		void shouldReturnEmptyListIfNoUsers() {
 			OzgCloudElsterTransferConfigMapUserList emptyConfigMapUserList = new OzgCloudElsterTransferConfigMapUserList(new ArrayList<>());
 
-			assertTrue(emptyConfigMapUserList.getUsersList().isEmpty());
+			assertThat(emptyConfigMapUserList.getUsersList().isEmpty()).isTrue();
 		}
 	}
 }
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconcilerTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconcilerTest.java
index cbe37ab..f369911 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconcilerTest.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserReconcilerTest.java
@@ -1,7 +1,6 @@
 package de.ozgcloud.operator.elstertransfer.user;
 
 import static org.assertj.core.api.Assertions.*;
-import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
@@ -12,7 +11,7 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
-import de.ozgcloud.operator.Config;
+import de.ozgcloud.operator.ElsterTransferOperatorConfiguration;
 import de.ozgcloud.operator.elstertransfer.OzgCloudCustomResourceStatus;
 import io.fabric8.kubernetes.client.KubernetesClient;
 import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
@@ -26,36 +25,25 @@ class OzgCloudElsterTransferUserReconcilerTest {
 	@Mock
 	private OzgCloudElsterTransferUserService service;
 
-	@Mock
-	private KubernetesClient client;
-
 	@DisplayName("Reconcile")
 	@Nested
 	class TestReconcile {
-		OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
+		private final OzgCloudElsterTransferUser user = OzgCloudElsterTransferUserTestFactory.create();
 
 		@Test
 		void shouldCallUpdateConfigMap() {
-
 			reconciler.reconcile(user, null);
 
 			verify(service).updateConfigMapAndRestartDeploymentAndCreateSecret(OzgCloudElsterTransferUserTestFactory.METADATA_NAMESPACE);
 		}
 
 		@Test
-		void shouldReturnUpdateStatus() {
+		void shouldReturnUpdateControl() {
 			var response = reconciler.reconcile(OzgCloudElsterTransferUserTestFactory.create(), null);
 
 			assertThat(response.getResource()).isNotNull();
 		}
 
-		@Test
-		void shouldCallGetElsterTransferUserStatus() {
-
-			reconciler.reconcile(user, null);
-
-			verify(reconciler).getElsterTransferUserStatus(any(), any());
-		}
 
 		@Test
 		void shouldSetStatusOk() {
@@ -64,27 +52,7 @@ class OzgCloudElsterTransferUserReconcilerTest {
 			assertThat(response.getResource().getStatus().getStatus()).isEqualTo(OzgCloudCustomResourceStatus.OK);
 		}
 
-		@DisplayName("test getElsterTransferUserStatus")
-		@Nested
-		class TestGetElsterTransferUserStatus {
-
-			void shouldRetrunOzgCloudElsterTransferUserStatus() {
-
-				OzgCloudElsterTransferUserStatus result = reconciler.getElsterTransferUserStatus(OzgCloudCustomResourceStatus.OK, "Status: OK");
-
-				assertEquals(OzgCloudCustomResourceStatus.OK, result.getStatus());
-				assertEquals("Status: OK", result.getMessage());
-			}
-		}
-
-		@Test
-		void shouldReturnErrorStatus() {
-
-			OzgCloudElsterTransferUserStatus result = reconciler.getElsterTransferUserStatus(OzgCloudCustomResourceStatus.ERROR, "An error occurred");
-
-			assertEquals(OzgCloudCustomResourceStatus.ERROR, result.getStatus());
-			assertEquals("An error occurred", result.getMessage());
-		}
+		
 
 	}
 
@@ -96,7 +64,6 @@ class OzgCloudElsterTransferUserReconcilerTest {
 
 		@Test
 		void shouldCallServiceDelete() {
-
 			reconciler.cleanup(user, null);
 
 			verify(service).deleteUserAndRestartDeploymentIfNotKeepUserAndUserExists(user);
@@ -117,7 +84,7 @@ class OzgCloudElsterTransferUserReconcilerTest {
 			var control = reconciler.cleanup(user, null);
 
 			assertThat(control).usingRecursiveComparison()
-					.isEqualTo(DeleteControl.noFinalizerRemoval().rescheduleAfter(Config.RECONCILER_RETRY_SECONDS_ON_ERROR));
+					.isEqualTo(DeleteControl.noFinalizerRemoval().rescheduleAfter(ElsterTransferOperatorConfiguration.RECONCILER_RETRY_SECONDS_ON_ERROR));
 		}
 
 	}
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java
index 82051a2..79c93e1 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserRemoteServiceTest.java
@@ -68,11 +68,10 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
 	private Resource<Secret> secretResource;
 
 	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;
-	// todo
-	private static final String configmapNamespace = "etr-user-creation";
+	private static final String configMapName = Constants.CONFIG_MAP_NAME;
+	private static final String deploymentName = Constants.ETR_DEPLOYMENT_NAME;
+	private static final String secretName = Constants.MUK_USER_SECRET_NAME;
+	private static final String configmapNamespace = Constants.ETR_NAMESPACE;
 
 	@DisplayName("test ConfigMap")
 	@Nested
@@ -221,13 +220,13 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
 			}
 
 			@Test
-			void shouldCallSetRestartFlag() {
+			void shouldCallsetRestartAt() {
 
 				when(deploymentResource.get()).thenReturn(deployment);
 
 				remoteService.restartDeployment(namespace, deploymentName);
 
-				verify(remoteService).setRestartFlag(deployment);
+				verify(remoteService).setRestartAt(deployment);
 			}
 
 			@Test
@@ -241,13 +240,13 @@ class OzgCloudElsterTransferUserRemoteServiceTest {
 
 		@DisplayName("set restart flag")
 		@Nested
-		class TestSetRestartFlag {
+		class TestsetRestartAt {
 			@Test
 			void shouldSetRestartedAtAnnotation() {
 				Map<String, String> annotations = new HashMap<>();
 				deployment.getSpec().getTemplate().getMetadata().setAnnotations(annotations);
 
-				remoteService.setRestartFlag(deployment);
+				remoteService.setRestartAt(deployment);
 
 				assert annotations.containsKey("kubectl.kubernetes.io/restartedAt");
 				assert annotations.get("kubectl.kubernetes.io/restartedAt") != null;
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
index 2fa1291..dc556c1 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserServiceTest.java
@@ -1,5 +1,6 @@
 package de.ozgcloud.operator.elstertransfer.user;
 
+import static org.assertj.core.api.Assertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
@@ -17,6 +18,7 @@ import org.mockito.Mock;
 import org.mockito.Spy;
 
 import io.fabric8.kubernetes.api.model.ConfigMap;
+import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
 
 class OzgCloudElsterTransferUserServiceTest {
 
@@ -34,11 +36,11 @@ class OzgCloudElsterTransferUserServiceTest {
 	private OzgCloudElsterTransferConfigMapUserList users;
 
 	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";
-	private static final String usersKey = "users.yaml";
+	private static final String configMapName = Constants.CONFIG_MAP_NAME;
+	private static final String deploymentName = Constants.ETR_DEPLOYMENT_NAME;
+	private static final String secretName = Constants.MUK_USER_SECRET_NAME;
+	private static final String configMapNamespace = Constants.ETR_NAMESPACE;
+	private static final String usersKey = Constants.USERS_KEY;
 
 	@Nested
 	class TestUpdateConfigMapAndRestartDeploymentAndCreateSecret {
@@ -509,7 +511,7 @@ class OzgCloudElsterTransferUserServiceTest {
 
 			List<Map<String, Object>> usersList = result.getUsersList();
 
-			assertEquals(1, usersList.size());
+			assertThat(usersList).hasSize(1);
 		}
 
 	}
@@ -554,7 +556,7 @@ class OzgCloudElsterTransferUserServiceTest {
 
 			String result = service.constructYamlEntries(users);
 
-			assertEquals(expectedYaml, result);
+			assertThat(expectedYaml).isEqualTo(result);
 		}
 	}
 
@@ -573,7 +575,7 @@ class OzgCloudElsterTransferUserServiceTest {
 
 			String result = service.getYamlForUser(userEntry);
 
-			assertEquals(expectedYaml, result);
+			assertThat(expectedYaml).isEqualTo(result);
 		}
 
 	}
diff --git a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserTestFactory.java b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserTestFactory.java
index da99540..9b2bbc0 100644
--- a/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserTestFactory.java
+++ b/src/test/java/de/ozgcloud/operator/elstertransfer/user/OzgCloudElsterTransferUserTestFactory.java
@@ -26,10 +26,7 @@ package de.ozgcloud.operator.elstertransfer.user;
 public class OzgCloudElsterTransferUserTestFactory {
 
 	public static final String METADATA_NAMESPACE = "TestNamespace";
-	public static final String ETR_NAMESPACE = "etr-user-creation";
-	public static final String CONFIG_MAP_NAME = "etr-user-config";
-	public static final String ETR_DEPLOYMENT_NAME = "elster-transfer";
-	public static final String MUK_USER_SECRET_NAME = "muk-user-secret";
+
 
 	public static OzgCloudElsterTransferUser create() {
 		return createWithSpec(OzgCloudElsterTransferUserSpecTestFactory.create());
-- 
GitLab