diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java b/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java index 75bd03fd37279a22afefab4779655924ae1c3833..d34077851774bb8b05585408b01ba2dab79e8af7 100644 --- a/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java +++ b/user-manager-server/src/test/java/de/ozgcloud/user/keycloak/KeycloakUserRemoteServiceITCase.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den + * Copyright (c) 2024. Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung @@ -23,21 +23,36 @@ */ package de.ozgcloud.user.keycloak; +import static de.ozgcloud.user.keycloak.KeycloakUserRemoteService.*; +import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; +import java.util.List; + +import jakarta.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 org.keycloak.admin.client.resource.RealmResource; -import io.quarkus.test.InjectMock; +import de.ozgcloud.user.User; +import de.ozgcloud.user.UserTestFactory; import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit.TestProfile; import io.quarkus.test.junit.mockito.InjectSpy; @QuarkusTest +@TestProfile(KeycloakTestProfile.class) class KeycloakUserRemoteServiceITCase { @InjectSpy KeycloakUserRemoteService service; - @InjectMock + @InjectSpy KeycloakApiService apiService; + @Inject + RealmResource realmResource; @Test void shouldCallGetAllUsers() { @@ -45,4 +60,43 @@ class KeycloakUserRemoteServiceITCase { verify(apiService).findAllUser(); } + + @Nested + class TestUpdateOzgCloudUserId { + + private static final String KEYCLOAK_USER_ID = "90748555-7894-4854-8292-1f6106826962"; + + @DisplayName("Update ozgCloudUserId attribute in keycloak") + @Test + void shouldUpdateOzgCloudUserId() { + User user = prepareUser(); + service.updateOzgCloudUserId(user); + + var ozgCloudUserId = getOzgCloudUserIdFromKeycloak(); + + assertThat(user.getId().toString()).isEqualTo(ozgCloudUserId); + } + + private User prepareUser() { + return UserTestFactory.createBuilder() + .id(new ObjectId()) + .externalId(KEYCLOAK_USER_ID) + .keycloakUserId(KEYCLOAK_USER_ID) + .email("testerozg+dorothea@gmail.com") + .firstName("Dorothea") + .lastName("Doe") + .fullName("Dorothea Doe") + .fullNameReversed("Doe Dorothea") + .username("dorothea") + .organisationsEinheitIds(List.of("248240886", "9030229", "10363455")) + .build(); + } + + private String getOzgCloudUserIdFromKeycloak() { + var userResource = realmResource.users().get(KEYCLOAK_USER_ID); + return userResource.toRepresentation().getAttributes().get(ATTRIBUTE_NAME_OZG_CLOUD_USER_ID).getFirst(); + } + + } + } \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/sync/KeycloakMongoDbTestProfile.java b/user-manager-server/src/test/java/de/ozgcloud/user/sync/KeycloakMongoDbTestProfile.java deleted file mode 100644 index 1c6681ca5b28c9c6281df90da61756e8ff784cb5..0000000000000000000000000000000000000000 --- a/user-manager-server/src/test/java/de/ozgcloud/user/sync/KeycloakMongoDbTestProfile.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2024. 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.ozgcloud.user.sync; - -import java.util.Map; - -import io.quarkus.test.junit.QuarkusTestProfile; - -public class KeycloakMongoDbTestProfile implements QuarkusTestProfile { - - @Override - public Map<String, String> getConfigOverrides() { - return Map.of("ozgcloud.keycloak.api.user", "userManagerApiUser", - "ozgcloud.keycloak.api.password", "hlc_j1I1Ji0trC0", - "ozgcloud.keycloak.api.realm", "by-kiel-dev", - "keycloak.url", "https://sso.dev.by.ozg-cloud.de", - "quarkus.mongodb.devservices.enabled", "true", - "quarkus.oidc.auth-server-url", "https://sso.dev.by.ozg-cloud.de" - ); - } - -} \ No newline at end of file diff --git a/user-manager-server/src/test/java/de/ozgcloud/user/sync/SyncOzgCloudIdITCase.java b/user-manager-server/src/test/java/de/ozgcloud/user/sync/SyncOzgCloudIdITCase.java deleted file mode 100644 index f23d91e8374775d161b925bb3377b21113e96272..0000000000000000000000000000000000000000 --- a/user-manager-server/src/test/java/de/ozgcloud/user/sync/SyncOzgCloudIdITCase.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2024. 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.ozgcloud.user.sync; - -import static de.ozgcloud.user.keycloak.KeycloakUserRemoteService.*; -import static org.assertj.core.api.Assertions.*; - -import java.time.Instant; -import java.util.List; - -import jakarta.inject.Inject; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.keycloak.admin.client.resource.RealmResource; - -import com.mongodb.client.MongoClient; - -import de.ozgcloud.user.TestDatabaseUtils; -import de.ozgcloud.user.User; -import de.ozgcloud.user.UserService; -import de.ozgcloud.user.UserTestFactory; -import io.quarkus.test.junit.QuarkusTest; -import io.quarkus.test.junit.TestProfile; - -@QuarkusTest -@TestProfile(KeycloakMongoDbTestProfile.class) -public class SyncOzgCloudIdITCase { - - public static final String KEYCLOAK_USER_ID = "90748555-7894-4854-8292-1f6106826962"; - @Inject - SyncService service; - - @Inject - MongoClient mongoClient; - - @Inject - UserService userService; - - @Inject - RealmResource realmResource; - - private String userIdDb; - - @BeforeEach - void init() { - TestDatabaseUtils.getDatabase(mongoClient).drop(); - - prepareData(); - } - - private void prepareData() { - User user1 = UserTestFactory.createBuilder() - .externalId(KEYCLOAK_USER_ID) - .keycloakUserId(KEYCLOAK_USER_ID) - .email("testerozg+dorothea@gmail.com") - .firstName("Dorothea") - .lastName("Doe") - .fullName("Dorothea Doe") - .fullNameReversed("Doe Dorothea") - .username("dorothea") - .organisationsEinheitIds(List.of("248240886", "9030229", "10363455")) - .build(); - - userIdDb = userService.save(user1).getId().toString(); - } - - @DisplayName("Update ozgCloudUserId attribute in keycloak") - @Test - void shouldUpdateOzgCloudUserId() { - syncUsers(); - - var ozgCloudUserId = getOzgCloudUserIdFromKeycloak(); - - assertThat(userIdDb).isEqualTo(ozgCloudUserId); - } - - private void syncUsers() { - var timestamp = Instant.now().toEpochMilli(); - service.sync(timestamp); - } - - private String getOzgCloudUserIdFromKeycloak() { - var userResource = realmResource.users().get(KEYCLOAK_USER_ID); - return userResource.toRepresentation().getAttributes().get(ATTRIBUTE_NAME_OZG_CLOUD_USER_ID).getFirst(); - } - -}