From 89d43b886d56d3d75cea761d864e5a1fae11c913 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Fri, 25 Oct 2024 09:48:30 +0200
Subject: [PATCH] OZG-6721 OZG-6914 Call repository in SettingsService

---
 ...rganisationsEinheitSettingsRepository.java | 16 ++++
 .../OrganisationsEinheitSettingsService.java  | 24 +++++
 .../OrganisationsEinheitWithSettings.java     |  9 ++
 .../OrganisationsEinheitRepository.java       |  3 -
 .../OrganisationsEinheitWithSettings.java     |  7 --
 .../admin/setting/SettingService.java         |  1 -
 ...ationsEinheitSettingsRepositoryITCase.java | 91 +++++++++++++++++++
 ...ganisationsEinheitSettingsServiceTest.java | 85 +++++++++++++++++
 .../OrganisationsEinheitRepositoryITCase.java | 53 -----------
 9 files changed, 225 insertions(+), 64 deletions(-)
 create mode 100644 src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepository.java
 create mode 100644 src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsService.java
 create mode 100644 src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitWithSettings.java
 delete mode 100644 src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitWithSettings.java
 create mode 100644 src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepositoryITCase.java
 create mode 100644 src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsServiceTest.java

diff --git a/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepository.java b/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepository.java
new file mode 100644
index 00000000..1eded7df
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepository.java
@@ -0,0 +1,16 @@
+package de.ozgcloud.admin.common.organisationseinheit;
+
+import java.util.stream.Stream;
+
+import org.springframework.data.mongodb.repository.MongoRepository;
+import org.springframework.data.mongodb.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheit;
+
+@Repository
+interface OrganisationsEinheitSettingsRepository extends MongoRepository<OrganisationsEinheit, String> {
+
+	@Query("{'settings': { $nin: [null,{}] } }")
+	Stream<OrganisationsEinheitWithSettings> getSettings();
+}
diff --git a/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsService.java b/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsService.java
new file mode 100644
index 00000000..c5d6e894
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsService.java
@@ -0,0 +1,24 @@
+package de.ozgcloud.admin.common.organisationseinheit;
+
+import java.util.Map;
+import java.util.stream.Stream;
+
+import org.springframework.stereotype.Service;
+
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitSettings;
+import lombok.RequiredArgsConstructor;
+
+@Service
+@RequiredArgsConstructor
+public class OrganisationsEinheitSettingsService {
+
+	private final OrganisationsEinheitSettingsRepository settingsRepository;
+
+	public Map<String, OrganisationsEinheitSettings> getSettings() {
+		return getSettingsMap(settingsRepository.getSettings());
+	}
+
+	Map<String, OrganisationsEinheitSettings> getSettingsMap(Stream<OrganisationsEinheitWithSettings> settings) {
+		return Map.of();
+	}
+}
diff --git a/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitWithSettings.java b/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitWithSettings.java
new file mode 100644
index 00000000..bd9aa33e
--- /dev/null
+++ b/src/main/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitWithSettings.java
@@ -0,0 +1,9 @@
+package de.ozgcloud.admin.common.organisationseinheit;
+
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitSettings;
+
+interface OrganisationsEinheitWithSettings {
+
+	String getOrganisationsEinheitId();
+	OrganisationsEinheitSettings getSettings();
+}
diff --git a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepository.java b/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepository.java
index e2463b30..3f8e3c38 100644
--- a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepository.java
+++ b/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepository.java
@@ -27,7 +27,4 @@ interface OrganisationsEinheitRepository extends MongoRepository<OrganisationsEi
 
 	@Query("{'syncResult': { $eq: null }}")
 	Stream<OrganisationsEinheit> findAllWithoutSyncResult();
-
-	@Query("{'settings': { $nin: [null,{}] } }")
-	Stream<OrganisationsEinheitWithSettings> getSettings();
 }
