From 03c70e301c2a128109db9fb4a6ffd32a7ac843de Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 6 Feb 2023 09:25:23 +0100
Subject: [PATCH] OZG-2220 refactoring after code review, move method

Sub-task: OZG-3411
---
 .../de/itvsh/kop/user/UserRepository.java     |  8 ----
 .../java/de/itvsh/kop/user/UserService.java   |  5 --
 .../OrganisationsEinheitGrpcService.java      |  5 +-
 .../OrganisationsEinheitRepository.java       | 48 +++++++++++++++++++
 .../OrganisationsEinheitService.java          | 15 ++++++
 .../itvsh/kop/user/UserRepositoryITCase.java  | 19 --------
 .../de/itvsh/kop/user/UserRepositoryTest.java | 27 -----------
 .../de/itvsh/kop/user/UserServiceTest.java    | 12 -----
 .../OrganisationsEinheitRepositoryITCase.java | 44 +++++++++++++++++
 .../OrganisationsEinheitRepositoryTest.java   | 45 +++++++++++++++++
 .../OrganisationsEinheitServiceTest.java      | 31 ++++++++++++
 .../OrganisationseinheitGrpcServiceTest.java  |  5 +-
 12 files changed, 187 insertions(+), 77 deletions(-)
 create mode 100644 user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepository.java
 create mode 100644 user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitService.java
 create mode 100644 user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryITCase.java
 create mode 100644 user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryTest.java
 create mode 100644 user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitServiceTest.java

diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java b/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java
index bb34c979..4db774a6 100644
--- a/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java
+++ b/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java
@@ -25,7 +25,6 @@ package de.itvsh.kop.user;
 
 import static de.itvsh.kop.user.User.*;
 
-import java.util.Collection;
 import java.util.Optional;
 import java.util.stream.Stream;
 
@@ -33,9 +32,6 @@ import javax.enterprise.context.ApplicationScoped;
 
 import org.bson.types.ObjectId;
 
-import com.google.common.collect.Lists;
-import com.mongodb.client.model.Filters;
-
 import de.itvsh.kop.common.logging.KopLogging;
 import de.itvsh.kop.user.common.errorhandling.ResourceNotFoundException;
 import io.quarkus.mongodb.panache.PanacheMongoRepository;
@@ -89,8 +85,4 @@ class UserRepository implements PanacheMongoRepository<User> {
 		return findByIdOptional(user.getId())
 				.orElse(findByExternalId(user.getExternalId()).orElseThrow(() -> new ResourceNotFoundException(User.class, user.getExternalId())));
 	}
-
-	public Collection<String> findAllOrganisationsEinheitIds() {
-		return Lists.newArrayList(mongoCollection().distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(DELETED_FIELD, false), String.class));
-	}
 }
\ No newline at end of file
diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java
index 1f5b158c..29faba06 100644
--- a/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java
+++ b/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java
@@ -23,7 +23,6 @@
  */
 package de.itvsh.kop.user;
 
-import java.util.Collection;
 import java.util.Optional;
 import java.util.stream.Stream;
 
@@ -93,8 +92,4 @@ public class UserService {
 	public User findByExternalId(String id) {
 		return repository.findByExternalId(id).orElseThrow(() -> new ResourceNotFoundException(User.class, id));
 	}
-
-	public Collection<String> findAllOrganisationsEinheitIds() {
-		return repository.findAllOrganisationsEinheitIds();
-	}
 }
\ No newline at end of file
diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java
index 0e7e0ee2..a82c606a 100644
--- a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java
+++ b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java
@@ -6,7 +6,6 @@ import javax.inject.Inject;
 
 import com.google.protobuf.Empty;
 
-import de.itvsh.kop.user.UserService;
 import de.itvsh.kop.user.grpc.organisationseinheit.GrpcGetSupportedOrganisationsEinheitenResponse;
 import de.itvsh.kop.user.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc;
 import io.grpc.stub.StreamObserver;
