diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java b/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java index bb34c97970495956b3cf204a5fcb0141ff156018..4db774a6227542cf4c154275b8416ba02f4bd26c 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/UserRepository.java @@ -25,7 +25,6 @@ package de.itvsh.kop.user; import static de.itvsh.kop.user.User.*; -import java.util.Collection; import java.util.Optional; import java.util.stream.Stream; @@ -33,9 +32,6 @@ import javax.enterprise.context.ApplicationScoped; import org.bson.types.ObjectId; -import com.google.common.collect.Lists; -import com.mongodb.client.model.Filters; - import de.itvsh.kop.common.logging.KopLogging; import de.itvsh.kop.user.common.errorhandling.ResourceNotFoundException; import io.quarkus.mongodb.panache.PanacheMongoRepository; @@ -89,8 +85,4 @@ class UserRepository implements PanacheMongoRepository<User> { return findByIdOptional(user.getId()) .orElse(findByExternalId(user.getExternalId()).orElseThrow(() -> new ResourceNotFoundException(User.class, user.getExternalId()))); } - - public Collection<String> findAllOrganisationsEinheitIds() { - return Lists.newArrayList(mongoCollection().distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(DELETED_FIELD, false), String.class)); - } } \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java index 1f5b158cb9a03b7f2646ae0e4c847f4a468835f2..29faba06212925767f2281d5a45d33a7c7ef245a 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/UserService.java @@ -23,7 +23,6 @@ */ package de.itvsh.kop.user; -import java.util.Collection; import java.util.Optional; import java.util.stream.Stream; @@ -93,8 +92,4 @@ public class UserService { public User findByExternalId(String id) { return repository.findByExternalId(id).orElseThrow(() -> new ResourceNotFoundException(User.class, id)); } - - public Collection<String> findAllOrganisationsEinheitIds() { - return repository.findAllOrganisationsEinheitIds(); - } } \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java index 0e7e0ee22e3b3f77759262eb18ab991db36378ed..a82c606a994409441ebfb7ba8bb93b9a4f012e4a 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitGrpcService.java @@ -6,7 +6,6 @@ import javax.inject.Inject; import com.google.protobuf.Empty; -import de.itvsh.kop.user.UserService; import de.itvsh.kop.user.grpc.organisationseinheit.GrpcGetSupportedOrganisationsEinheitenResponse; import de.itvsh.kop.user.grpc.organisationseinheit.OrganisationsEinheitServiceGrpc; import io.grpc.stub.StreamObserver; @@ -14,11 +13,11 @@ import io.grpc.stub.StreamObserver; public class OrganisationsEinheitGrpcService extends OrganisationsEinheitServiceGrpc.OrganisationsEinheitServiceImplBase { @Inject - private UserService userService; + private OrganisationsEinheitService organisationsEinheitService; @Override public void getSupportedOrganisationsEinheiten(Empty request, StreamObserver<GrpcGetSupportedOrganisationsEinheitenResponse> responseObserver) { - var organisationsEinheitIds = userService.findAllOrganisationsEinheitIds(); + var organisationsEinheitIds = organisationsEinheitService.findAllOrganisationsEinheitIds(); var response = GrpcGetSupportedOrganisationsEinheitenResponse.newBuilder() .addAllOrganisationseinheiten(mapToGrpc(organisationsEinheitIds)) .build(); diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepository.java b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..66318b347df89d6e5c20510ecb2fb9d1145191d6 --- /dev/null +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepository.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.itvsh.kop.user.organisationseinheit; + +import static de.itvsh.kop.user.User.*; +import static org.apache.commons.collections4.IterableUtils.*; + +import java.util.Collection; + +import javax.enterprise.context.ApplicationScoped; + +import com.mongodb.client.model.Filters; + +import de.itvsh.kop.common.logging.KopLogging; +import de.itvsh.kop.user.User; +import io.quarkus.mongodb.panache.PanacheMongoRepository; + +@ApplicationScoped +@KopLogging +class OrganisationsEinheitRepository implements PanacheMongoRepository<User> { + + public Collection<String> findAllOrganisationsEinheitIds() { + return toList( + unmodifiableIterable( + mongoCollection().distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(DELETED_FIELD, false), String.class))); + } +} \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitService.java new file mode 100644 index 0000000000000000000000000000000000000000..39075610f45cf47f7dbb40a0b782da74dbb662ae --- /dev/null +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitService.java @@ -0,0 +1,15 @@ +package de.itvsh.kop.user.organisationseinheit; + +import java.util.Collection; + +import javax.inject.Inject; + +class OrganisationsEinheitService { + + @Inject + private OrganisationsEinheitRepository repository; + + public Collection<String> findAllOrganisationsEinheitIds() { + return repository.findAllOrganisationsEinheitIds(); + } +} diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java index 560504e7e47df21b6e9a5f8054a69120f06c7123..3189e0c7f33edf85fad4f807da3d6eddc5291272 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryITCase.java @@ -38,7 +38,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; -import com.google.common.collect.Lists; import com.thedeanda.lorem.LoremIpsum; import de.itvsh.kop.user.common.MongoDbTestProfile; @@ -323,22 +322,4 @@ class UserRepositoryITCase { assertThat(user).usingRecursiveComparison().ignoringFields("id").isEqualTo(UserTestFactory.create()); } } - - @Nested - @DisplayName("Test finding all Organisationseinheiten IDs") - class TestFindAllOrganisationsEinheitIds { - @Test - void shouldFindAll() { - repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build()); - repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build()); - repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build()); - repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build()); - repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).deleted(true).organisationsEinheitId("ABC").build()); - - var result = repository.findAllOrganisationsEinheitIds(); - - assertThat(result).hasSize(4); - assertThat(result).containsExactlyInAnyOrder("1", "A", "B", UserTestFactory.ORGANISTATIONSEINHEITEN_ID); - } - } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java index efa152d1b7d5cad4905b97046df0aa1f62c745c6..94b1bc5594d8e3ba20313df5e6402327e6a3e975 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserRepositoryTest.java @@ -32,7 +32,6 @@ import java.util.List; import java.util.Optional; import org.assertj.core.api.Condition; -import org.bson.conversions.Bson; import org.bson.types.ObjectId; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -41,11 +40,6 @@ import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.Spy; -import com.mongodb.client.DistinctIterable; -import com.mongodb.client.MongoCollection; -import com.mongodb.client.MongoCursor; -import com.mongodb.client.model.Filters; - import de.itvsh.kop.user.common.errorhandling.ResourceNotFoundException; import io.quarkus.mongodb.panache.PanacheQuery; import io.quarkus.mongodb.panache.common.PanacheUpdate; @@ -186,25 +180,4 @@ class UserRepositoryTest { assertThatExceptionOfType(ResourceNotFoundException.class).isThrownBy(() -> userRepository.refresh(UserTestFactory.create())); // NOSONAR } } - - @DisplayName("Test find Organisationseinheiten Ids") - @Nested - class TestFindOrganisationsEinheitIds { - - MongoCollection mongoCollection = mock(MongoCollection.class); - MongoCursor mongoCursor = mock(MongoCursor.class); - - @Test - void shouldFindAllOrganisationsEinheitIds() { - var iterable = mock(DistinctIterable.class); - when(iterable.iterator()).thenReturn(mongoCursor); - doReturn(mongoCollection).when(userRepository).mongoCollection(); - when(mongoCursor.next()).thenReturn(""); - when(mongoCollection.distinct(anyString(), any(Bson.class), any())).thenReturn(iterable); - - userRepository.findAllOrganisationsEinheitIds(); - - verify(mongoCollection).distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(User.DELETED_FIELD, false), String.class); - } - } } diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java index f58b9c9e95c62877068bdf11e5c9e0fd4492e30e..43235c6e126312539c0f9a7e0a993cfe3c68004d 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserServiceTest.java @@ -204,16 +204,4 @@ class UserServiceTest { verify(repository).findUsers(SEARCH_QUERY, true, LIMIT); } } - - @DisplayName("Get Organisationseinheiten") - @Nested - class TestGetOrganisationsEinheiten { - - @Test - void shouldGetAllOrganisationsEinheitenForAllUsers() { - service.findAllOrganisationsEinheitIds(); - - verify(repository).findAllOrganisationsEinheitIds(); - } - } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..3327c23eef83cbdbe84992ddb4004fe8ff5cb47b --- /dev/null +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryITCase.java @@ -0,0 +1,44 @@ +package de.itvsh.kop.user.organisationseinheit; + +import static org.assertj.core.api.Assertions.*; + +import javax.inject.Inject; + +import org.bson.types.ObjectId; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import com.google.common.collect.Lists; + +import de.itvsh.kop.user.UserTestFactory; +import de.itvsh.kop.user.common.MongoDbTestProfile; +import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit.TestProfile; + +@QuarkusTest +@TestProfile(MongoDbTestProfile.class) +class OrganisationsEinheitRepositoryITCase { + + @Inject + OrganisationsEinheitRepository repository; + + @Nested + @DisplayName("Test finding all Organisationseinheiten IDs") + class TestFindAllOrganisationsEinheitIds { + @Test + void shouldFindAll() { + repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build()); + repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build()); + repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitIds(Lists.newArrayList("A", "1", "B")).build()); + repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).organisationsEinheitId("1").build()); + repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).deleted(true).organisationsEinheitId("ABC").build()); + + var result = repository.findAllOrganisationsEinheitIds(); + + assertThat(result).hasSize(4); + assertThat(result).containsExactlyInAnyOrder("1", "A", "B", UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + } + } + +} \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryTest.java new file mode 100644 index 0000000000000000000000000000000000000000..f07c9f0c7a930d372aa670a6722355bedb7475b1 --- /dev/null +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitRepositoryTest.java @@ -0,0 +1,45 @@ +package de.itvsh.kop.user.organisationseinheit; + +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +import org.bson.conversions.Bson; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.Spy; + +import com.mongodb.client.DistinctIterable; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.MongoCursor; +import com.mongodb.client.model.Filters; + +import de.itvsh.kop.user.User; + +class OrganisationsEinheitRepositoryTest { + + @Spy + OrganisationsEinheitRepository organisationsEinheitRepository; + + @DisplayName("Test find Organisationseinheiten Ids") + @Nested + class TestFindOrganisationsEinheitIds { + + MongoCollection mongoCollection = mock(MongoCollection.class); + MongoCursor mongoCursor = mock(MongoCursor.class); + + @Test + void shouldFindAllOrganisationsEinheitIds() { + var iterable = mock(DistinctIterable.class); + when(iterable.iterator()).thenReturn(mongoCursor); + doReturn(mongoCollection).when(organisationsEinheitRepository).mongoCollection(); + when(mongoCursor.next()).thenReturn(""); + when(mongoCollection.distinct(anyString(), any(Bson.class), any())).thenReturn(iterable); + + organisationsEinheitRepository.findAllOrganisationsEinheitIds(); + + verify(mongoCollection).distinct(User.ORGANISATIONS_EINHEIT_IDS_FIELD, Filters.eq(User.DELETED_FIELD, false), String.class); + } + } + +} \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..47281c4899b532ea9a0f454b9c660d5970f55e40 --- /dev/null +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationsEinheitServiceTest.java @@ -0,0 +1,31 @@ +package de.itvsh.kop.user.organisationseinheit; + +import static org.mockito.Mockito.*; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; + +class OrganisationsEinheitServiceTest { + + @InjectMocks + OrganisationsEinheitService service; + + @Mock + OrganisationsEinheitRepository repository; + + @DisplayName("Get Organisationseinheiten") + @Nested + class TestGetOrganisationsEinheiten { + + @Test + void shouldGetAllOrganisationsEinheitenForAllUsers() { + service.findAllOrganisationsEinheitIds(); + + verify(repository).findAllOrganisationsEinheitIds(); + } + } + +} \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java index ce249df23f05fde037929d9e34d044be63123721..8a6594ef48b708af4c68d42f548f5bb66e8f6054 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/organisationseinheit/OrganisationseinheitGrpcServiceTest.java @@ -10,7 +10,6 @@ import org.mockito.Mock; import com.google.protobuf.Empty; -import de.itvsh.kop.user.UserService; import de.itvsh.kop.user.grpc.organisationseinheit.GrpcGetSupportedOrganisationsEinheitenResponse; import io.grpc.stub.StreamObserver; @@ -19,7 +18,7 @@ public class OrganisationseinheitGrpcServiceTest { OrganisationsEinheitGrpcService organisationsEinheitGrpcService; @Mock - UserService userService; + OrganisationsEinheitService organisationsEinheitService; @Nested @DisplayName("Get supported Organisationseinheiten") @@ -34,7 +33,7 @@ public class OrganisationseinheitGrpcServiceTest { Empty.getDefaultInstance(), streamObserver); - verify(userService).findAllOrganisationsEinheitIds(); + verify(organisationsEinheitService).findAllOrganisationsEinheitIds(); } }