diff --git a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitWithSettings.java b/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitWithSettings.java
deleted file mode 100644
index 01fa5cc5..00000000
--- a/src/main/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitWithSettings.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.ozgcloud.admin.organisationseinheit;
-
-interface OrganisationsEinheitWithSettings {
-
-	String getOrganisationsEinheitId();
-	OrganisationsEinheitSettings getSettings();
-}
diff --git a/src/main/java/de/ozgcloud/admin/setting/SettingService.java b/src/main/java/de/ozgcloud/admin/setting/SettingService.java
index ca6a15e7..3c5ceb01 100644
--- a/src/main/java/de/ozgcloud/admin/setting/SettingService.java
+++ b/src/main/java/de/ozgcloud/admin/setting/SettingService.java
@@ -11,7 +11,6 @@ class SettingService {
 	private static final String POSTFACH_SETTING_ITEM_NAME = "Postfach";
 
 	private final SettingRepository repository;
-
 	private final SettingMapper mapper;
 
 	public AlfaSettingDTO getAlfaSettingDTO() {
diff --git a/src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepositoryITCase.java b/src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepositoryITCase.java
new file mode 100644
index 00000000..548f6f55
--- /dev/null
+++ b/src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsRepositoryITCase.java
@@ -0,0 +1,91 @@
+package de.ozgcloud.admin.common.organisationseinheit;
+
+import static org.assertj.core.api.Assertions.*;
+
+import java.util.UUID;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
+import org.springframework.data.mongodb.core.MongoOperations;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.ContextConfiguration;
+
+import com.thedeanda.lorem.LoremIpsum;
+
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheit;
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitSettings;
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitSettingsTestFactory;
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitTestFactory;
+import de.ozgcloud.common.test.DbInitializer;
+
+@DataMongoTest
+@ContextConfiguration(initializers = { DbInitializer.class }, classes = { OrganisationsEinheitSettingsRepository.class, MongoOperations.class })
+@ActiveProfiles({ "itcase", "with_db" })
+@EnableAutoConfiguration
+class OrganisationsEinheitSettingsRepositoryITCase {
+
+	@Autowired
+	private OrganisationsEinheitSettingsRepository repository;
+	@Autowired
+	private MongoOperations operations;
+
+	@BeforeEach
+	void clearDatabase() {
+		operations.dropCollection(OrganisationsEinheit.class);
+	}
+
+	@Nested
+	class TestGetSettings {
+
+		private final OrganisationsEinheit withSignatur1 = OrganisationsEinheitTestFactory.createBuilder()
+				.id(UUID.randomUUID().toString())
+				.organisationsEinheitId(UUID.randomUUID().toString())
+				.settings(withRandomSignatur())
+				.build();
+		private final OrganisationsEinheit withSignatur2 = OrganisationsEinheitTestFactory.createBuilder()
+				.id(UUID.randomUUID().toString())
+				.organisationsEinheitId(UUID.randomUUID().toString())
+				.settings(withRandomSignatur())
+				.build();
+		private final OrganisationsEinheit withNullSettings = OrganisationsEinheitTestFactory.createBuilder()
+				.id(UUID.randomUUID().toString())
+				.organisationsEinheitId(UUID.randomUUID().toString())
+				.settings(null)
+				.build();
+		private final OrganisationsEinheit withEmptySettings = OrganisationsEinheitTestFactory.createBuilder()
+				.id(UUID.randomUUID().toString())
+				.organisationsEinheitId(UUID.randomUUID().toString())
+				.settings(OrganisationsEinheitSettings.builder().build())
+				.build();
+
+		@BeforeEach
+		void setUp() {
+			operations.save(withSignatur1);
+			operations.save(withSignatur2);
+			operations.save(withNullSettings);
+			operations.save(withEmptySettings);
+		}
+
+		@Test
+		void shouldFind() {
+			var found = repository.getSettings();
+
+			assertThat(found).extracting(OrganisationsEinheitWithSettings::getOrganisationsEinheitId, item -> item.getSettings().getSignatur())
+					.containsExactlyInAnyOrder(
+							tuple(withSignatur1.getOrganisationsEinheitId(), withSignatur1.getSettings().getSignatur()),
+							tuple(withSignatur2.getOrganisationsEinheitId(), withSignatur2.getSettings().getSignatur()));
+		}
+
+		private static OrganisationsEinheitSettings withRandomSignatur() {
+			return withSignatur(LoremIpsum.getInstance().getWords(5));
+		}
+
+		private static OrganisationsEinheitSettings withSignatur(String signatur) {
+			return OrganisationsEinheitSettingsTestFactory.createBuilder().signatur(signatur).build();
+		}
+	}
+}
diff --git a/src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsServiceTest.java b/src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsServiceTest.java
new file mode 100644
index 00000000..f6283b92
--- /dev/null
+++ b/src/test/java/de/ozgcloud/admin/common/organisationseinheit/OrganisationsEinheitSettingsServiceTest.java
@@ -0,0 +1,85 @@
+package de.ozgcloud.admin.common.organisationseinheit;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.util.Map;
+import java.util.stream.Stream;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitSettings;
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitSettingsTestFactory;
+import de.ozgcloud.admin.organisationseinheit.OrganisationsEinheitTestFactory;
+
+class OrganisationsEinheitSettingsServiceTest {
+
+	@Mock
+	private OrganisationsEinheitSettingsRepository settingsRepository;
+	@Spy
+	@InjectMocks
+	private OrganisationsEinheitSettingsService service;
+
+	private final OrganisationsEinheitWithSettings withSettings1 = mockWith(OrganisationsEinheitTestFactory.ID,
+			OrganisationsEinheitSettingsTestFactory.create());
+
+	@BeforeEach
+	void init() {
+		when(settingsRepository.getSettings()).thenReturn(Stream.of(withSettings1));
+	}
+
+	@Nested
+	class TestGetSettings {
+
+		private final Map<String, OrganisationsEinheitSettings> settingsMap = Map.of(
+			OrganisationsEinheitTestFactory.ORGANISATIONS_EINHEIT_ID, OrganisationsEinheitSettingsTestFactory.create()
+		);
+
+		@Captor
+		private ArgumentCaptor<Stream<OrganisationsEinheitWithSettings>> streamArgumentCaptor;
+
+		@BeforeEach
+		void init() {
+			doReturn(settingsMap).when(service).getSettingsMap(any());
+		}
+
+		@Test
+		void shouldGetSettings() {
+			callService();
+
+			verify(settingsRepository).getSettings();
+		}
+
+		@Test
+		void shouldGetSettingsMap() {
+			callService();
+
+			verify(service).getSettingsMap(streamArgumentCaptor.capture());
+			assertThat(streamArgumentCaptor.getValue()).containsExactly(withSettings1);
+		}
+
+		private Map<String, OrganisationsEinheitSettings> callService() {
+			return service.getSettings();
+		}
+	}
+
+	@Nested
+	class TestGetSettingsMap {
+
+	}
+
+	private OrganisationsEinheitWithSettings mockWith(String organisationsEinheitId, OrganisationsEinheitSettings settings) {
+		var withSettings = mock(OrganisationsEinheitWithSettings.class);
+		when(withSettings.getOrganisationsEinheitId()).thenReturn(organisationsEinheitId);
+		when(withSettings.getSettings()).thenReturn(settings);
+		return withSettings;
+	}
+}
diff --git a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepositoryITCase.java b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepositoryITCase.java
index ac189d04..9267fc3b 100644
--- a/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepositoryITCase.java
+++ b/src/test/java/de/ozgcloud/admin/organisationseinheit/OrganisationsEinheitRepositoryITCase.java
@@ -16,8 +16,6 @@ import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.ContextConfiguration;
 
-import com.thedeanda.lorem.LoremIpsum;
-
 import de.ozgcloud.common.test.DbInitializer;
 
 @DataMongoTest
@@ -288,55 +286,4 @@ class OrganisationsEinheitRepositoryITCase {
 
 		}
 	}
-
-	@Nested
-	class TestGetSettings {
-
-		private final OrganisationsEinheit withSignatur1 = OrganisationsEinheitTestFactory.createBuilder()
-				.id(UUID.randomUUID().toString())
-				.organisationsEinheitId(UUID.randomUUID().toString())
-				.settings(withRandomSignatur())
-				.build();
-		private final OrganisationsEinheit withSignatur2 = OrganisationsEinheitTestFactory.createBuilder()
-				.id(UUID.randomUUID().toString())
-				.organisationsEinheitId(UUID.randomUUID().toString())
-				.settings(withRandomSignatur())
-				.build();
-		private final OrganisationsEinheit withNullSettings = OrganisationsEinheitTestFactory.createBuilder()
-				.id(UUID.randomUUID().toString())
-				.organisationsEinheitId(UUID.randomUUID().toString())
-				.settings(null)
-				.build();
-		private final OrganisationsEinheit withEmptySettings = OrganisationsEinheitTestFactory.createBuilder()
-				.id(UUID.randomUUID().toString())
-				.organisationsEinheitId(UUID.randomUUID().toString())
-				.settings(new OrganisationsEinheitSettings(null))
-				.build();
-
-		@BeforeEach
-		void setUp() {
-			operations.save(withSignatur1);
-			operations.save(withSignatur2);
-			operations.save(withNullSettings);
-			operations.save(withEmptySettings);
-		}
-
-		@Test
-		void shouldFind() {
-			var found = repository.getSettings();
-
-			assertThat(found).extracting(OrganisationsEinheitWithSettings::getOrganisationsEinheitId, item -> item.getSettings().getSignatur())
-					.containsExactlyInAnyOrder(
-							tuple(withSignatur1.getOrganisationsEinheitId(), withSignatur1.getSettings().getSignatur()),
-							tuple(withSignatur2.getOrganisationsEinheitId(), withSignatur2.getSettings().getSignatur()));
-		}
-
-		private static OrganisationsEinheitSettings withRandomSignatur() {
-			return withSignatur(LoremIpsum.getInstance().getWords(5));
-		}
-
-		private static OrganisationsEinheitSettings withSignatur(String signatur) {
-			return OrganisationsEinheitSettingsTestFactory.createBuilder().signatur(signatur).build();
-		}
-	}
 }
\ No newline at end of file
-- 
GitLab