From 8a2ad1b63941af40bad1279fb8c07f9b9005c881 Mon Sep 17 00:00:00 2001 From: Tobias Bruns <tobias.bruns@mgm-tp.com> Date: Tue, 14 Jan 2025 08:42:43 +0100 Subject: [PATCH] OZG-6988 fix loading via configserver endpoint without role --- .../de/ozgcloud/admin/common/DtoService.java | 7 +++++ .../admin/reporting/AggregationMapping.java | 4 ++- ...ngAggregationManagerSettingDtoService.java | 6 ++-- .../admin/setting/SettingRepository.java | 14 ++++++++-- .../AggregationMappingTestFactory.java | 2 +- ...gregationManagerSettingDtoServiceTest.java | 9 +++--- .../setting/SettingRepositoryITCase.java | 28 +++++++++++++------ .../admin/setting/SettingTestFactory.java | 4 ++- 8 files changed, 54 insertions(+), 20 deletions(-) diff --git a/src/main/java/de/ozgcloud/admin/common/DtoService.java b/src/main/java/de/ozgcloud/admin/common/DtoService.java index 7feaa873..6e260a3f 100644 --- a/src/main/java/de/ozgcloud/admin/common/DtoService.java +++ b/src/main/java/de/ozgcloud/admin/common/DtoService.java @@ -23,9 +23,16 @@ */ package de.ozgcloud.admin.common; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + import org.springframework.stereotype.Service; @Service +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) public @interface DtoService { String[] value(); diff --git a/src/main/java/de/ozgcloud/admin/reporting/AggregationMapping.java b/src/main/java/de/ozgcloud/admin/reporting/AggregationMapping.java index dba1cf9f..d923d2c0 100644 --- a/src/main/java/de/ozgcloud/admin/reporting/AggregationMapping.java +++ b/src/main/java/de/ozgcloud/admin/reporting/AggregationMapping.java @@ -42,13 +42,15 @@ import lombok.ToString; import lombok.extern.jackson.Jacksonized; @Document("settings") -@TypeAlias("AggregationMapping") +@TypeAlias(AggregationMapping.TYPE_ALIAS) @Jacksonized @Builder @Getter @ToString public class AggregationMapping { + public static final String TYPE_ALIAS = "AggregationMapping"; + @Id @JsonIgnore private String id; diff --git a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java index 62a6ab9b..acb46bf4 100644 --- a/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java +++ b/src/main/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoService.java @@ -28,18 +28,20 @@ import java.util.stream.Stream; import de.ozgcloud.admin.common.DtoService; import de.ozgcloud.admin.common.SettingDtoService; import de.ozgcloud.admin.setting.SettingConstants; +import de.ozgcloud.admin.setting.SettingRepository; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor @DtoService(SettingConstants.AGGREGATION_MANAGER) class ReportingAggregationManagerSettingDtoService implements SettingDtoService { - private final AggregationMappingRepository repository; private final AggregationMappingMapper mapper; + private final SettingRepository repository; + @Override public ReportingAggregationManagerSettingDto getDataTransferObject() { - return mapToDto(repository.findAll().stream()); + return mapToDto(repository.findByType("AggregationMapping", AggregationMapping.class)); } ReportingAggregationManagerSettingDto mapToDto(Stream<AggregationMapping> settings) { diff --git a/src/main/java/de/ozgcloud/admin/setting/SettingRepository.java b/src/main/java/de/ozgcloud/admin/setting/SettingRepository.java index 1cfb2957..ddeeae9f 100644 --- a/src/main/java/de/ozgcloud/admin/setting/SettingRepository.java +++ b/src/main/java/de/ozgcloud/admin/setting/SettingRepository.java @@ -23,15 +23,25 @@ */ package de.ozgcloud.admin.setting; +import java.util.List; import java.util.Optional; +import java.util.stream.Stream; import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.Query; import org.springframework.data.rest.core.annotation.RepositoryRestResource; import org.springframework.security.access.annotation.Secured; -@Secured("ROLE_ADMIN_ADMIN") @RepositoryRestResource(collectionResourceRel = SettingConstants.REL, path = SettingConstants.PATH) -interface SettingRepository extends MongoRepository<Setting, String> { +public interface SettingRepository extends MongoRepository<Setting, String> { + + @Secured("ROLE_ADMIN_ADMIN") + @Override + @Query("{'_class': 'Setting'}") + List<Setting> findAll(); Optional<Setting> findOneByName(String name); + + @Query("{'_class': ?0}") + <T> Stream<T> findByType(String typeName, Class<T> clazz); } diff --git a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingTestFactory.java b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingTestFactory.java index 4bdc2082..5d41bec2 100644 --- a/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingTestFactory.java +++ b/src/test/java/de/ozgcloud/admin/reporting/AggregationMappingTestFactory.java @@ -28,7 +28,7 @@ import java.util.UUID; import de.ozgcloud.admin.reporting.AggregationMapping.FieldMapping; import de.ozgcloud.admin.reporting.AggregationMapping.FormIdentifier; -class AggregationMappingTestFactory { +public class AggregationMappingTestFactory { public static final String ID = UUID.randomUUID().toString(); public static final String FORM_ENGINE_NAME = "A12"; diff --git a/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java b/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java index dc5c554d..38b5d5e3 100644 --- a/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java +++ b/src/test/java/de/ozgcloud/admin/reporting/ReportingAggregationManagerSettingDtoServiceTest.java @@ -27,7 +27,6 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; -import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; @@ -39,6 +38,8 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import de.ozgcloud.admin.setting.SettingRepository; + class ReportingAggregationManagerSettingDtoServiceTest { @Spy @@ -48,7 +49,7 @@ class ReportingAggregationManagerSettingDtoServiceTest { @Mock private AggregationMappingMapper mapper; @Mock - private AggregationMappingRepository repository; + private SettingRepository repository; @Nested class TestMapToDto { @@ -89,13 +90,13 @@ class ReportingAggregationManagerSettingDtoServiceTest { void shouldCallRepository() { service.getDataTransferObject(); - verify(repository).findAll(); + verify(repository).findByType(AggregationMapping.TYPE_ALIAS, AggregationMapping.class); } @Test void shouldCallMapToDto() { AggregationMapping mapping = AggregationMappingTestFactory.create(); - when(repository.findAll()).thenReturn(List.of(mapping)); + when(repository.findByType(any(), any())).thenReturn(Stream.of(mapping)); service.getDataTransferObject(); diff --git a/src/test/java/de/ozgcloud/admin/setting/SettingRepositoryITCase.java b/src/test/java/de/ozgcloud/admin/setting/SettingRepositoryITCase.java index 649efee5..4f7dc9e6 100644 --- a/src/test/java/de/ozgcloud/admin/setting/SettingRepositoryITCase.java +++ b/src/test/java/de/ozgcloud/admin/setting/SettingRepositoryITCase.java @@ -32,33 +32,43 @@ import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.security.test.context.support.WithMockUser; import de.ozgcloud.admin.common.user.UserRole; +import de.ozgcloud.admin.reporting.AggregationMappingTestFactory; import de.ozgcloud.common.test.DataITCase; @DataITCase @WithMockUser(roles = UserRole.ADMIN_ADMIN) class SettingRepositoryITCase { - private static final String SETTING_NAME = "Name"; - @Autowired private MongoOperations mongoOperations; @Autowired private SettingRepository repository; - private Setting setting = SettingTestFactory.createBuilder() - .name(SETTING_NAME) - .build(); - @Nested class TestFindOneByName { @Test void shouldGetSavedData() { mongoOperations.dropCollection(Setting.COLLECTION_NAME); - mongoOperations.save(setting); + mongoOperations.save(SettingTestFactory.create()); + + var settingFromDb = repository.findOneByName(SettingTestFactory.SETTING_NAME).get(); + + assertThat(settingFromDb).usingRecursiveComparison().ignoringFields("id").isEqualTo(SettingTestFactory.create()); + } + } + + @Nested + class TestFindByType { + + @Test + void shouldReturnOnlySetting() { + mongoOperations.dropCollection(Setting.COLLECTION_NAME); + mongoOperations.save(SettingTestFactory.create()); + mongoOperations.save(AggregationMappingTestFactory.create()); - var settingFromDb = repository.findOneByName(SETTING_NAME).get(); + var loaded = repository.findByType("Setting", Setting.class); - assertThat(settingFromDb).usingRecursiveComparison().isEqualTo(setting); + assertThat(loaded).hasSize(1).first().isInstanceOf(Setting.class); } } } diff --git a/src/test/java/de/ozgcloud/admin/setting/SettingTestFactory.java b/src/test/java/de/ozgcloud/admin/setting/SettingTestFactory.java index 07e9533f..54c4ae3b 100644 --- a/src/test/java/de/ozgcloud/admin/setting/SettingTestFactory.java +++ b/src/test/java/de/ozgcloud/admin/setting/SettingTestFactory.java @@ -27,12 +27,14 @@ import de.ozgcloud.common.test.TestUtils; public class SettingTestFactory { + static final String SETTING_NAME = "Name"; + public static Setting create() { return createBuilder().build(); } public static Setting.SettingBuilder createBuilder() { - return Setting.builder(); + return Setting.builder().name(SETTING_NAME); } public static String buildSettingJson(Setting setting, String settingBodyString) { -- GitLab