From 5fe0e1e5e55d4eba1a0d22a79cde31186b071743 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Tue, 25 Mar 2025 15:54:07 +0100
Subject: [PATCH 1/6] OZG-7609 use unsecured accesws to aggregation mappings
 for spring cloud config

---
 .../admin/reporting/AggregationMappingRepository.java    | 7 +++++--
 .../ReportingAggregationManagerSettingDtoService.java    | 2 +-
 .../AggregationMappingEnvironmentSettingITCase.java      | 3 ---
 .../reporting/AggregationMappingRepositoryITCase.java    | 9 +++++++++
 ...ReportingAggregationManagerSettingDtoServiceTest.java | 4 ++--
 5 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java b/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java
index 249aa175..437b5f0e 100644
--- a/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java
+++ b/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java
@@ -30,10 +30,13 @@ import org.springframework.data.mongodb.repository.Query;
 import org.springframework.data.rest.core.annotation.RepositoryRestResource;
 import org.springframework.security.access.annotation.Secured;
 
-@Secured("ROLE_DATENBEAUFTRAGUNG")
 @RepositoryRestResource
 interface AggregationMappingRepository extends MongoRepository<AggregationMapping, String> {
+
 	@Override
-	@Query("{'_class': 'AggregationMapping'}")
+	@Secured("ROLE_DATENBEAUFTRAGUNG")
 	List<AggregationMapping> findAll();
+
+	@Query("{}")
+	List<AggregationMapping> findAllUnsecured();
 }
