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 0000000000000000000000000000000000000000..1eded7df64c78956c696ebc3e2e8c4b6d77eb19e --- /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 0000000000000000000000000000000000000000..c5d6e894b604bf298870bd2b417e8491eb3986cc --- /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 0000000000000000000000000000000000000000..bd9aa33e3f3c697be38e6c91b81821d689f242a5 --- /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 e2463b30f5ff16935c7a942aae6d173d02940616..3f8e3c38963297d397cb05542479f4a8a1d99984 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 01fa5cc5737ba6a0c480850f6e40e1536490f90d..0000000000000000000000000000000000000000 --- 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 ca6a15e72d2e7032faa1def7d2dac03785a0d758..3c5ceb01cc06ab50359c0c97233e023192f11e2d 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 0000000000000000000000000000000000000000..548f6f55b7062c6f5a6887833394d2182d665c45 --- /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 0000000000000000000000000000000000000000..f6283b9230c77de52f71b43888baf5a225574b93 --- /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 ac189d04921e96085d3ce001a3b1ff8246a50a71..9267fc3b7ae6a09af7d243983c56371cbe2656ee 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