@@ -14,11 +13,11 @@ import io.grpc.stub.StreamObserver;
 public class OrganisationsEinheitGrpcService extends OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceImplBase {
 
 	@Inject
-	private UserService userService;
+	private OrganisationsEinheitService organisationsEinheitService;
 
 	@Override
 	public void getSupportedOrganisationsEinheiten(Empty request, StreamObserver<GrpcGetSupportedOrganisationsEinheitenResponse> responseObserver) {
-		var organisationsEinheitIds = userService.findAllOrganisationsEinheitIds();
+		var organisationsEinheitIds = organisationsEinheitService.findAllOrganisationsEinheitIds();
 		var response = GrpcGetSupportedOrganisationsEinheitenResponse.newBuilder()
 				.addAllOrganisationseinheiten(mapToGrpc(organisationsEinheitIds))
 				.build();
diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepository.java b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepository.java
new file mode 100644
index 00000000..66318b34
--- /dev/null
+++ b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepository.java
@@ -0,0 +1,48 @@
+/*
+ * 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.itvsh.kop.user.organisationseinheit;
+
+import static de.itvsh.kop.user.User.*;
+import static org.apache.commons.collections4.IterableUtils.*;
+
+import java.util.Collection;
+
+import javax.enterprise.context.ApplicationScoped;
+
+import com.mongodb.client.model.Filters;
+
+import de.itvsh.kop.common.logging.KopLogging;
+import de.itvsh.kop.user.User;
+import io.quarkus.mongodb.panache.PanacheMongoRepository;
+
+@ApplicationScoped
+@KopLogging
+class OrganisationsEinheitRepository implements PanacheMongoRepository<User> {
+
+	public Collection<String> findAllOrganisationsEinheitIds() {
+		return toList(
+				unmodifiableIterable(
+						mongoCollection().distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(DELETED_FIELD, false), String.class)));
+	}
+}
\ No newline at end of file
diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitService.java
new file mode 100644
index 00000000..39075610
--- /dev/null
+++ b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitService.java
@@ -0,0 +1,15 @@
+package de.itvsh.kop.user.organisationseinheit;
+
+import java.util.Collection;
+
+import javax.inject.Inject;
+
+class OrganisationsEinheitService {
+
+	@Inject
+	private OrganisationsEinheitRepository repository;
+
+	public Collection<String> findAllOrganisationsEinheitIds() {
+		return repository.findAllOrganisationsEinheitIds();
+	}
+}
diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java
index 560504e7..3189e0c7 100644
--- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java
+++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java
@@ -38,7 +38,6 @@ import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 
-import com.google.common.collect.Lists;
 import com.thedeanda.lorem.LoremIpsum;
 
 import de.itvsh.kop.user.common.MongoDbTestProfile;
@@ -323,22 +322,4 @@ class UserRepositoryITCase {
 			assertThat(user).usingRecursiveComparison().ignoringFields("id").isEqualTo(UserTestFactory.create());
 		}
 	}
-
-	@Nested
-	@DisplayName("Test finding all Organisationseinheiten IDs")
-	class TestFindAllOrganisationsEinheitIds {
-		@Test
-		void shouldFindAll() {
-			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build());
-			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build());
-			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build());
-			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build());
-			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).deleted(true).organisationsEinheitId("ABC").build());
-
-			var result = repository.findAllOrganisationsEinheitIds();
-
-			assertThat(result).hasSize(4);
-			assertThat(result).containsExactlyInAnyOrder("1", "A", "B", UserTestFactory.ORGANISTATIONSEINHEITEN_ID);
-		}
-	}
 }
\ No newline at end of file
diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java
index efa152d1..94b1bc55 100644
--- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java
+++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java
@@ -32,7 +32,6 @@ import java.util.List;
 import java.util.Optional;
 
 import org.assertj.core.api.Condition;
-import org.bson.conversions.Bson;
 import org.bson.types.ObjectId;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
@@ -41,11 +40,6 @@ import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
 import org.mockito.Spy;
 
-import com.mongodb.client.DistinctIterable;
-import com.mongodb.client.MongoCollection;
-import com.mongodb.client.MongoCursor;
-import com.mongodb.client.model.Filters;
-
 import de.itvsh.kop.user.common.errorhandling.ResourceNotFoundException;
 import io.quarkus.mongodb.panache.PanacheQuery;
 import io.quarkus.mongodb.panache.common.PanacheUpdate;
@@ -186,25 +180,4 @@ class UserRepositoryTest {
 			assertThatExceptionOfType(ResourceNotFoundException.class).isThrownBy(() -> userRepository.refresh(UserTestFactory.create())); // NOSONAR
 		}
 	}
-
-	@DisplayName("Test find Organisationseinheiten Ids")
-	@Nested
-	class TestFindOrganisationsEinheitIds {
-
-		MongoCollection mongoCollection = mock(MongoCollection.class);
-		MongoCursor mongoCursor = mock(MongoCursor.class);
-
-		@Test
-		void shouldFindAllOrganisationsEinheitIds() {
-			var iterable = mock(DistinctIterable.class);
-			when(iterable.iterator()).thenReturn(mongoCursor);
-			doReturn(mongoCollection).when(userRepository).mongoCollection();
-			when(mongoCursor.next()).thenReturn("");
-			when(mongoCollection.distinct(anyString(), any(Bson.class), any())).thenReturn(iterable);
-
-			userRepository.findAllOrganisationsEinheitIds();
-
-			verify(mongoCollection).distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(User.DELETED_FIELD, false), String.class);
-		}
-	}
 }
diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java
index f58b9c9e..43235c6e 100644
--- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java
+++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java
@@ -204,16 +204,4 @@ class UserServiceTest {
 			verify(repository).findUsers(SEARCH_QUERY, true, LIMIT);
 		}
 	}
-
-	@DisplayName("Get Organisationseinheiten")
-	@Nested
-	class TestGetOrganisationsEinheiten {
-
-		@Test
-		void shouldGetAllOrganisationsEinheitenForAllUsers() {
-			service.findAllOrganisationsEinheitIds();
-
-			verify(repository).findAllOrganisationsEinheitIds();
-		}
-	}
 }
\ No newline at end of file
diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryITCase.java
new file mode 100644
index 00000000..3327c23e
--- /dev/null
+++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryITCase.java
@@ -0,0 +1,44 @@
+package de.itvsh.kop.user.organisationseinheit;
+
+import static org.assertj.core.api.Assertions.*;
+
+import javax.inject.Inject;
+
+import org.bson.types.ObjectId;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+
+import com.google.common.collect.Lists;
+
+import de.itvsh.kop.user.UserTestFactory;
+import de.itvsh.kop.user.common.MongoDbTestProfile;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.TestProfile;
+
+@QuarkusTest
+@TestProfile(MongoDbTestProfile.class)
+class OrganisationsEinheitRepositoryITCase {
+
+	@Inject
+	OrganisationsEinheitRepository repository;
+
+	@Nested
+	@DisplayName("Test finding all Organisationseinheiten IDs")
+	class TestFindAllOrganisationsEinheitIds {
+		@Test
+		void shouldFindAll() {
+			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build());
+			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build());
+			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build());
+			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build());
+			repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).deleted(true).organisationsEinheitId("ABC").build());
+
+			var result = repository.findAllOrganisationsEinheitIds();
+
+			assertThat(result).hasSize(4);
+			assertThat(result).containsExactlyInAnyOrder("1", "A", "B", UserTestFactory.ORGANISTATIONSEINHEITEN_ID);
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryTest.java
new file mode 100644
index 00000000..f07c9f0c
--- /dev/null
+++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryTest.java
@@ -0,0 +1,45 @@
+package de.itvsh.kop.user.organisationseinheit;
+
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import org.bson.conversions.Bson;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.Spy;
+
+import com.mongodb.client.DistinctIterable;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoCursor;
+import com.mongodb.client.model.Filters;
+
+import de.itvsh.kop.user.User;
+
+class OrganisationsEinheitRepositoryTest {
+
+	@Spy
+	OrganisationsEinheitRepository organisationsEinheitRepository;
+
+	@DisplayName("Test find Organisationseinheiten Ids")
+	@Nested
+	class TestFindOrganisationsEinheitIds {
+
+		MongoCollection mongoCollection = mock(MongoCollection.class);
+		MongoCursor mongoCursor = mock(MongoCursor.class);
+
+		@Test
+		void shouldFindAllOrganisationsEinheitIds() {
+			var iterable = mock(DistinctIterable.class);
+			when(iterable.iterator()).thenReturn(mongoCursor);
+			doReturn(mongoCollection).when(organisationsEinheitRepository).mongoCollection();
+			when(mongoCursor.next()).thenReturn("");
+			when(mongoCollection.distinct(anyString(), any(Bson.class), any())).thenReturn(iterable);
+
+			organisationsEinheitRepository.findAllOrganisationsEinheitIds();
+
+			verify(mongoCollection).distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(User.DELETED_FIELD, false), String.class);
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitServiceTest.java
new file mode 100644
index 00000000..47281c48
--- /dev/null
+++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitServiceTest.java
@@ -0,0 +1,31 @@
+package de.itvsh.kop.user.organisationseinheit;
+
+import static org.mockito.Mockito.*;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+
+class OrganisationsEinheitServiceTest {
+
+	@InjectMocks
+	OrganisationsEinheitService service;
+
+	@Mock
+	OrganisationsEinheitRepository repository;
+
+	@DisplayName("Get Organisationseinheiten")
+	@Nested
+	class TestGetOrganisationsEinheiten {
+
+		@Test
+		void shouldGetAllOrganisationsEinheitenForAllUsers() {
+			service.findAllOrganisationsEinheitIds();
+
+			verify(repository).findAllOrganisationsEinheitIds();
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java
index ce249df2..8a6594ef 100644
--- a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java
+++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java
@@ -10,7 +10,6 @@ import org.mockito.Mock;
 
 import com.google.protobuf.Empty;
 
-import de.itvsh.kop.user.UserService;
 import de.itvsh.kop.user.grpc.organisationseinheit.GrpcGetSupportedOrganisationsEinheitenResponse;
 import io.grpc.stub.StreamObserver;
 
@@ -19,7 +18,7 @@ public class OrganisationseinheitGrpcServiceTest {
 	OrganisationsEinheitGrpcService organisationsEinheitGrpcService;
 
 	@Mock
-	UserService userService;
+	OrganisationsEinheitService organisationsEinheitService;
 
 	@Nested
 	@DisplayName("Get supported Organisationseinheiten")
@@ -34,7 +33,7 @@ public class OrganisationseinheitGrpcServiceTest {
 					Empty.getDefaultInstance(),
 					streamObserver);
 
-			verify(userService).findAllOrganisationsEinheitIds();
+			verify(organisationsEinheitService).findAllOrganisationsEinheitIds();
 		}
 	}
 
-- 
GitLab