diff --git a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
index afaaaed6..72197f81 100644
--- a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
+++ b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
@@ -40,7 +40,7 @@ class ReportingAggregationManagerSettingDtoService implements SettingDtoService
 
 	@Override
 	public ReportingAggregationManagerSettingDto getDataTransferObject() {
-		return mapToDto(repository.findAll());
+		return mapToDto(repository.findAllUnsecured());
 	}
 
 	ReportingAggregationManagerSettingDto mapToDto(List<AggregationMapping> aggregationMappings) {
diff --git a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
index 6425ab46..d65fc2db 100644
--- a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
+++ b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
@@ -33,18 +33,15 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
 import org.springframework.data.mongodb.core.MongoOperations;
-import org.springframework.security.test.context.support.WithMockUser;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.ResultActions;
 
-import de.ozgcloud.admin.common.user.UserRole;
 import de.ozgcloud.admin.setting.YamlTestFactory;
 import de.ozgcloud.common.test.DataITCase;
 import lombok.SneakyThrows;
 
 @DataITCase
 @AutoConfigureMockMvc
-@WithMockUser(roles = UserRole.DATENBEAUFTRAGUNG)
 public class AggregationMappingEnvironmentSettingITCase {
 
 	@Autowired
diff --git a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java
index 8012939c..9a0a9ca6 100644
--- a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java
+++ b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java
@@ -61,6 +61,15 @@ class AggregationMappingRepositoryITCase {
 		assertThat(result).hasSize(1);
 	}
 
+	@Test
+	void shouldLoadWithoutRole() {
+		operations.save(AggregationMappingTestFactory.create());
+
+		var result = repository.findAllUnsecured();
+
+		assertThat(result).hasSize(1);
+	}
+
 	@Test
 	@WithMockUser
 	void shouldThrowExceptionOnMissingRole() {
diff --git a/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java b/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java
index 41286953..db27eeb3 100644
--- a/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java
+++ b/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java
@@ -88,13 +88,13 @@ class ReportingAggregationManagerSettingDtoServiceTest {
 		void shouldCallRepository() {
 			service.getDataTransferObject();
 
-			verify(repository).findAll();
+			verify(repository).findAllUnsecured();
 		}
 
 		@Test
 		void shouldCallMapToDto() {
 			AggregationMapping mapping = AggregationMappingTestFactory.create();
-			when(repository.findAll()).thenReturn(List.of(mapping));
+			when(repository.findAllUnsecured()).thenReturn(List.of(mapping));
 
 			service.getDataTransferObject();
 
-- 
GitLab


From 87bcc47d02734d8e3d356e251ce582d26a789b68 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Tue, 25 Mar 2025 17:16:07 +0100
Subject: [PATCH 2/6] OZG-7609 test with easier prefix

---
 ...ngAggregationManagerSettingDtoService.java |  2 +-
 .../settings/aggregation.yaml.tmpl            | 41 +++++++++----------
 2 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
index 72197f81..5baa66b6 100644
--- a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
+++ b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
@@ -51,6 +51,6 @@ class ReportingAggregationManagerSettingDtoService implements SettingDtoService
 
 	@Override
 	public String getSettingKeyName() {
-		return "ozgcloud.aggregation";
+		return "aggregation";
 	}
 }
diff --git a/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl b/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
index 0b8a9c51..43cef678 100644
--- a/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
+++ b/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
@@ -1,21 +1,20 @@
-ozgcloud:
-  aggregation:
-    aggregationMappings:
-    - formIdentifier:
-        formEngineName: %s
-        formId: %s
-      fieldMappings:
-      - sourcePath: %s
-        targetPath: %s
-      - sourcePath: %s
-        targetPath: %s
-      - sourcePath: %s
-        targetPath: %s
-    - formIdentifier:
-        formEngineName: %s
-        formId: %s
-      fieldMappings:
-      - sourcePath: %s
-        targetPath: %s
-      - sourcePath: %s
-        targetPath: %s
+aggregation:
+  aggregationMappings:
+  - formIdentifier:
+      formEngineName: %s
+      formId: %s
+    fieldMappings:
+    - sourcePath: %s
+      targetPath: %s
+    - sourcePath: %s
+      targetPath: %s
+    - sourcePath: %s
+      targetPath: %s
+  - formIdentifier:
+      formEngineName: %s
+      formId: %s
+    fieldMappings:
+    - sourcePath: %s
+      targetPath: %s
+    - sourcePath: %s
+      targetPath: %s
-- 
GitLab


From 586ad4e0ad415358aaaa9c16a1aba06d3e965b76 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Tue, 25 Mar 2025 17:27:13 +0100
Subject: [PATCH 3/6] Revert "OZG-7609 test with easier prefix"

This reverts commit 87bcc47d02734d8e3d356e251ce582d26a789b68.
---
 ...ngAggregationManagerSettingDtoService.java |  2 +-
 .../settings/aggregation.yaml.tmpl            | 41 ++++++++++---------
 2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
index 5baa66b6..72197f81 100644
--- a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
+++ b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
@@ -51,6 +51,6 @@ class ReportingAggregationManagerSettingDtoService implements SettingDtoService
 
 	@Override
 	public String getSettingKeyName() {
-		return "aggregation";
+		return "ozgcloud.aggregation";
 	}
 }
diff --git a/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl b/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
index 43cef678..0b8a9c51 100644
--- a/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
+++ b/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
@@ -1,20 +1,21 @@
-aggregation:
-  aggregationMappings:
-  - formIdentifier:
-      formEngineName: %s
-      formId: %s
-    fieldMappings:
-    - sourcePath: %s
-      targetPath: %s
-    - sourcePath: %s
-      targetPath: %s
-    - sourcePath: %s
-      targetPath: %s
-  - formIdentifier:
-      formEngineName: %s
-      formId: %s
-    fieldMappings:
-    - sourcePath: %s
-      targetPath: %s
-    - sourcePath: %s
-      targetPath: %s
+ozgcloud:
+  aggregation:
+    aggregationMappings:
+    - formIdentifier:
+        formEngineName: %s
+        formId: %s
+      fieldMappings:
+      - sourcePath: %s
+        targetPath: %s
+      - sourcePath: %s
+        targetPath: %s
+      - sourcePath: %s
+        targetPath: %s
+    - formIdentifier:
+        formEngineName: %s
+        formId: %s
+      fieldMappings:
+      - sourcePath: %s
+        targetPath: %s
+      - sourcePath: %s
+        targetPath: %s
-- 
GitLab


From 288a588644d835ffe4a3c13d2880cf13057acc7b Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Tue, 25 Mar 2025 17:54:55 +0100
Subject: [PATCH 4/6] OZG-7609 flatten PropertySource

---
 pom.xml                                       |  6 ++++
 .../setting/SettingEnvironmentRepository.java |  6 ++--
 ...gationMappingEnvironmentSettingITCase.java | 34 +++++++++----------
 ...actory.java => PropertiesTestFactory.java} |  6 ++--
 .../setting/SettingEnvironmentITCase.java     | 10 +++---
 .../SettingEnvironmentRepositoryTest.java     |  9 +++--
 .../settings/aggregation.json.tmpl            |  1 +
 .../settings/aggregation.yaml.tmpl            | 21 ------------
 8 files changed, 43 insertions(+), 50 deletions(-)
 rename src/test/java/de/ozgcloud/admin/setting/{YamlTestFactory.java => PropertiesTestFactory.java} (97%)
 create mode 100644 src/test/resources/yamlTemplates/settings/aggregation.json.tmpl
 delete mode 100644 src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl

diff --git a/pom.xml b/pom.xml
index edad1443..30345bd5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,6 +55,7 @@
 
 		<zufi-manager.version>1.6.0</zufi-manager.version>
 		<shedlock.version>5.16.0</shedlock.version>
+		<spring-vault-core.version>3.1.2</spring-vault-core.version>
 	</properties>
 
 	<dependencies>
@@ -149,6 +150,11 @@
 			<artifactId>mapstruct-processor</artifactId>
 			<version>${mapstruct.version}</version>
 		</dependency>
+		<dependency>
+			<groupId>org.springframework.vault</groupId>
+			<artifactId>spring-vault-core</artifactId>
+			<version>${spring-vault-core.version}</version>
+		</dependency>
 
 		<!-- commons -->
 		<dependency>
diff --git a/src/main/java/de/ozgcloud/admin/setting/SettingEnvironmentRepository.java b/src/main/java/de/ozgcloud/admin/setting/SettingEnvironmentRepository.java
index a6e74eac..82193473 100644
--- a/src/main/java/de/ozgcloud/admin/setting/SettingEnvironmentRepository.java
+++ b/src/main/java/de/ozgcloud/admin/setting/SettingEnvironmentRepository.java
@@ -33,6 +33,7 @@ import org.springframework.cloud.config.environment.Environment;
 import org.springframework.cloud.config.environment.PropertySource;
 import org.springframework.cloud.config.server.environment.EnvironmentRepository;
 import org.springframework.stereotype.Component;
+import org.springframework.vault.support.JsonMapFlattener;
 
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -74,8 +75,9 @@ public class SettingEnvironmentRepository implements EnvironmentRepository {
 	}
 
 	PropertySource transformToPropertySource(ApplicationSettingDTO settingDTO) {
-		return new PropertySource(StringUtils.EMPTY, objectMapper.convertValue(settingDTO, new TypeReference<Map<String, Object>>() {
-		}));
+		return new PropertySource(StringUtils.EMPTY,
+				JsonMapFlattener.flatten(objectMapper.convertValue(settingDTO, new TypeReference<Map<String, Object>>() {
+				})));
 	}
 
 }
diff --git a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
index d65fc2db..197adf56 100644
--- a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
+++ b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
@@ -36,7 +36,7 @@ import org.springframework.data.mongodb.core.MongoOperations;
 import org.springframework.test.web.servlet.MockMvc;
 import org.springframework.test.web.servlet.ResultActions;
 
-import de.ozgcloud.admin.setting.YamlTestFactory;
+import de.ozgcloud.admin.setting.PropertiesTestFactory;
 import de.ozgcloud.common.test.DataITCase;
 import lombok.SneakyThrows;
 
@@ -63,36 +63,36 @@ public class AggregationMappingEnvironmentSettingITCase {
 			var result = getAggregationSettings();
 
 			assertThat(result.andReturn().getResponse().getContentAsString())
-					.isEqualTo(YamlTestFactory.createAggregationYaml());
+					.isEqualTo(PropertiesTestFactory.createAggregationProperties());
 		}
 
 		private ResultActions getAggregationSettings() throws Exception {
-			return mockMvc.perform(get("/configserver/OzgCloud_AggregationManager-any.yaml"))
+			return mockMvc.perform(get("/configserver/OzgCloud_AggregationManager/default"))
 					.andExpect(status().isOk());
 		}
 
 		private void fillDbWithAggregationMappings() {
 			var aggregationMapping1 = AggregationMapping.builder()
 					.formIdentifier(AggregationMapping.FormIdentifier.builder()
-							.formEngineName(YamlTestFactory.FORM_ENGINE_NAME_1)
-							.formId(YamlTestFactory.FORM_ID_1)
+							.formEngineName(PropertiesTestFactory.FORM_ENGINE_NAME_1)
+							.formId(PropertiesTestFactory.FORM_ID_1)
 							.build())
-					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(YamlTestFactory.SOURCE_PATH_1_1)
-							.targetPath(YamlTestFactory.TARGET_PATH_1_1).build())
-					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(YamlTestFactory.SOURCE_PATH_1_2)
-							.targetPath(YamlTestFactory.TARGET_PATH_1_2).build())
-					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(YamlTestFactory.SOURCE_PATH_1_3)
-							.targetPath(YamlTestFactory.TARGET_PATH_1_3).build())
+					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(PropertiesTestFactory.SOURCE_PATH_1_1)
+							.targetPath(PropertiesTestFactory.TARGET_PATH_1_1).build())
+					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(PropertiesTestFactory.SOURCE_PATH_1_2)
+							.targetPath(PropertiesTestFactory.TARGET_PATH_1_2).build())
+					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(PropertiesTestFactory.SOURCE_PATH_1_3)
+							.targetPath(PropertiesTestFactory.TARGET_PATH_1_3).build())
 					.build();
 			var aggregationMapping2 = AggregationMapping.builder()
 					.formIdentifier(AggregationMapping.FormIdentifier.builder()
-							.formEngineName(YamlTestFactory.FORM_ENGINE_NAME_2)
-							.formId(YamlTestFactory.FORM_ID_2)
+							.formEngineName(PropertiesTestFactory.FORM_ENGINE_NAME_2)
+							.formId(PropertiesTestFactory.FORM_ID_2)
 							.build())
