diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/User.java b/user-manager-server/src/main/java/de/itvsh/kop/user/User.java index 99c8a9722443fb8bed03ef8caf47b372e895ff05..145d92dbf79f662eed14dd0b2adbbb3f65594e92 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/User.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/User.java @@ -57,8 +57,8 @@ public class User { public static final String LASTNAME_FIELD = "lastName"; public static final String FIRSTNAME_FIELD = "firstName"; public static final String USERNAME_FIELD = "username"; - static final String ORGANISATIONS_EINHEIT_IDS_FIELD = "organisationsEinheitIds"; - static final String NOTIFICATION_SEND_FOR_FIELD = "userSettings.notificationsSendFor"; + public static final String ORGANISATIONS_EINHEIT_IDS_FIELD = "organisationsEinheitIds"; + public static final String NOTIFICATION_SEND_FOR_FIELD = "userSettings.notificationsSendFor"; @JsonIgnore @BsonId diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/UserIdResource.java b/user-manager-server/src/main/java/de/itvsh/kop/user/UserIdResource.java deleted file mode 100644 index 7b63864025ccfe0fc3153ca5c8ca2756e060937d..0000000000000000000000000000000000000000 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/UserIdResource.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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; - -import javax.annotation.security.PermitAll; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; - -import de.itvsh.kop.common.logging.KopLogging; - -@KopLogging -@Path(UserIdResource.PATH_MIGRATION) -public class UserIdResource { - static final String PATH_MIGRATION = "/migration/user"; // NOSONAR - @Inject - UserService userService; - - @GET - @Path("/{id}") - @PermitAll - public String findByExternalId(@PathParam(value = "id") String id) { - return userService.findByExternalId(id).getId().toHexString(); - } - -} 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 79533852c5d7b1ed85fbe753dac372140b2bf9d7..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.List; import java.util.Optional; import java.util.stream.Stream; @@ -35,12 +34,12 @@ import org.bson.types.ObjectId; import de.itvsh.kop.common.logging.KopLogging; import de.itvsh.kop.user.common.errorhandling.ResourceNotFoundException; -import de.itvsh.kop.user.settings.NotificationsSendFor; import io.quarkus.mongodb.panache.PanacheMongoRepository; @ApplicationScoped @KopLogging class UserRepository implements PanacheMongoRepository<User> { + private static final String LIKE_OR = " like ?1 or "; private static final String SEARCH_QUERY = LASTNAME_FIELD + LIKE_OR + FIRSTNAME_FIELD + LIKE_OR + @@ -48,8 +47,6 @@ class UserRepository implements PanacheMongoRepository<User> { EMAIL_FIELD + " like ?1"; private static final String AND_DELETED = " and deleted = ?2"; - - private static final String SEARCH_RECIPIENT_QUERY = ORGANISATIONS_EINHEIT_IDS_FIELD + " = ?1 and " + NOTIFICATION_SEND_FOR_FIELD + " = ?2"; private static final String UPDATE_UNSYNCED_USER_QUERY = LAST_SYNC_TIMESTAMP_FIELD + " < ?1"; public User updateUser(User userToUpdate) { @@ -80,10 +77,6 @@ class UserRepository implements PanacheMongoRepository<User> { return find(SEARCH_QUERY + AND_DELETED, "/.*" + query + "*/i", deleted).range(0, limit - 1).stream(); } - public List<User> findRecipientByOrganisationsEinheitId(String organisationseinheitId) { - return find(SEARCH_RECIPIENT_QUERY, organisationseinheitId, NotificationsSendFor.ALL.name()).list(); - } - public long updateUnsyncedUsers(long lastSyncTimestamp) { return update(DELETED_FIELD, true).where(UPDATE_UNSYNCED_USER_QUERY, lastSyncTimestamp); } @@ -92,4 +85,4 @@ class UserRepository implements PanacheMongoRepository<User> { return findByIdOptional(user.getId()) .orElse(findByExternalId(user.getExternalId()).orElseThrow(() -> new ResourceNotFoundException(User.class, user.getExternalId()))); } -} +} \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/UserResourceMapper.java b/user-manager-server/src/main/java/de/itvsh/kop/user/UserResourceMapper.java index 930db5ccedf04d288dcfcf0f95523abae28e7c7d..8759f9450f75518b28395204f18d9721386a3c3e 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/UserResourceMapper.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/UserResourceMapper.java @@ -27,6 +27,7 @@ import java.util.Collections; import java.util.Date; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -68,7 +69,7 @@ public abstract class UserResourceMapper { Date mapCreatedAt(UserResource userRes) { var createdAt = userRes.toRepresentation().getCreatedTimestamp(); - return createdAt != null ? new Date(createdAt) : new Date(); + return Optional.ofNullable(createdAt).map(Date::new).orElse(new Date()); } Set<String> mapOrganisationsEinheitIds(UserResource userRes) { @@ -79,10 +80,7 @@ public abstract class UserResourceMapper { private List<String> getOrganisationsEinheitIdsFromGroups(List<GroupRepresentation> groups) { return groups.stream() - .map(group -> { - var groupFromRealm = realm.getGroupByPath(group.getPath()); - return groupFromRealm != null ? groupFromRealm.getAttributes() : null; - }) + .map(this::mapGroup) .filter(Objects::nonNull) .map(attributeMap -> attributeMap.get(properties.organisationsEinheitIdKey())) .filter(Objects::nonNull) @@ -90,6 +88,12 @@ public abstract class UserResourceMapper { .toList(); } + private Map<String, List<String>> mapGroup(GroupRepresentation group) { + var groupFromRealm = realm.getGroupByPath(group.getPath()); + + return Optional.ofNullable(groupFromRealm).map(GroupRepresentation::getAttributes).orElse(null); + } + List<String> mapRoles(UserResource userRes) { var roleRepresentation = Optional.ofNullable(userRes.roles().getAll().getClientMappings()) .filter(Objects::nonNull) 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 5306416e269989e160ee6df9204209e59bf17fbd..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.List; import java.util.Optional; import java.util.stream.Stream; @@ -81,14 +80,10 @@ public class UserService { repository.updateUnsyncedUsers(lastSyncTimestamp); } - public List<User> findRecipientByOrganisationsEinheitId(String organisationsEinheitId) { - return repository.findRecipientByOrganisationsEinheitId(organisationsEinheitId); - } - public User getById(String id) { if (id.contains(UUID_PATTERN)) { // TODO wenn user migriert wurden wieder entfernen. - return repository.findByExternalId(id).orElseThrow(() -> new ResourceNotFoundException(User.class, id)); + return findByExternalId(id); } return repository.findById(id).orElseThrow(() -> new ResourceNotFoundException(User.class, id)); diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/common/callcontext/GrpcUtil.java b/user-manager-server/src/main/java/de/itvsh/kop/user/common/callcontext/GrpcUtil.java index be21f7a6b4cc6a48b9651c77b4dca899b51020b9..07b3cfb40c353e8b94b6034103d22ad2f971a1ad 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/common/callcontext/GrpcUtil.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/common/callcontext/GrpcUtil.java @@ -10,7 +10,7 @@ import io.grpc.Metadata; import io.grpc.Metadata.Key; // TODO move to a grpcUtil class in common -public class GrpcUtil { +class GrpcUtil { public static Optional<String> getFromHeaders(String key, Metadata headers) { return Optional.ofNullable(headers.get(createKeyOf(key))) diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/common/errorhandling/KeycloakClientException.java b/user-manager-server/src/main/java/de/itvsh/kop/user/common/errorhandling/KeycloakClientException.java deleted file mode 100644 index 36ac5c5f33c54ad7c6b6bade0f67477ff6858028..0000000000000000000000000000000000000000 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/common/errorhandling/KeycloakClientException.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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.common.errorhandling; - -public class KeycloakClientException extends TechnicalException { - - private static final long serialVersionUID = 1L; - - private static final String MESSAGE_TEMPLATE = "Access Denied for admin user: %s, realm: %s, url: %s"; - - public KeycloakClientException(String user, String realm, String url, Throwable cause) { - super(String.format(MESSAGE_TEMPLATE, user, realm, url), cause); - } -} \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/common/errorhandling/UserNotFoundException.java b/user-manager-server/src/main/java/de/itvsh/kop/user/common/errorhandling/UserNotFoundException.java deleted file mode 100644 index d869f78bebfad4fdd2475985416f239f5b3dc757..0000000000000000000000000000000000000000 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/common/errorhandling/UserNotFoundException.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.common.errorhandling; - -public class UserNotFoundException extends TechnicalException { - - private static final long serialVersionUID = 1L; - - private static final String MESSAGE_WITH_EXTERNALID_TEMPLATE = "User not found for keycloak id %s"; - private static final String MESSAGE_WITH_ID_TEMPLATE = "User not found for id %s"; - - public UserNotFoundException(String id) { - super(String.format(MESSAGE_WITH_ID_TEMPLATE, id)); - } - - public UserNotFoundException(String externalId, Throwable cause) { - super(String.format(MESSAGE_WITH_EXTERNALID_TEMPLATE, externalId), cause); - } -} \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java index 403fc8bd1e2076239aa5bedbd7a89bad908643b2..c0bdac2070c68ccc89045b1ae1e21a6a84b7834a 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/keycloak/KeycloakApiService.java @@ -33,11 +33,11 @@ import javax.inject.Inject; import javax.ws.rs.ClientErrorException; import javax.ws.rs.ProcessingException; -import de.itvsh.kop.common.logging.KopLogging; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.representations.idm.UserRepresentation; +import de.itvsh.kop.common.logging.KopLogging; import de.itvsh.kop.user.RemoteUserIterator; import de.itvsh.kop.user.User; import de.itvsh.kop.user.UserResourceMapper; @@ -74,7 +74,7 @@ class KeycloakApiService { return mapper.toKopUser(realmResource.users().get(userRepresentation.getId())); } - private <T> T handlingKeycloakException(Supplier<T> runnable) { + <T> T handlingKeycloakException(Supplier<T> runnable) { try { return runnable.get(); } catch (ClientErrorException | ProcessingException | IllegalStateException e) { diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientGrpcService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientGrpcService.java index b66c0bdac1aebc48cf10e7a4c25838bab79ec45b..585511220ac067c02248c7f0246776ef6540770a 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientGrpcService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientGrpcService.java @@ -24,7 +24,6 @@ package de.itvsh.kop.user.recipient; import java.util.Collection; -import java.util.List; import javax.inject.Inject; @@ -45,14 +44,13 @@ public class RecipientGrpcService extends RecipientServiceImplBase { @Override public void findRecipientByOrganisationsEinheitId(GrpcFindRecipientRequest request, StreamObserver<GrpcFindRecipientResponse> responseObserver) { - List<User> recipients = recipientService.findRecipientByOrganisationsEinheitId(request.getOrganisationsEinheitId()); + var recipients = recipientService.findByOrganisationsEinheitId(request.getOrganisationsEinheitId()); - responseObserver.onNext(buildSearchReponse(recipients.stream().map(recipientMapper::toRecipient).toList())); + responseObserver.onNext(buildSearchReponse(recipients)); responseObserver.onCompleted(); } - private GrpcFindRecipientResponse buildSearchReponse(Collection<GrpcRecipient> recipients) { - return GrpcFindRecipientResponse.newBuilder().addAllRecipient(recipients).build(); - + private GrpcFindRecipientResponse buildSearchReponse(Collection<User> recipients) { + return GrpcFindRecipientResponse.newBuilder().addAllRecipient(recipients.stream().map(recipientMapper::toRecipient).toList()).build(); } -} +} \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientRepository.java b/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientRepository.java new file mode 100644 index 0000000000000000000000000000000000000000..dcebbee5daec02dca277310951821a20b29cda5d --- /dev/null +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientRepository.java @@ -0,0 +1,23 @@ +package de.itvsh.kop.user.recipient; + +import static de.itvsh.kop.user.User.*; + +import java.util.List; + +import javax.enterprise.context.ApplicationScoped; + +import de.itvsh.kop.common.logging.KopLogging; +import de.itvsh.kop.user.User; +import de.itvsh.kop.user.settings.NotificationsSendFor; +import io.quarkus.mongodb.panache.PanacheMongoRepository; + +@ApplicationScoped +@KopLogging +class RecipientRepository implements PanacheMongoRepository<User> { + + private static final String SEARCH_RECIPIENT_QUERY = ORGANISATIONS_EINHEIT_IDS_FIELD + " = ?1 and " + NOTIFICATION_SEND_FOR_FIELD + " = ?2"; + + public List<User> findByOrganisationsEinheitId(String organisationseinheitId) { + return find(SEARCH_RECIPIENT_QUERY, organisationseinheitId, NotificationsSendFor.ALL.name()).list(); + } +} \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientService.java index 922ee3eff17ec3302808852d6a0ac9c4d2d93e30..1f65e76a32008a7bf7030202633f76bce9f23545 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/recipient/RecipientService.java @@ -31,7 +31,6 @@ import javax.inject.Inject; import com.cronutils.utils.StringUtils; import de.itvsh.kop.user.User; -import de.itvsh.kop.user.UserService; import de.itvsh.kop.user.common.errorhandling.FunctionalException; @ApplicationScoped @@ -40,12 +39,12 @@ class RecipientService { static final String MISSING_ORGANISATIONS_EINHEIT_ID_MESSAGE_TEMPLATE = "OrganisationsEinheitId ('%s') can not be null or empty"; @Inject - UserService userService; + RecipientRepository repository; - public List<User> findRecipientByOrganisationsEinheitId(String organisationsEinheitId) { + public List<User> findByOrganisationsEinheitId(String organisationsEinheitId) { if (StringUtils.isEmpty(organisationsEinheitId)) { throw new FunctionalException(() -> String.format(MISSING_ORGANISATIONS_EINHEIT_ID_MESSAGE_TEMPLATE, organisationsEinheitId)); } - return userService.findRecipientByOrganisationsEinheitId(organisationsEinheitId); + return repository.findByOrganisationsEinheitId(organisationsEinheitId); } } \ No newline at end of file diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/settings/UserSettingsService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/settings/UserSettingsService.java index db61a750a743c31fb4605c0146ab1e5a8eb237a2..a22acb22fc7091f2425d6f72ef0029546c368293 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/settings/UserSettingsService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/settings/UserSettingsService.java @@ -31,7 +31,7 @@ import javax.inject.Inject; import de.itvsh.kop.user.UserService; @ApplicationScoped -public class UserSettingsService { +class UserSettingsService { @Inject UserService userService; @@ -43,10 +43,6 @@ public class UserSettingsService { return repository.updateByUserId(userId, userSettings); } - public UserSettings findByUserId(String userId) { - return userService.getById(userId).getUserSettings(); - } - public UserSettings getByUserId(String userId) { var user = userService.getById(userId); diff --git a/user-manager-server/src/main/java/de/itvsh/kop/user/userprofile/UserProfileGrpcService.java b/user-manager-server/src/main/java/de/itvsh/kop/user/userprofile/UserProfileGrpcService.java index 2561d97f954e711e72316d8b16efc8a929f1fdd4..38d8c517a48733610171badb402e683c6903071b 100644 --- a/user-manager-server/src/main/java/de/itvsh/kop/user/userprofile/UserProfileGrpcService.java +++ b/user-manager-server/src/main/java/de/itvsh/kop/user/userprofile/UserProfileGrpcService.java @@ -25,6 +25,7 @@ package de.itvsh.kop.user.userprofile; import javax.inject.Inject; +import de.itvsh.kop.user.User; import de.itvsh.kop.user.UserService; import de.itvsh.kop.user.grpc.userprofile.GrpcGetUserProfileRequest; import de.itvsh.kop.user.grpc.userprofile.GrpcGetUserProfileResponse; @@ -44,7 +45,11 @@ public class UserProfileGrpcService extends UserProfileServiceImplBase { public void getById(GrpcGetUserProfileRequest request, StreamObserver<GrpcGetUserProfileResponse> responseObserver) { var userProfile = service.getById(request.getUserId()); - responseObserver.onNext(GrpcGetUserProfileResponse.newBuilder().setUserProfile(mapper.mapTo(userProfile)).build()); + responseObserver.onNext(buildResponse(userProfile)); responseObserver.onCompleted(); } + + private GrpcGetUserProfileResponse buildResponse(User userProfile) { + return GrpcGetUserProfileResponse.newBuilder().setUserProfile(mapper.mapTo(userProfile)).build(); + } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserIdResourceITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserIdResourceITCase.java deleted file mode 100644 index d25f94c4b937b1c597320dcd715700cca2b640d5..0000000000000000000000000000000000000000 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserIdResourceITCase.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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; - -import static io.restassured.RestAssured.*; -import static org.hamcrest.CoreMatchers.*; -import static org.mockito.Mockito.when; - -import org.junit.jupiter.api.Test; - -import io.quarkus.test.junit.QuarkusTest; -import io.quarkus.test.junit.TestProfile; -import io.quarkus.test.junit.mockito.InjectMock; - -@QuarkusTest -@TestProfile(UserProfileResourceTestProfile.class) -class UserIdResourceITCase { - private static final String EXTERNAL_ID_PATH = UserIdResource.PATH_MIGRATION + "/{id}"; - - @InjectMock - UserService userService; - - @Test - void shouldGetInternalIdByExternalId() { - when(userService.findByExternalId(UserTestFactory.EXTERNAL_ID)).thenReturn(UserTestFactory.createWithId()); - - given() - .when().get(EXTERNAL_ID_PATH, UserTestFactory.EXTERNAL_ID) - .then() - .statusCode(200).body(is(UserTestFactory.ID.toHexString())); - } -} diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceAssemblerTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceAssemblerTest.java index d5d0be062c845c95ece65669dc1d1603e1b46d9f..3ca7db44890e49d1d266d4aa950d5721f514bf9b 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceAssemblerTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceAssemblerTest.java @@ -23,7 +23,6 @@ */ package de.itvsh.kop.user; -import static de.itvsh.kop.user.UserTestFactory.*; import static org.assertj.core.api.Assertions.*; import java.util.List; @@ -48,33 +47,31 @@ class UserProfileResourceAssemblerTest { @Nested class TestToUserProfileResource { - private static final User USER = createWithId(); - @Test void shouldAddSelfLink() { - var res = assembler.toUserProfileResource(USER, USER_MANAGER_URL); + var res = assembler.toUserProfileResource(UserTestFactory.create(), USER_MANAGER_URL); assertThat(res.getLinks().get(UserProfileResourceAssembler.REL_SELF)) .isNotNull() .hasFieldOrPropertyWithValue("href", - USER_MANAGER_URL + UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", ID.toHexString())); + USER_MANAGER_URL + UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", UserTestFactory.ID_STR)); } @Test void shouldAddSettingsLink() { - var res = assembler.toUserProfileResource(USER, USER_MANAGER_URL); + var res = assembler.toUserProfileResource(UserTestFactory.create(), USER_MANAGER_URL); assertThat(res.getLinks().get(UserProfileResourceAssembler.REL_SETTINGS)) .isNotNull() .hasFieldOrPropertyWithValue("href", - USER_MANAGER_URL + UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", ID.toHexString())); + USER_MANAGER_URL + UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", UserTestFactory.ID_STR)); } } @DisplayName("To Userprofile Resource List") @Nested class TestToUserProfileResourceList { - private static final List<User> USERS = List.of(createWithId(), createWithId()); + private static final List<User> USERS = List.of(UserTestFactory.create(), UserTestFactory.create()); @Test void shouldAddSelfLink() { diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceITCase.java index e4b9d4d4d6199522de801f017acd08f41e332b9d..402863432e6d18b74937a0479771f72dfc47664a 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceITCase.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserProfileResourceITCase.java @@ -26,8 +26,8 @@ package de.itvsh.kop.user; import static de.itvsh.kop.user.UserTestFactory.*; import static io.restassured.RestAssured.*; import static org.hamcrest.CoreMatchers.*; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.*; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; import java.util.stream.Stream; @@ -55,15 +55,18 @@ class UserProfileResourceITCase { @InjectMock UserService userService; - private String settingsUrlWithUserId = HTTP_LOCALHOST + UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", ID.toHexString()); - private String urlWithUserId = HTTP_LOCALHOST + UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", ID.toHexString()); + private String settingsUrlWithUserId = HTTP_LOCALHOST + + UserSettingsResource.SETTINGS_LINK_PATTERN.replace("{id}", UserTestFactory.ID_STR); + private String urlWithUserId = HTTP_LOCALHOST + + UserProfileResource.USER_PROFILE_RESOURCE_PATH_TEMPLATE.replace("{id}", UserTestFactory.ID_STR); @DisplayName("Test get user by id") @Nested class TestGetUser { + @BeforeEach void init() { - when(userService.getById(any())).thenReturn(createWithId()); + when(userService.getById(any())).thenReturn(UserTestFactory.create()); } @Test @@ -71,7 +74,7 @@ class UserProfileResourceITCase { given() .when() .accept(RestMediaType.APPLICATION_HAL_JSON) - .get(UserProfileResource.USERS_PATH + "/{id}", ID.toHexString()) + .get(UserProfileResource.USERS_PATH + "/{id}", UserTestFactory.ID_STR) .then().statusCode(200) .body("_links.self.href", equalTo(urlWithUserId)); } @@ -81,7 +84,7 @@ class UserProfileResourceITCase { given() .when() .accept(RestMediaType.APPLICATION_HAL_JSON) - .get(UserProfileResource.USERS_PATH + "/{id}", ID.toHexString()) + .get(UserProfileResource.USERS_PATH + "/{id}", UserTestFactory.ID_STR) .then().statusCode(200) .body("_links.settings.href", equalTo(settingsUrlWithUserId)); } @@ -111,7 +114,7 @@ class UserProfileResourceITCase { @BeforeEach void init() { - when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(createWithId())); + when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(UserTestFactory.create())); } @Test @@ -180,8 +183,8 @@ class UserProfileResourceITCase { @Test void shouldGetDeletedAndNotDeletedUsers() { - User user1 = UserTestFactory.createBuilder().deleted(false).build(); - User user2 = UserTestFactory.createBuilder().deleted(true).build(); + var user1 = UserTestFactory.createBuilder().deleted(false).build(); + var user2 = UserTestFactory.createBuilder().deleted(true).build(); when(userService.findUsers(anyString(), anyInt())).thenReturn(Stream.of(user1, user2)); given() @@ -202,7 +205,7 @@ class UserProfileResourceITCase { @BeforeEach void init() { - when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(createWithId())); + when(userService.findUsers(any(), anyInt())).thenReturn(Stream.of(UserTestFactory.create())); } @Test 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 6e56fcccbb75eef637f9af8ed91f8f362d3c22ab..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 @@ -23,15 +23,16 @@ */ package de.itvsh.kop.user; -import static de.itvsh.kop.user.settings.NotificationsSendFor.*; import static java.util.function.Predicate.not; import static org.assertj.core.api.Assertions.*; import java.time.Instant; import java.util.List; +import java.util.stream.Stream; import javax.inject.Inject; +import org.bson.types.ObjectId; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -40,7 +41,6 @@ import org.junit.jupiter.api.Test; import com.thedeanda.lorem.LoremIpsum; import de.itvsh.kop.user.common.MongoDbTestProfile; -import de.itvsh.kop.user.settings.UserSettings; import io.quarkus.test.junit.QuarkusTest; import io.quarkus.test.junit.TestProfile; @@ -51,25 +51,11 @@ class UserRepositoryITCase { @Inject UserRepository repository; - private User user1; - private User user2; - - @BeforeEach - void init() { - repository.deleteAll(); - user1 = UserTestFactory.create(); - repository.persist(user1); - - user2 = UserTestFactory.createBuilder().externalId("unknown").build(); - repository.persist(user2); - user2 = user2.toBuilder().externalId(null).build(); - } - @DisplayName("Update unsynced users") @Nested class TestUpdateUnsyncedUser { - private long lastSyncTimestamp = Instant.now().toEpochMilli(); + private static final long NOW = Instant.now().toEpochMilli(); @BeforeEach void init() { @@ -78,18 +64,18 @@ class UserRepositoryITCase { @Test void shouldMarkUnsyncedUserAsDeleted() { - repository.persist(createUserWithLastSyncTimestamp(lastSyncTimestamp - 1000)); + repository.persist(createUserWithLastSyncTimestamp(NOW - 1000)); - repository.updateUnsyncedUsers(lastSyncTimestamp); + repository.updateUnsyncedUsers(NOW); assertThat(getFirstUser().isDeleted()).isTrue(); } @Test void shouldNotMarkUserIfSynced() { - repository.persist(createUserWithLastSyncTimestamp(lastSyncTimestamp)); + repository.persist(createUserWithLastSyncTimestamp(NOW)); - repository.updateUnsyncedUsers(lastSyncTimestamp); + repository.updateUnsyncedUsers(NOW); assertThat(getFirstUser().isDeleted()).isFalse(); } @@ -99,215 +85,241 @@ class UserRepositoryITCase { } private User getFirstUser() { - var allUser = repository.findAll(); - return allUser.list().get(0); + return repository.findAll().list().get(0); } } - @DisplayName("Find Users") + @DisplayName("Find all active user") @Nested - class TestFindUsers { - - private static final int LIMIT_5 = 5; + class TestFindAllActiveUser { @BeforeEach void init() { repository.deleteAll(); - repository.persist(UserTestFactory.createBuilder().email(LoremIpsum.getInstance().getEmail()).externalId("additional-id").build()); - user1 = UserTestFactory.create(); - repository.persist(user1); + repository.persist(UserTestFactory.create()); } @Test void shouldFindByLastName() { - var res = repository.findUsers(UserTestFactory.LAST_NAME, false, LIMIT_5); + var user = findAllActiveUser(UserTestFactory.LAST_NAME); - assertThat(res).isNotEmpty().hasSize(2); + assertThat(user).isNotEmpty().hasSize(1); + } + + @Test + void shouldFindCaseInsensitive() { + var user = findAllActiveUser(UserTestFactory.LAST_NAME.toLowerCase()); + + assertThat(user).isNotEmpty().hasSize(1); } @Test void shouldFindByFirstName() { - var res = repository.findUsers(UserTestFactory.FIRST_NAME, false, LIMIT_5); + var user = findAllActiveUser(UserTestFactory.FIRST_NAME); - assertThat(res).isNotEmpty().hasSize(2); + assertThat(user).isNotEmpty().hasSize(1); } @Test void shouldFindByUsername() { - var res = repository.findUsers(UserTestFactory.USER_NAME, false, LIMIT_5); + var user = findAllActiveUser(UserTestFactory.USER_NAME); - assertThat(res).isNotEmpty().hasSize(2); + assertThat(user).isNotEmpty().hasSize(1); } @Test void shouldFindByUsernamePart() { - var res = repository.findUsers(UserTestFactory.USER_NAME.substring(0, 4), false, LIMIT_5); + var user = findAllActiveUser(UserTestFactory.USER_NAME.substring(0, 4)); - assertThat(res).isNotEmpty().hasSize(2); + assertThat(user).isNotEmpty().hasSize(1); } @Test void shouldFindByEmail() { - var res = repository.findUsers(UserTestFactory.EMAIL, false, LIMIT_5); + var user = findAllActiveUser(UserTestFactory.EMAIL); - assertThat(res).isNotEmpty().hasSize(1); + assertThat(user).isNotEmpty().hasSize(1); } @Test - void shouldNotFind() { - var res = repository.findUsers("xxx", false, 5); - assertThat(res).isEmpty(); + void shouldReturnEmptyListIfNotMatch() { + var user = findAllActiveUser("xxx"); + + assertThat(user).isEmpty(); } - @Test - void shouldFindCaseInsensitive() { - var res = repository.findUsers(UserTestFactory.LAST_NAME.toLowerCase(), false, LIMIT_5); - assertThat(res).isNotEmpty().hasSize(2); + private Stream<User> findAllActiveUser(String query) { + return repository.findUsers(query, false, 5); } @Test - void shouldFindByExternalId() { - var res = repository.findByExternalId(user1.getExternalId()); + void shouldFindNotDeletedUsers() { + User user1 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Max").deleted(true).build(); + User user2 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximilian").deleted(true).build(); + User user3 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximus").deleted(false).build(); - assertThat(res).isPresent(); - assertThat(res.get().getExternalId()).isEqualTo(user1.getExternalId()); - } + repository.persist(user1); + repository.persist(user2); + repository.persist(user3); - @Test - void shouldFindById() { - var res = repository.findById(user1.getId()); + var foundUsers = findAllActiveUser("Max").toList(); - assertThat(res).isNotNull(); - assertThat(res.getId()).isEqualTo(user1.getId()); + foundUsers.forEach(u -> assertThat(u.isDeleted()).isFalse()); } @Test - void shouldFindByEmailOnly() { - var res = repository.findByEmail(user1.getEmail()); + void shouldUseLimit() { + repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).build()); - assertThat(res).isPresent(); - assertThat(res.get().getExternalId()).isEqualTo(user1.getExternalId()); + var res = repository.findUsers(UserTestFactory.LAST_NAME.toLowerCase(), false, 2); + assertThat(res).isNotEmpty().hasSize(2); } + } - @Test - void shouldNotFindByEmptyEmail() { - var res = repository.findByEmail(null); + @DisplayName("Find all") + @Nested + class TestFindAll { - assertThat(res).isEmpty(); + @BeforeEach + void init() { + repository.deleteAll(); + repository.persist(UserTestFactory.createBuilder().id(new ObjectId()).email(LoremIpsum.getInstance().getEmail()) + .externalId("additional-id").build()); + repository.persist(UserTestFactory.create()); } @Test - void shouldFindDeletedUsers() { - User user1 = UserTestFactory.createBuilder().firstName("Max").deleted(true).build(); - User user2 = UserTestFactory.createBuilder().firstName("Maximilian").deleted(true).build(); - User user3 = UserTestFactory.createBuilder().firstName("Maximus").deleted(false).build(); + void shouldFindDeletedAndNotDeletedUsers() { + User user1 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Max").deleted(true).build(); + User user2 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximilian").deleted(true).build(); + User user3 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximus").deleted(false).build(); repository.persist(user1); repository.persist(user2); repository.persist(user3); - var foundUsers = repository.findUsers("Max", true, 10).toList(); + var foundUsers = repository.findUsers("Max", 10).toList(); - assertThat(foundUsers).hasSize(2); - foundUsers.forEach(u -> assertThat(u.isDeleted()).isTrue()); + assertThat(foundUsers).hasSizeGreaterThan(2); + List<User> startWithMax = foundUsers.stream().filter(u -> u.getFirstName().startsWith("Max")).toList(); + assertThat(startWithMax).hasSize(3); + assertThat(startWithMax.stream().filter(User::isDeleted).count()).isEqualTo(2); + assertThat(startWithMax.stream().filter(not(User::isDeleted)).count()).isEqualTo(1); } + } - @Test - void shouldFindNotDeletedUsers() { - User user1 = UserTestFactory.createBuilder().firstName("Max").deleted(true).build(); - User user2 = UserTestFactory.createBuilder().firstName("Maximilian").deleted(true).build(); - User user3 = UserTestFactory.createBuilder().firstName("Maximus").deleted(false).build(); + @DisplayName("Find all inactive user") + @Nested + class TestFindAllInactiveUser { + @BeforeEach + void init() { + repository.deleteAll(); + User user1 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Max").deleted(true).build(); + User user2 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximilian").deleted(true).build(); + User user3 = UserTestFactory.createBuilder().id(new ObjectId()).firstName("Maximus").deleted(false).build(); repository.persist(user1); repository.persist(user2); repository.persist(user3); - - var foundUsers = repository.findUsers("Max", false, 10).toList(); - - foundUsers.forEach(u -> assertThat(u.isDeleted()).isFalse()); } @Test - void shouldFindDeletedAndNotDeletedUsers() { - User user1 = UserTestFactory.createBuilder().firstName("Max").deleted(true).build(); - User user2 = UserTestFactory.createBuilder().firstName("Maximilian").deleted(true).build(); - User user3 = UserTestFactory.createBuilder().firstName("Maximus").deleted(false).build(); + void shouldFindDeletedUsers() { + var foundUsers = repository.findUsers("Max", true, 10).toList(); - repository.persist(user1); - repository.persist(user2); - repository.persist(user3); + assertThat(foundUsers).hasSize(2); + foundUsers.forEach(u -> assertThat(u.isDeleted()).isTrue()); + } - var foundUsers = repository.findUsers("Max", 10).toList(); + } - assertThat(foundUsers).hasSizeGreaterThan(2); - List<User> startWithMax = foundUsers.stream().filter(u -> u.getFirstName().startsWith("Max")).toList(); - assertThat(startWithMax.size()).isEqualTo(3); - assertThat(startWithMax.stream().filter(User::isDeleted).count()).isEqualTo(2); - assertThat(startWithMax.stream().filter(not(User::isDeleted)).count()).isEqualTo(1); + @DisplayName("Find by externalId") + @Nested + class TestFindByExternalId { + + @BeforeEach + void init() { + repository.deleteAll(); + repository.persist(UserTestFactory.create()); } @Test - void shouldFindByOrganisationeinheitIdAndNotificatinoActivated() { - var recipientUser = UserTestFactory.createBuilder().userSettings(new UserSettings(ALL)).build(); - var notRecipientUser = UserTestFactory.createBuilder().organisationsEinheitIds(List.of("a")).build(); - repository.persist(List.of(notRecipientUser, recipientUser)); + void shouldFindByExternalId() { + var user = repository.findByExternalId(UserTestFactory.EXTERNAL_ID); - var users = repository.findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + assertThat(user).isPresent(); + assertThat(user.get()).usingRecursiveComparison().isEqualTo(UserTestFactory.create()); + } + } + + @DisplayName("Find by id") + @Nested + class TestFindById { - assertThat(users).hasSize(1); - assertThat(users.get(0).getOrganisationsEinheitIds()).contains(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + @BeforeEach + void init() { + repository.deleteAll(); + repository.persist(UserTestFactory.create()); } @Test - void shouldUseLimit() { - repository.persist(UserTestFactory.create()); + void shouldFindById() { + var user = repository.findById(UserTestFactory.ID_STR); - var res = repository.findUsers(UserTestFactory.LAST_NAME.toLowerCase(), false, 2); - assertThat(res).isNotEmpty().hasSize(2); + assertThat(user).isNotNull(); + assertThat(user.get()).usingRecursiveComparison().isEqualTo(UserTestFactory.create()); } } - @DisplayName("Test refreshing user") + @DisplayName("Find by email") @Nested - class TestRefresh { + class TestFindByEmail { + + @BeforeEach + void init() { + repository.deleteAll(); + repository.persist(UserTestFactory.create()); + } + @Test - void shouldRefreshByExternalId() { - var user = repository.refresh(user1.toBuilder().id(null).build()); + void shouldFindByEmailOnly() { + var user = repository.findByEmail(UserTestFactory.EMAIL); - assertThat(user).isNotNull().hasFieldOrPropertyWithValue("id", user1.getId()); + assertThat(user).isPresent(); + assertThat(user.get()).usingRecursiveComparison().isEqualTo(UserTestFactory.create()); } @Test - void shouldRefreshById() { - var user = repository.refresh(user1); + void shouldNotFindByEmptyEmail() { + var user = repository.findByEmail(null); - assertThat(user).isNotNull().hasFieldOrPropertyWithValue("id", user1.getId()); + assertThat(user).isEmpty(); } + } - @DisplayName("Test for empty result list ") + @DisplayName("Test refreshing user") @Nested - class TestReturnEmptyList { - @Test - void whenIdNotFound() { - var recipientUser = UserTestFactory.createBuilder().userSettings(new UserSettings(ALL)).build(); - repository.persist(recipientUser); - var users = repository.findRecipientByOrganisationsEinheitId("some_id"); - assertThat(users).isEmpty(); + class TestRefresh { + + @BeforeEach + void init() { + repository.deleteAll(); + repository.persist(UserTestFactory.create()); } @Test - void whenNotificationDeactivated() { + void shouldRefreshByExternalId() { + var user = repository.refresh(UserTestFactory.createBuilder().id(null).build()); - var users = repository.findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); - assertThat(users).isEmpty(); + assertThat(user).usingRecursiveComparison().ignoringFields("id").isEqualTo(UserTestFactory.create()); } @Test - void shouldReturnEmptyListNotificationDeactivated() { - var users = repository.findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + void shouldRefreshById() { + var user = repository.refresh(UserTestFactory.create()); - assertThat(users).isEmpty(); + assertThat(user).usingRecursiveComparison().ignoringFields("id").isEqualTo(UserTestFactory.create()); } } -} +} \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserResourceMapperTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserResourceMapperTest.java index b863d0bf77774efe7e1c6cb8d82ea85543d7b921..0b03b88eccc01b2390f7fab1669b5397bbf3d48f 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserResourceMapperTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserResourceMapperTest.java @@ -39,7 +39,6 @@ import org.keycloak.admin.client.resource.RoleMappingResource; import org.keycloak.admin.client.resource.RoleScopeResource; import org.keycloak.admin.client.resource.UserResource; import org.keycloak.representations.idm.ClientMappingsRepresentation; -import org.keycloak.representations.idm.GroupRepresentation; import org.keycloak.representations.idm.MappingsRepresentation; import org.keycloak.representations.idm.RoleRepresentation; import org.mapstruct.factory.Mappers; @@ -49,6 +48,7 @@ import org.mockito.Mock; import de.itvsh.kop.user.keycloak.KeycloakApiProperties; class UserResourceMapperTest { + static final String ORGANISATIONS_EINHEIT_ID_KEY = "organisationseinheitId"; static final String ORGANISATIONS_EINHEIT_ID_1 = "0815"; static final String ORGANISATIONS_EINHEIT_ID_2 = "4711"; @@ -59,16 +59,17 @@ class UserResourceMapperTest { static final Map<String, List<String>> ATTRIBUTES_2 = Map.of(ORGANISATIONS_EINHEIT_ID_KEY, List.of(ORGANISATIONS_EINHEIT_ID_2)); @InjectMocks - private UserResourceMapper mapper = Mappers.getMapper(UserResourceMapper.class); + UserResourceMapper mapper = Mappers.getMapper(UserResourceMapper.class); @Mock - private KeycloakApiProperties properties; + KeycloakApiProperties properties; @Mock - private RealmResource realm; + RealmResource realm; + @DisplayName("To kop user") @Nested - class TestMapping { + class TestToKopUser { @BeforeEach void init() { @@ -84,80 +85,96 @@ class UserResourceMapperTest { @Test void shouldMapToUser() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + var user = toKopUser(); assertThat(user).isNotNull(); } @Test void shouldMapEmail() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + var user = toKopUser(); assertThat(user.getEmail()).isEqualTo(UserRepresentationTestFactory.EMAIL); } - @Test - void shouldMapExternalId() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + @DisplayName("externalId") + @Nested + class TestMapExternalId { - assertThat(user.getExternalId()).isEqualTo(UserRepresentationTestFactory.EXTERNAL_ID); - } + @Test + void shouldMap() { + var user = toKopUser(); - @Test - void shouldMapExternalIdFallback() { - User user = mapper.toKopUser(UserResourceTestFactory.createWithAttributes(Map.of())); + assertThat(user.getExternalId()).isEqualTo(UserRepresentationTestFactory.EXTERNAL_ID); + } + + @Test + void shouldMapFallbackOnEmptyAttributes() { + var user = toKopUser(UserResourceTestFactory.createWithAttributes(Collections.emptyMap())); - assertThat(user.getExternalId()).isEqualTo(UserRepresentationTestFactory.EXTERNAL_ID_FALLBACK); + assertThat(user.getExternalId()).isEqualTo(UserRepresentationTestFactory.EXTERNAL_ID_FALLBACK); + } } @Test void shouldMapFirstName() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + var user = toKopUser(); assertThat(user.getFirstName()).isEqualTo(UserRepresentationTestFactory.FIRST_NAME); } @Test void shouldMapLastName() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + var user = toKopUser(); assertThat(user.getLastName()).isEqualTo(UserRepresentationTestFactory.LAST_NAME); } @Test void shouldMapUserName() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + var user = toKopUser(); assertThat(user.getUsername()).isEqualTo(UserRepresentationTestFactory.USER_NAME); } @Test void shouldMapOrganisationsEinheitIds() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + var user = toKopUser(); assertThat(user.getOrganisationsEinheitIds()).isNotEmpty().contains(ORGANISATIONS_EINHEIT_ID_1); } @Test void shouldMapMultipleOrganisationsEinheitIds() { - GroupRepresentation groupRepresentation = GroupRepresentationTestFactory.createByPathAndOrganisationEinheitId(GROUP_2_PATH, + var groupRepresentation = GroupRepresentationTestFactory.createByPathAndOrganisationEinheitId(GROUP_2_PATH, ORGANISATIONS_EINHEIT_ID_2); - when(realm.getGroupByPath(GROUP_2_PATH)).thenReturn(groupRepresentation); - User user = mapper.toKopUser( - UserResourceTestFactory.createWithGroups(List.of(GroupRepresentationTestFactory.createGroup(UserResourceMapperTest.GROUP_1_PATH), - GroupRepresentationTestFactory.createGroup(UserResourceMapperTest.GROUP_2_PATH)))); + var user = toKopUser(buildUserResourceWithGroups()); assertThat(user.getOrganisationsEinheitIds()).isNotEmpty().hasSize(2).contains(ORGANISATIONS_EINHEIT_ID_2); } + private UserResource buildUserResourceWithGroups() { + return UserResourceTestFactory.createWithGroups(List.of( + GroupRepresentationTestFactory.createGroup(UserResourceMapperTest.GROUP_1_PATH), + GroupRepresentationTestFactory.createGroup(UserResourceMapperTest.GROUP_2_PATH))); + } + @Test void shouldMapRoles() { - User user = mapper.toKopUser(UserResourceTestFactory.create()); + var user = toKopUser(); assertThat(user.getRoles()).isNotEmpty().contains(UserRepresentationTestFactory.ROLE_NAME); } + + private User toKopUser() { + return toKopUser(UserResourceTestFactory.create()); + } + + private User toKopUser(UserResource userResource) { + return mapper.toKopUser(userResource); + } } @DisplayName("Get client roles") @@ -165,18 +182,18 @@ class UserResourceMapperTest { class TestGetClientRoles { @Mock - private UserResource userResource; + UserResource userResource; @Mock - private RoleMappingResource roleMappingResource; + RoleMappingResource roleMappingResource; @Mock - private RoleScopeResource roleScopeResource; + RoleScopeResource roleScopeResource; @Mock - private MappingsRepresentation mappingsRepresentation; + MappingsRepresentation mappingsRepresentation; @Mock - private Map<String, ClientMappingsRepresentation> clientMappingsRepresentation; + Map<String, ClientMappingsRepresentation> clientMappingsRepresentation; @Mock - private ClientMappingsRepresentation clientMappingRepresentation; + ClientMappingsRepresentation clientMappingRepresentation; @BeforeEach void init() { 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 7bf81cd55b2ab07e26b19473a2fd192a87c41a8e..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 @@ -23,6 +23,7 @@ */ package de.itvsh.kop.user; +import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -39,6 +40,7 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; +import de.itvsh.kop.user.common.errorhandling.ResourceNotFoundException; import de.itvsh.kop.user.keycloak.KeycloakUserRemoteService; class UserServiceTest { @@ -50,26 +52,64 @@ class UserServiceTest { @Mock KeycloakUserRemoteService keycloakRemoteService; - @DisplayName("Find by id") + @DisplayName("Get by id") @Nested - class TestFindById { + class TestGetById { - @Test - void shouldFindByIdOnInternalId() { - when(repository.findById(anyString())).thenReturn(Optional.of(UserTestFactory.create())); + @DisplayName("on UUID pattern") + @Nested + class TestByUUID { + + private final static String ID = UUID.randomUUID().toString(); + + @BeforeEach + void mockRepository() { + when(repository.findByExternalId(any())).thenReturn(Optional.of(UserTestFactory.create())); + } + + @Test + void shouldCallRepository() { + service.getById(ID); + + verify(repository).findByExternalId(anyString()); + } - service.getById("xxx"); + @Test + void shouldThrowExceptionIfNotExists() { + when(repository.findByExternalId(anyString())).thenReturn(Optional.empty()); - verify(repository).findById(anyString()); + assertThatThrownBy(() -> service.getById(ID)) + .isInstanceOf(ResourceNotFoundException.class) + .extracting(e -> ((ResourceNotFoundException) e).getId()).isEqualTo(ID); + } } - @Test - void shouldFindByExternalIdOnUUID() { - when(repository.findByExternalId(any())).thenReturn(Optional.of(UserTestFactory.create())); + @DisplayName("on other") + @Nested + class TestByOther { + + private final static String ID = "xxx"; + + @BeforeEach + void mockRepository() { + when(repository.findById(anyString())).thenReturn(Optional.of(UserTestFactory.create())); + } + + @Test + void shouldCallRepository() { + service.getById(ID); - service.getById(UUID.randomUUID().toString()); + verify(repository).findById(anyString()); + } - verify(repository).findByExternalId(anyString()); + @Test + void shouldThrowExceptionIfNotExists() { + when(repository.findById(anyString())).thenReturn(Optional.empty()); + + assertThatThrownBy(() -> service.getById(ID)) + .isInstanceOf(ResourceNotFoundException.class) + .extracting(e -> ((ResourceNotFoundException) e).getId()).isEqualTo(ID); + } } } @@ -81,7 +121,7 @@ class UserServiceTest { @BeforeEach void init() { - when(repository.refresh(any())).thenReturn(UserTestFactory.createWithId()); + when(repository.refresh(any())).thenReturn(UserTestFactory.create()); } @Test @@ -136,18 +176,6 @@ class UserServiceTest { } } - @DisplayName("Find recipient by organisationsEinheitId") - @Nested - class TestFindRecipientByOrganisationsEinheitId { - - @Test - void shouldCallRepository() { - service.findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); - - verify(repository).findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); - } - } - @DisplayName("Search users") @Nested class TestUserSearch { diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/UserTestFactory.java b/user-manager-server/src/test/java/de/itvsh/kop/user/UserTestFactory.java index d225445ae74234a30f3d37f86ca2e65b4078f3c0..1edc18d419c726140318ebaefe2dbd5d1a45b48d 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/UserTestFactory.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/UserTestFactory.java @@ -30,11 +30,13 @@ import org.bson.types.ObjectId; import com.thedeanda.lorem.LoremIpsum; -import de.itvsh.kop.user.settings.UserSettings; import de.itvsh.kop.user.settings.UserSettingsTestFactory; public class UserTestFactory { + public static final ObjectId ID = new ObjectId(); + public static final String ID_STR = ID.toHexString(); + public static final String FIRST_NAME = LoremIpsum.getInstance().getFirstName(); public static final String LAST_NAME = LoremIpsum.getInstance().getLastName(); public static final String USER_NAME = LoremIpsum.getInstance().getName(); @@ -43,20 +45,14 @@ public class UserTestFactory { public static final String EXTERNAL_ID = UUID.randomUUID().toString(); public static final String ORGANISTATIONSEINHEITEN_ID = "0815"; public static final List<String> ROLES = List.of("ROLE_1", "POSTSTELLE"); - public static final ObjectId ID = new ObjectId(); - public static final UserSettings USER_SETTINGS = UserSettingsTestFactory.create(); public static User create() { return createBuilder().build(); } - public static User createWithId() { - return createBuilder().id(ID).build(); - } - public static User.UserBuilder createBuilder() { return User.builder() - .id(new ObjectId()) + .id(ID) .firstName(FIRST_NAME) .lastName(LAST_NAME) .username(USER_NAME) @@ -65,6 +61,6 @@ public class UserTestFactory { .externalId(EXTERNAL_ID) .organisationsEinheitId(ORGANISTATIONSEINHEITEN_ID) .roles(ROLES) - .userSettings(USER_SETTINGS); + .userSettings(UserSettingsTestFactory.create()); } } diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/common/callcontext/CallContextInterceptorTestFactory.java b/user-manager-server/src/test/java/de/itvsh/kop/user/common/callcontext/CallContextInterceptorTestFactory.java index cbf6e909cede9dfe66d9112d2fb8fa4d24db1759..742e54756a126162359507c8bbe8d8ef673683b0 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/common/callcontext/CallContextInterceptorTestFactory.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/common/callcontext/CallContextInterceptorTestFactory.java @@ -33,8 +33,7 @@ public class CallContextInterceptorTestFactory { @Override public void start(Listener<RespT> responseListener, Metadata headers) { - var metadata = new Metadata(); - headers.merge(metadata); + headers.merge(new Metadata()); super.start(responseListener, headers); } diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/common/errorhandling/ApiErrorUtilTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/common/errorhandling/ApiErrorUtilTest.java index 0f3583495f45be250f719bab29375e174d020cd7..b6a67a5f36cb1d329da467d7301d2c93ae0089c5 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/common/errorhandling/ApiErrorUtilTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/common/errorhandling/ApiErrorUtilTest.java @@ -201,4 +201,11 @@ class ApiErrorUtilTest { return util.buildFromKeycloakUnavailableException(exception); } } + + @Test + void shouldCreateExceptionId() { + var exceptionId = util.createExceptionId(); + + assertThat(exceptionId).isNotNull(); + } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java index 4003592a8dd8560feb97c96ae1455fff115ea184..152a2fe30d3bec4e423dbe12aaa155dc1edd9192 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/keycloak/KeycloakApiServiceTest.java @@ -23,11 +23,16 @@ */ package de.itvsh.kop.user.keycloak; +import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.function.Supplier; import java.util.stream.Stream; +import javax.ws.rs.ClientErrorException; +import javax.ws.rs.ProcessingException; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -45,6 +50,7 @@ import de.itvsh.kop.user.User; import de.itvsh.kop.user.UserRepresentationTestFactory; import de.itvsh.kop.user.UserResourceMapper; import de.itvsh.kop.user.UserTestFactory; +import de.itvsh.kop.user.common.errorhandling.KeycloakUnavailableException; class KeycloakApiServiceTest { @@ -98,4 +104,34 @@ class KeycloakApiServiceTest { verify(userResourceMapper).toKopUser(any(UserResource.class)); } } + + @DisplayName("handling keycloak exception") + @Nested + class TestHandlingKeycloakException { + + @Test + void shouldThrowOnClientErrorException() { + assertThatThrownBy(() -> handlingKeyCloakException(() -> { + throw new ClientErrorException(403); + })).isInstanceOf(KeycloakUnavailableException.class); + } + + @Test + void shouldThrowOnProcessingException() { + assertThatThrownBy(() -> handlingKeyCloakException(() -> { + throw new ProcessingException(new RuntimeException()); + })).isInstanceOf(KeycloakUnavailableException.class); + } + + @Test + void shouldThrowIllegalStateException() { + assertThatThrownBy(() -> handlingKeyCloakException(() -> { + throw new IllegalStateException(new RuntimeException()); + })).isInstanceOf(KeycloakUnavailableException.class); + } + + private <T> T handlingKeyCloakException(Supplier<T> runnable) { + return service.handlingKeycloakException(runnable); + } + } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientGrpcServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientGrpcServiceTest.java index 360abd0df1e5cc822478891d557517d42205975c..ed3567f9d1be37e8d8990febdec4be4d0700acc9 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientGrpcServiceTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientGrpcServiceTest.java @@ -62,11 +62,11 @@ class RecipientGrpcServiceTest { @Test void shouldGetUsersFromRepository() { - when(recipientService.findRecipientByOrganisationsEinheitId(any())).thenReturn(List.of(UserTestFactory.create())); + when(recipientService.findByOrganisationsEinheitId(any())).thenReturn(List.of(UserTestFactory.create())); recipientGrpcService.findRecipientByOrganisationsEinheitId(RecipientTestFactory.FIND_REQUEST, streamObserver); - verify(recipientService).findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + verify(recipientService).findByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); } } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientMapperTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientMapperTest.java index 721c12a4f697c95b9dbaa14a5ee10dc9253d8bba..c360d315f56294fe98d1b74da17d6a1ede222719 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientMapperTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientMapperTest.java @@ -26,6 +26,7 @@ package de.itvsh.kop.user.recipient; import static org.assertj.core.api.Assertions.*; import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -68,5 +69,10 @@ class RecipientMapperTest { assertThat(recipient.getEmail()).isEqualTo(StringUtils.EMPTY); } + + @Test + void shouldNotThrowExceptionOnNull() { + Assertions.assertDoesNotThrow(() -> mapper.toRecipient(null)); + } } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientRepositoryITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientRepositoryITCase.java new file mode 100644 index 0000000000000000000000000000000000000000..34f8f13b572b828b4de160898f6d9757d72785b8 --- /dev/null +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientRepositoryITCase.java @@ -0,0 +1,104 @@ +package de.itvsh.kop.user.recipient; + +import static de.itvsh.kop.user.settings.NotificationsSendFor.*; +import static org.assertj.core.api.Assertions.*; + +import javax.inject.Inject; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.EnumSource.Mode; + +import de.itvsh.kop.user.User; +import de.itvsh.kop.user.UserTestFactory; +import de.itvsh.kop.user.common.MongoDbTestProfile; +import de.itvsh.kop.user.settings.NotificationsSendFor; +import de.itvsh.kop.user.settings.UserSettingsTestFactory; +import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit.TestProfile; + +@QuarkusTest +@TestProfile(MongoDbTestProfile.class) +class RecipientRepositoryITCase { + + @Inject + RecipientRepository repository; + + @DisplayName("Find by organisationsEinheitId") + @Nested + class TestFindByOrganisationsEinheitId { + + @BeforeEach + void clearDb() { + repository.deleteAll(); + } + + @DisplayName("with given organisationsEinheitId") + @Nested + class TestWithGivenOrganisationsEinheitId { + + private static final User USER_NOTIFICATION_SEND_FOR_ALL = UserTestFactory.createBuilder().userSettings( + UserSettingsTestFactory.createBuilder().notificationsSendFor(ALL).build()) + .build(); + + @Test + void shouldReturnOnMatch() { + persist(USER_NOTIFICATION_SEND_FOR_ALL); + + var userList = repository.findByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + + assertThat(userList).hasSize(1); + assertThat(userList.get(0)).usingRecursiveComparison().isEqualTo(USER_NOTIFICATION_SEND_FOR_ALL); + } + + @Test + void shouldReturnEmptyListOnNonMatch() { + persist(USER_NOTIFICATION_SEND_FOR_ALL); + + var userList = repository.findByOrganisationsEinheitId("nonMatch"); + + assertThat(userList).isEmpty(); + } + } + + @DisplayName("by notificationSendFor") + @Nested + class TestByNotificationSendFor { + + private static final User USER_NOTIFICATION_SEND_FOR_ALL = UserTestFactory.createBuilder().userSettings( + UserSettingsTestFactory.createBuilder().notificationsSendFor(ALL).build()) + .build(); + + @Test + void shouldReturnOnAll() { + persist(USER_NOTIFICATION_SEND_FOR_ALL); + + var userList = repository.findByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + + assertThat(userList).hasSize(1); + assertThat(userList.get(0)).usingRecursiveComparison().isEqualTo(USER_NOTIFICATION_SEND_FOR_ALL); + } + + @ParameterizedTest + @EnumSource(mode = Mode.EXCLUDE, names = { "ALL" }) + void shouldNotReturnOn(NotificationsSendFor sendFor) { + var user = UserTestFactory.createBuilder().userSettings( + UserSettingsTestFactory.createBuilder().notificationsSendFor(sendFor).build()) + .build(); + persist(user); + + var userList = repository.findByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + + assertThat(userList).isEmpty(); + } + } + + private void persist(User user) { + repository.persist(user); + } + } +} \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientServiceTest.java index e5a37bbed38e58de0d59d7ec4dc976d22b496d0c..dc816a3b4eb510e57a12fbaa8447b13d580718a9 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientServiceTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/recipient/RecipientServiceTest.java @@ -34,7 +34,6 @@ import org.mockito.Mock; import com.cronutils.utils.StringUtils; -import de.itvsh.kop.user.UserService; import de.itvsh.kop.user.UserTestFactory; import de.itvsh.kop.user.common.errorhandling.FunctionalException; @@ -43,11 +42,11 @@ class RecipientServiceTest { @InjectMocks RecipientService service; @Mock - UserService userService; + RecipientRepository repository; - @DisplayName("Find recipient by organisationsEinheitId") + @DisplayName("Find by organisationsEinheitId") @Nested - class TestFindRecipientByOrganisationsEinheitId { + class TestFindByOrganisationsEinheitId { private static final String EXPECTED_EXCEPTION_MESSAGE_TEMPLATE = "Functional error: " + RecipientService.MISSING_ORGANISATIONS_EINHEIT_ID_MESSAGE_TEMPLATE; @@ -57,7 +56,7 @@ class RecipientServiceTest { var expectedMessage = String.format(EXPECTED_EXCEPTION_MESSAGE_TEMPLATE, "null"); assertThatExceptionOfType(FunctionalException.class) - .isThrownBy(() -> service.findRecipientByOrganisationsEinheitId(null)) + .isThrownBy(() -> service.findByOrganisationsEinheitId(null)) .withMessageStartingWith(expectedMessage); } @@ -66,15 +65,15 @@ class RecipientServiceTest { var expectedMessage = String.format(EXPECTED_EXCEPTION_MESSAGE_TEMPLATE, StringUtils.EMPTY); assertThatExceptionOfType(FunctionalException.class) - .isThrownBy(() -> service.findRecipientByOrganisationsEinheitId(StringUtils.EMPTY)) + .isThrownBy(() -> service.findByOrganisationsEinheitId(StringUtils.EMPTY)) .withMessageStartingWith(expectedMessage); } @Test - void shouldCallUserService() { - service.findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + void shouldCallRepository() { + service.findByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); - verify(userService).findRecipientByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); + verify(repository).findByOrganisationsEinheitId(UserTestFactory.ORGANISTATIONSEINHEITEN_ID); } } } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceITCase.java b/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceITCase.java index cfdca8926e8cbdbfadeef46af0ae5bf5f64d1b72..d4a77869e5499e84b3230dc42e5e9a8d167c36e7 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceITCase.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceITCase.java @@ -55,7 +55,7 @@ class UserSettingsServiceITCase { void fillDatabase() { repository.deleteAll(); - repository.persist(UserTestFactory.createWithId().toBuilder() + repository.persist(UserTestFactory.create().toBuilder() .userSettings(UserSettingsTestFactory.create()) .build()); } diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceTest.java index 48a873ab8f6aa326de0ae92648e450a15af2f687..7c7e7c2b1dfdaee7997f9aaeec56fd2176900727 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/settings/UserSettingsServiceTest.java @@ -103,7 +103,7 @@ class UserSettingsServiceTest { @BeforeEach void mockUserService() { when(userService.getById(anyString())) - .thenReturn(UserTestFactory.createBuilder().userSettings(UserSettingsTestFactory.create()).build()); + .thenReturn(UserTestFactory.createBuilder().userSettings(null).build()); } @Test diff --git a/user-manager-server/src/test/java/de/itvsh/kop/user/userprofile/UserProfileMapperTest.java b/user-manager-server/src/test/java/de/itvsh/kop/user/userprofile/UserProfileMapperTest.java index 90610c8fb89e989d6e53233b3ce78e28a10241da..9e79187d6e359fde9b51642bfa6219b10239ec8e 100644 --- a/user-manager-server/src/test/java/de/itvsh/kop/user/userprofile/UserProfileMapperTest.java +++ b/user-manager-server/src/test/java/de/itvsh/kop/user/userprofile/UserProfileMapperTest.java @@ -64,7 +64,7 @@ class UserProfileMapperTest { } private GrpcUserProfile map() { - return mapper.mapTo(UserTestFactory.createWithId()); + return mapper.mapTo(UserTestFactory.create()); } @Test