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