diff --git a/src/main/java/de/ozgcloud/admin/common/DtoService.java b/src/main/java/de/ozgcloud/admin/common/DtoService.java index 7feaa87325896549ea0052c06d936c59452a6c51..6e260a3fb3ff15674ca5b88717426c40df1ec3ac 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 dba1cf9fbab44be2716928751783371b192bbcd5..d923d2c01a69af97787af47de8444cab6d086dd4 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 62a6ab9bb76e94ab074be2c2aed1578ada674638..acb46bf40ebaf81a11b896ed6c2d55c7048f29e7 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 1cfb2957c475cab3d49346738f0aa331f0428e9f..ddeeae9fd0a5cb80dec50bf3c9b5c41492318c3a 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 4bdc208202b738229c2616a233d2db85f46dd7f2..5d41bec21628058b6a5f84ef2858746b1b348d26 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 dc5c554d9765b0390e5510f5efe99645c4152637..38b5d5e310295cecf06d3fd9d4ff723f14c00d54 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 649efee530e07449fe35fcae3a4138bf2ab74f22..4f7dc9e6b6b543a1c701b5c875cf70244600f442 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 07e9533f4895b545042a35186f8d96080dd14952..54c4ae3b42514c653e28615ccc8b54e0cbc5f7b3 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) {