-					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(YamlTestFactory.SOURCE_PATH_2_1)
-							.targetPath(YamlTestFactory.TARGET_PATH_2_1).build())
-					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(YamlTestFactory.SOURCE_PATH_2_2)
-							.targetPath(YamlTestFactory.TARGET_PATH_2_2).build())
+					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(PropertiesTestFactory.SOURCE_PATH_2_1)
+							.targetPath(PropertiesTestFactory.TARGET_PATH_2_1).build())
+					.mapping(AggregationMapping.FieldMapping.builder().sourcePath(PropertiesTestFactory.SOURCE_PATH_2_2)
+							.targetPath(PropertiesTestFactory.TARGET_PATH_2_2).build())
 					.build();
 
 			mongoOperations.dropCollection(AggregationMapping.COLLECTION_NAME);
diff --git a/src/test/java/de/ozgcloud/admin/setting/YamlTestFactory.java b/src/test/java/de/ozgcloud/admin/setting/PropertiesTestFactory.java
similarity index 97%
rename from src/test/java/de/ozgcloud/admin/setting/YamlTestFactory.java
rename to src/test/java/de/ozgcloud/admin/setting/PropertiesTestFactory.java
index 40ac3f16..3c149bd9 100644
--- a/src/test/java/de/ozgcloud/admin/setting/YamlTestFactory.java
+++ b/src/test/java/de/ozgcloud/admin/setting/PropertiesTestFactory.java
@@ -31,7 +31,7 @@ import de.ozgcloud.admin.setting.postfach.PostfachSettingBody;
 import de.ozgcloud.admin.setting.postfach.PostfachSettingBodyTestFactory;
 import de.ozgcloud.common.test.TestUtils;
 
-public class YamlTestFactory {
+public class PropertiesTestFactory {
 
 	public static final PostfachSettingBody POSTFACH = PostfachSettingBodyTestFactory.create();
 	public static final String FORM_ENGINE_NAME_1 = LoremIpsum.getInstance().getWords(1);
@@ -72,8 +72,8 @@ public class YamlTestFactory {
 		return TestUtils.loadTextFile("yamlTemplates/settings/initial.yaml.tmpl");
 	}
 
-	public static String createAggregationYaml() {
-		return TestUtils.loadTextFile("yamlTemplates/settings/aggregation.yaml.tmpl",
+	public static String createAggregationProperties() {
+		return TestUtils.loadTextFile("yamlTemplates/settings/aggregation.json.tmpl",
 				FORM_ENGINE_NAME_1,
 				FORM_ID_1,
 				SOURCE_PATH_1_1,
diff --git a/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentITCase.java b/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentITCase.java
index 4fe44a5e..455c4825 100644
--- a/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentITCase.java
+++ b/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentITCase.java
@@ -80,7 +80,8 @@ class SettingEnvironmentITCase {
 			void shouldHandleEmptySetting() {
 				var result = getAlfaSettings();
 
-				assertThat(formatLineBreaks(result.andReturn().getResponse().getContentAsString())).isEqualTo(YamlTestFactory.createInitialYaml());
+				assertThat(formatLineBreaks(result.andReturn().getResponse().getContentAsString()))
+						.isEqualTo(PropertiesTestFactory.createInitialYaml());
 			}
 		}
 
@@ -97,7 +98,7 @@ class SettingEnvironmentITCase {
 			void shouldReturnValuesForAlfa() {
 				var result = getAlfaSettings();
 
-				assertThat(formatLineBreaks(result.andReturn().getResponse().getContentAsString())).isEqualTo(YamlTestFactory.createAlfaYaml());
+				assertThat(formatLineBreaks(result.andReturn().getResponse().getContentAsString())).isEqualTo(PropertiesTestFactory.createAlfaYaml());
 			}
 		}
 
@@ -122,7 +123,8 @@ class SettingEnvironmentITCase {
 			void shouldHandleEmptySetting() {
 				var result = getVorgangManagerSettings();
 
-				assertThat(formatLineBreaks(result.andReturn().getResponse().getContentAsString())).isEqualTo(YamlTestFactory.createInitialYaml());
+				assertThat(formatLineBreaks(result.andReturn().getResponse().getContentAsString()))
+						.isEqualTo(PropertiesTestFactory.createInitialYaml());
 			}
 		}
 
@@ -140,7 +142,7 @@ class SettingEnvironmentITCase {
 				var result = getVorgangManagerSettings();
 
 				assertThat(formatLineBreaks(result.andReturn().getResponse().getContentAsString()))
-						.isEqualTo(YamlTestFactory.createVorgangManagerYaml());
+						.isEqualTo(PropertiesTestFactory.createVorgangManagerYaml());
 			}
 		}
 
diff --git a/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentRepositoryTest.java b/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentRepositoryTest.java
index b59b5edc..25e1a2ac 100644
--- a/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentRepositoryTest.java
+++ b/src/test/java/de/ozgcloud/admin/setting/SettingEnvironmentRepositoryTest.java
@@ -199,7 +199,10 @@ class SettingEnvironmentRepositoryTest {
             @Getter
             private ApplicationSettingDTO attribute = new ApplicationSettingDTO() {
                 @Getter
-                private String nestedAttribute = "innerValue";
+                private ApplicationSettingDTO nestedAttribute = new ApplicationSettingDTO() {
+                    @Getter
+                    private String nestedAttribute = "innerValue";
+                };
             };
         };
 
@@ -213,8 +216,8 @@ class SettingEnvironmentRepositoryTest {
         }
 
         @Test
-        void shouldReturnPropertySourceOfNestedObject() {
-            var expectedPropertySource = new PropertySource(StringUtils.EMPTY, Map.of("attribute.nestedAttribute", "innerValue"));
+        void shouldReturnPropertySourceOfFlattenedNestedObject() {
+            var expectedPropertySource = new PropertySource(StringUtils.EMPTY, Map.of("attribute.nestedAttribute.nestedAttribute", "innerValue"));
 
             var resultPropertySource = repository.transformToPropertySource(nestedSettingDTO);
 
diff --git a/src/test/resources/yamlTemplates/settings/aggregation.json.tmpl b/src/test/resources/yamlTemplates/settings/aggregation.json.tmpl
new file mode 100644
index 00000000..b4db7c45
--- /dev/null
+++ b/src/test/resources/yamlTemplates/settings/aggregation.json.tmpl
@@ -0,0 +1 @@
+{"name":"OzgCloud_AggregationManager","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"","source":{"ozgcloud.aggregation.aggregationMappings[0].formIdentifier.formEngineName":"%s","ozgcloud.aggregation.aggregationMappings[0].formIdentifier.formId":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[0].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[0].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[1].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[1].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[2].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[2].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[1].formIdentifier.formEngineName":"%s","ozgcloud.aggregation.aggregationMappings[1].formIdentifier.formId":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[0].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[0].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[1].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[1].targetPath":"%s"}}]}
\ No newline at end of file
diff --git a/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl b/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
deleted file mode 100644
index 0b8a9c51..00000000
--- a/src/test/resources/yamlTemplates/settings/aggregation.yaml.tmpl
+++ /dev/null
@@ -1,21 +0,0 @@
-ozgcloud:
-  aggregation:
-    aggregationMappings:
-    - formIdentifier:
-        formEngineName: %s
-        formId: %s
-      fieldMappings:
-      - sourcePath: %s
-        targetPath: %s
-      - sourcePath: %s
-        targetPath: %s
-      - sourcePath: %s
-        targetPath: %s
-    - formIdentifier:
-        formEngineName: %s
-        formId: %s
-      fieldMappings:
-      - sourcePath: %s
-        targetPath: %s
-      - sourcePath: %s
-        targetPath: %s
-- 
GitLab


From 371cbe042ab19406cc9cda20e03124ec70b9c98c Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Tue, 25 Mar 2025 17:59:13 +0100
Subject: [PATCH 5/6] OZG-7609 fix itcase

---
 src/test/resources/yamlTemplates/settings/initial.yaml.tmpl | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/test/resources/yamlTemplates/settings/initial.yaml.tmpl b/src/test/resources/yamlTemplates/settings/initial.yaml.tmpl
index 1a6ddf88..7d41cbfd 100644
--- a/src/test/resources/yamlTemplates/settings/initial.yaml.tmpl
+++ b/src/test/resources/yamlTemplates/settings/initial.yaml.tmpl
@@ -1,4 +1,3 @@
 ozgcloud:
   postfach:
     signatur: null
-    organisationsEinheitSettings: {}
-- 
GitLab


From 20c9d2ced6368f73d8f94ef58a9e0aeba24b1eb1 Mon Sep 17 00:00:00 2001
From: Felix Reichenbach <felix.reichenbach@mgm-tp.com>
Date: Thu, 27 Mar 2025 10:39:44 +0100
Subject: [PATCH 6/6] OZG-7609 apply code review changes

---
 .../AggregationMappingRepository.java         |  2 +-
 ...ngAggregationManagerSettingDtoService.java |  2 +-
 ...gationMappingEnvironmentSettingITCase.java |  2 +-
 .../AggregationMappingRepositoryITCase.java   | 46 +++++++++++--------
 ...gregationManagerSettingDtoServiceTest.java |  4 +-
 .../admin/setting/PropertiesTestFactory.java  |  2 +-
 .../settings/aggregation.json.tmpl            | 30 ++++++++++++
 .../settings/aggregation.json.tmpl            |  1 -
 8 files changed, 62 insertions(+), 27 deletions(-)
 create mode 100644 src/test/resources/jsonTemplates/settings/aggregation.json.tmpl
 delete mode 100644 src/test/resources/yamlTemplates/settings/aggregation.json.tmpl

diff --git a/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java b/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java
index 437b5f0e..f762a367 100644
--- a/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java
+++ b/src/main/java/de/ozgcloud/admin/reporting/AggregationMappingRepository.java
@@ -38,5 +38,5 @@ interface AggregationMappingRepository extends MongoRepository<AggregationMappin
 	List<AggregationMapping> findAll();
 
 	@Query("{}")
-	List<AggregationMapping> findAllUnsecured();
+	List<AggregationMapping> findAllBypassAuth();
 }
diff --git a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
index 72197f81..a1fcc5f3 100644
--- a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
+++ b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java
@@ -40,7 +40,7 @@ class ReportingAggregationManagerSettingDtoService implements SettingDtoService
 
 	@Override
 	public ReportingAggregationManagerSettingDto getDataTransferObject() {
-		return mapToDto(repository.findAllUnsecured());
+		return mapToDto(repository.findAllBypassAuth());
 	}
 
 	ReportingAggregationManagerSettingDto mapToDto(List<AggregationMapping> aggregationMappings) {
diff --git a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
index 197adf56..8f7ff069 100644
--- a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
+++ b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingEnvironmentSettingITCase.java
@@ -63,7 +63,7 @@ public class AggregationMappingEnvironmentSettingITCase {
 			var result = getAggregationSettings();
 
 			assertThat(result.andReturn().getResponse().getContentAsString())
-					.isEqualTo(PropertiesTestFactory.createAggregationProperties());
+					.isEqualToIgnoringWhitespace(PropertiesTestFactory.createAggregationProperties());
 		}
 
 		private ResultActions getAggregationSettings() throws Exception {
diff --git a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java
index 9a0a9ca6..19356279 100644
--- a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java
+++ b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingRepositoryITCase.java
@@ -26,6 +26,7 @@ package de.ozgcloud.admin.reporting;
 import static org.assertj.core.api.Assertions.*;
 
 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.data.mongodb.core.MongoOperations;
@@ -50,32 +51,37 @@ class AggregationMappingRepositoryITCase {
 		operations.dropCollection(AggregationMapping.COLLECTION_NAME);
 	}
 
-	@Test
-	@WithMockUser(roles = UserRole.DATENBEAUFTRAGUNG)
-	void shouldLoadOnlyFieldMapping() {
-		operations.save(AggregationMappingTestFactory.create());
-		operations.save(SettingTestFactory.create());
+	@Nested
+	class TestFindAll {
+		@Test
+		@WithMockUser(roles = UserRole.DATENBEAUFTRAGUNG)
+		void shouldLoadOnlyFieldMapping() {
+			operations.save(AggregationMappingTestFactory.create());
+			operations.save(SettingTestFactory.create());
 
-		var result = repository.findAll();
+			var result = repository.findAll();
 
-		assertThat(result).hasSize(1);
-	}
-
-	@Test
-	void shouldLoadWithoutRole() {
-		operations.save(AggregationMappingTestFactory.create());
+			assertThat(result).hasSize(1);
+		}
 
-		var result = repository.findAllUnsecured();
+		@Test
+		@WithMockUser
+		void shouldThrowExceptionOnMissingRole() {
+			operations.save(AggregationMappingTestFactory.create());
 
-		assertThat(result).hasSize(1);
+			assertThatThrownBy(() -> repository.findAll()).isInstanceOf(AuthorizationDeniedException.class);
+		}
 	}
 
-	@Test
-	@WithMockUser
-	void shouldThrowExceptionOnMissingRole() {
-		operations.save(AggregationMappingTestFactory.create());
+	@Nested
+	class TestFindAllBypassAuth {
+		@Test
+		void shouldLoadWithoutRole() {
+			operations.save(AggregationMappingTestFactory.create());
 
-		assertThatThrownBy(() -> repository.findAll()).isInstanceOf(AuthorizationDeniedException.class);
-	}
+			var result = repository.findAllBypassAuth();
 
+			assertThat(result).hasSize(1);
+		}
+	}
 }
diff --git a/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java b/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java
index db27eeb3..aae1ec4b 100644
--- a/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java
+++ b/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java
@@ -88,13 +88,13 @@ class ReportingAggregationManagerSettingDtoServiceTest {
 		void shouldCallRepository() {
 			service.getDataTransferObject();
 
-			verify(repository).findAllUnsecured();
+			verify(repository).findAllBypassAuth();
 		}
 
 		@Test
 		void shouldCallMapToDto() {
 			AggregationMapping mapping = AggregationMappingTestFactory.create();
-			when(repository.findAllUnsecured()).thenReturn(List.of(mapping));
+			when(repository.findAllBypassAuth()).thenReturn(List.of(mapping));
 
 			service.getDataTransferObject();
 
diff --git a/src/test/java/de/ozgcloud/admin/setting/PropertiesTestFactory.java b/src/test/java/de/ozgcloud/admin/setting/PropertiesTestFactory.java
index 3c149bd9..62df9cc7 100644
--- a/src/test/java/de/ozgcloud/admin/setting/PropertiesTestFactory.java
+++ b/src/test/java/de/ozgcloud/admin/setting/PropertiesTestFactory.java
@@ -73,7 +73,7 @@ public class PropertiesTestFactory {
 	}
 
 	public static String createAggregationProperties() {
-		return TestUtils.loadTextFile("yamlTemplates/settings/aggregation.json.tmpl",
+		return TestUtils.loadTextFile("jsonTemplates/settings/aggregation.json.tmpl",
 				FORM_ENGINE_NAME_1,
 				FORM_ID_1,
 				SOURCE_PATH_1_1,
diff --git a/src/test/resources/jsonTemplates/settings/aggregation.json.tmpl b/src/test/resources/jsonTemplates/settings/aggregation.json.tmpl
new file mode 100644
index 00000000..ce56cc5a
--- /dev/null
+++ b/src/test/resources/jsonTemplates/settings/aggregation.json.tmpl
@@ -0,0 +1,30 @@
+{
+    "name": "OzgCloud_AggregationManager",
+    "profiles": [
+        "default"
+    ],
+    "label": null,
+    "version": null,
+    "state": null,
+    "propertySources": [
+        {
+            "name": "",
+            "source": {
+                "ozgcloud.aggregation.aggregationMappings[0].formIdentifier.formEngineName": "%s",
+                "ozgcloud.aggregation.aggregationMappings[0].formIdentifier.formId": "%s",
+                "ozgcloud.aggregation.aggregationMappings[0].fieldMappings[0].sourcePath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[0].fieldMappings[0].targetPath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[0].fieldMappings[1].sourcePath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[0].fieldMappings[1].targetPath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[0].fieldMappings[2].sourcePath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[0].fieldMappings[2].targetPath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[1].formIdentifier.formEngineName": "%s",
+                "ozgcloud.aggregation.aggregationMappings[1].formIdentifier.formId": "%s",
+                "ozgcloud.aggregation.aggregationMappings[1].fieldMappings[0].sourcePath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[1].fieldMappings[0].targetPath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[1].fieldMappings[1].sourcePath": "%s",
+                "ozgcloud.aggregation.aggregationMappings[1].fieldMappings[1].targetPath": "%s"
+            }
+        }
+    ]
+}
\ No newline at end of file
diff --git a/src/test/resources/yamlTemplates/settings/aggregation.json.tmpl b/src/test/resources/yamlTemplates/settings/aggregation.json.tmpl
deleted file mode 100644
index b4db7c45..00000000
--- a/src/test/resources/yamlTemplates/settings/aggregation.json.tmpl
+++ /dev/null
@@ -1 +0,0 @@
-{"name":"OzgCloud_AggregationManager","profiles":["default"],"label":null,"version":null,"state":null,"propertySources":[{"name":"","source":{"ozgcloud.aggregation.aggregationMappings[0].formIdentifier.formEngineName":"%s","ozgcloud.aggregation.aggregationMappings[0].formIdentifier.formId":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[0].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[0].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[1].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[1].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[2].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[0].fieldMappings[2].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[1].formIdentifier.formEngineName":"%s","ozgcloud.aggregation.aggregationMappings[1].formIdentifier.formId":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[0].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[0].targetPath":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[1].sourcePath":"%s","ozgcloud.aggregation.aggregationMappings[1].fieldMappings[1].targetPath":"%s"}}]}
\ No newline at end of file
-- 
GitLab