Skip to content
Snippets Groups Projects
Commit 617776d2 authored by Krzysztof Witukiewicz's avatar Krzysztof Witukiewicz
Browse files

Merge branch 'OZG-7855-remove-saving-ozgclouduserid' into 'main'

Ozg 7855 remove saving ozgclouduserid

See merge request !2
parents 5d88981e 49ed3318
Branches
Tags
1 merge request!2Ozg 7855 remove saving ozgclouduserid
Showing
with 23 additions and 378 deletions
...@@ -27,8 +27,6 @@ import java.util.Objects; ...@@ -27,8 +27,6 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import jakarta.enterprise.context.ApplicationScoped;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import de.ozgcloud.user.common.errorhandling.FunctionalException; import de.ozgcloud.user.common.errorhandling.FunctionalException;
...@@ -37,8 +35,7 @@ import de.ozgcloud.user.common.errorhandling.TechnicalException; ...@@ -37,8 +35,7 @@ import de.ozgcloud.user.common.errorhandling.TechnicalException;
import de.ozgcloud.user.common.logging.OzgCloudLogging; import de.ozgcloud.user.common.logging.OzgCloudLogging;
import de.ozgcloud.user.keycloak.KeycloakUserRemoteService; import de.ozgcloud.user.keycloak.KeycloakUserRemoteService;
import de.ozgcloud.user.settings.UserSettings; import de.ozgcloud.user.settings.UserSettings;
import io.smallrye.mutiny.Uni; import jakarta.enterprise.context.ApplicationScoped;
import io.smallrye.mutiny.infrastructure.Infrastructure;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ApplicationScoped @ApplicationScoped
...@@ -120,17 +117,7 @@ public class UserService { ...@@ -120,17 +117,7 @@ public class UserService {
} }
private Optional<User> findInKeycloakAndSave(String externalId) { private Optional<User> findInKeycloakAndSave(String externalId) {
return keycloakUserRemoteService.findUserById(externalId).map(this::saveAndSync); return keycloakUserRemoteService.findUserById(externalId).map(this::save);
}
public User saveAndSync(User user) {
var saved = save(user);
Uni.createFrom()
.item(user)
.runSubscriptionOn(Infrastructure.getDefaultWorkerPool())
.subscribe()
.with(u -> keycloakUserRemoteService.updateOzgCloudUserId(saved));
return saved;
} }
public Stream<String> findAllInactiveUserIds() { public Stream<String> findAllInactiveUserIds() {
......
...@@ -29,17 +29,8 @@ import java.util.function.Supplier; ...@@ -29,17 +29,8 @@ import java.util.function.Supplier;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.BadRequestException;
import jakarta.ws.rs.ClientErrorException;
import jakarta.ws.rs.NotFoundException;
import jakarta.ws.rs.ProcessingException;
import org.apache.commons.lang3.ObjectUtils;
import org.eclipse.microprofile.config.inject.ConfigProperty; import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.admin.client.resource.RealmResource;
import org.keycloak.admin.client.resource.UserResource;
import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.representations.idm.UserRepresentation;
import de.ozgcloud.user.RemoteUserIterator; import de.ozgcloud.user.RemoteUserIterator;
...@@ -47,6 +38,11 @@ import de.ozgcloud.user.User; ...@@ -47,6 +38,11 @@ import de.ozgcloud.user.User;
import de.ozgcloud.user.UserResourceMapper; import de.ozgcloud.user.UserResourceMapper;
import de.ozgcloud.user.common.errorhandling.KeycloakUnavailableException; import de.ozgcloud.user.common.errorhandling.KeycloakUnavailableException;
import de.ozgcloud.user.common.logging.OzgCloudLogging; import de.ozgcloud.user.common.logging.OzgCloudLogging;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.ClientErrorException;
import jakarta.ws.rs.NotFoundException;
import jakarta.ws.rs.ProcessingException;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ApplicationScoped @ApplicationScoped
...@@ -96,23 +92,4 @@ class KeycloakApiService { ...@@ -96,23 +92,4 @@ class KeycloakApiService {
throw new KeycloakUnavailableException(properties.user(), properties.realm(), keycloakUrl, e); throw new KeycloakUnavailableException(properties.user(), properties.realm(), keycloakUrl, e);
} }
} }
public void updateAttribute(String keycloakUserId, String attributeName, String attributeValue) {
var userResource = realmResource.users().get(keycloakUserId);
var userRepresentation = userResource.toRepresentation();
var ozgCloudUserIdInKeycloak = userRepresentation.firstAttribute(attributeName);
if (ObjectUtils.notEqual(ozgCloudUserIdInKeycloak, attributeValue)) {
userRepresentation.singleAttribute(attributeName, attributeValue);
tryUpdateUserResource(userResource, userRepresentation, attributeName);
}
}
void tryUpdateUserResource(UserResource userResource, UserRepresentation userRepresentation, String attributeName) {
try {
userResource.update(userRepresentation);
} catch (BadRequestException e) {
LOG.warn("Could not update user attribute {} in Keycloak.", attributeName, e);
}
}
} }
\ No newline at end of file
...@@ -26,18 +26,15 @@ package de.ozgcloud.user.keycloak; ...@@ -26,18 +26,15 @@ package de.ozgcloud.user.keycloak;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import de.ozgcloud.user.User; import de.ozgcloud.user.User;
import de.ozgcloud.user.common.logging.OzgCloudLogging; import de.ozgcloud.user.common.logging.OzgCloudLogging;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
@ApplicationScoped @ApplicationScoped
@OzgCloudLogging @OzgCloudLogging
public class KeycloakUserRemoteService { public class KeycloakUserRemoteService {
public static final String ATTRIBUTE_NAME_OZG_CLOUD_USER_ID = "ozgCloudUserId";
@Inject @Inject
KeycloakApiService apiService; KeycloakApiService apiService;
...@@ -45,10 +42,6 @@ public class KeycloakUserRemoteService { ...@@ -45,10 +42,6 @@ public class KeycloakUserRemoteService {
return apiService.findAllUser(); return apiService.findAllUser();
} }
public void updateOzgCloudUserId(User user) {
apiService.updateAttribute(user.getKeycloakUserId(), ATTRIBUTE_NAME_OZG_CLOUD_USER_ID, user.getId().toString());
}
public Optional<User> findUserById(String id) { public Optional<User> findUserById(String id) {
return apiService.findUserById(id); return apiService.findUserById(id);
} }
......
...@@ -25,15 +25,14 @@ package de.ozgcloud.user.sync; ...@@ -25,15 +25,14 @@ package de.ozgcloud.user.sync;
import java.util.function.Predicate; import java.util.function.Predicate;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import de.ozgcloud.user.User; import de.ozgcloud.user.User;
import de.ozgcloud.user.UserService; import de.ozgcloud.user.UserService;
import de.ozgcloud.user.common.logging.OzgCloudLogging; import de.ozgcloud.user.common.logging.OzgCloudLogging;
import de.ozgcloud.user.keycloak.KeycloakUserRemoteService; import de.ozgcloud.user.keycloak.KeycloakUserRemoteService;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
@ApplicationScoped @ApplicationScoped
@OzgCloudLogging @OzgCloudLogging
...@@ -49,7 +48,7 @@ class SyncService { ...@@ -49,7 +48,7 @@ class SyncService {
void sync(long syncTimestamp) { void sync(long syncTimestamp) {
keycloakService.getAllUsers() keycloakService.getAllUsers()
.filter(HAS_ANY_ROLE) .filter(HAS_ANY_ROLE)
.forEach(user -> userService.saveAndSync(addLastSyncTimestamp(user, syncTimestamp))); .forEach(user -> userService.save(addLastSyncTimestamp(user, syncTimestamp)));
userService.markUnsyncedUsersAsDeleted(syncTimestamp); userService.markUnsyncedUsersAsDeleted(syncTimestamp);
} }
......
...@@ -182,7 +182,7 @@ class UserServiceTest { ...@@ -182,7 +182,7 @@ class UserServiceTest {
void shouldCallKeycloakRemoteService() { void shouldCallKeycloakRemoteService() {
var user = UserTestFactory.create(); var user = UserTestFactory.create();
when(keycloakRemoteService.findUserById(anyString())).thenReturn(Optional.of(user)); when(keycloakRemoteService.findUserById(anyString())).thenReturn(Optional.of(user));
when(service.saveAndSync(user)).thenReturn(user); when(service.save(user)).thenReturn(user);
service.findByExternalId(EXTERNAL_ID); service.findByExternalId(EXTERNAL_ID);
...@@ -190,14 +190,14 @@ class UserServiceTest { ...@@ -190,14 +190,14 @@ class UserServiceTest {
} }
@Test @Test
void shouldCallSaveAndSync() { void shouldCallSave() {
var user = UserTestFactory.create(); var user = UserTestFactory.create();
when(keycloakRemoteService.findUserById(anyString())).thenReturn(Optional.of(user)); when(keycloakRemoteService.findUserById(anyString())).thenReturn(Optional.of(user));
doReturn(user).when(service).saveAndSync(user); doReturn(user).when(service).save(user);
service.findByExternalId(EXTERNAL_ID); service.findByExternalId(EXTERNAL_ID);
verify(service).saveAndSync(user); verify(service).save(user);
} }
@Test @Test
...@@ -206,28 +206,6 @@ class UserServiceTest { ...@@ -206,28 +206,6 @@ class UserServiceTest {
} }
} }
@Nested
class TestSaveAndSync {
@Test
void shouldSaveUser() {
var user = UserTestFactory.create();
service.saveAndSync(user);
verify(service).save(user);
}
@Test
void shouldSyncUser() {
var user = UserTestFactory.create();
var saved = service.saveAndSync(user);
verify(keycloakRemoteService, timeout(1000)).updateOzgCloudUserId(saved);
}
}
@Nested @Nested
class TestFindActiveUsers { class TestFindActiveUsers {
......
...@@ -31,11 +31,6 @@ import static org.mockito.Mockito.*; ...@@ -31,11 +31,6 @@ import static org.mockito.Mockito.*;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Stream; import java.util.stream.Stream;
import jakarta.ws.rs.BadRequestException;
import jakarta.ws.rs.ClientErrorException;
import jakarta.ws.rs.NotFoundException;
import jakarta.ws.rs.ProcessingException;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
...@@ -44,8 +39,6 @@ import org.keycloak.admin.client.resource.RealmResource; ...@@ -44,8 +39,6 @@ import org.keycloak.admin.client.resource.RealmResource;
import org.keycloak.admin.client.resource.UserResource; import org.keycloak.admin.client.resource.UserResource;
import org.keycloak.admin.client.resource.UsersResource; import org.keycloak.admin.client.resource.UsersResource;
import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.representations.idm.UserRepresentation;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Spy; import org.mockito.Spy;
...@@ -56,6 +49,9 @@ import de.ozgcloud.user.UserRepresentationTestFactory; ...@@ -56,6 +49,9 @@ import de.ozgcloud.user.UserRepresentationTestFactory;
import de.ozgcloud.user.UserResourceMapper; import de.ozgcloud.user.UserResourceMapper;
import de.ozgcloud.user.UserTestFactory; import de.ozgcloud.user.UserTestFactory;
import de.ozgcloud.user.common.errorhandling.KeycloakUnavailableException; import de.ozgcloud.user.common.errorhandling.KeycloakUnavailableException;
import jakarta.ws.rs.ClientErrorException;
import jakarta.ws.rs.NotFoundException;
import jakarta.ws.rs.ProcessingException;
class KeycloakApiServiceTest { class KeycloakApiServiceTest {
...@@ -191,123 +187,4 @@ class KeycloakApiServiceTest { ...@@ -191,123 +187,4 @@ class KeycloakApiServiceTest {
return service.handlingKeycloakException(runnable); return service.handlingKeycloakException(runnable);
} }
} }
@DisplayName("Set user attribute")
@Nested
class TestUpdateUserAttribute {
private static final String KEYCLOAK_USER_ID = "1ae2-b123";
private static final String ATTRIBUTE_NAME_USER_ID = "userId";
private static final String ATTRIBUTE_VALUE_USER_ID = "10";
private static final String NEW_USER_ID = "1010";
@Mock
private UsersResource usersResource;
@Mock
private UserResource userResource;
@Mock
private UserRepresentation userRepresentation;
@BeforeEach
void beforeEach() {
when(realmResource.users()).thenReturn(usersResource);
when(usersResource.get(KEYCLOAK_USER_ID)).thenReturn(userResource);
when(userResource.toRepresentation()).thenReturn(userRepresentation);
when(userRepresentation.firstAttribute(ATTRIBUTE_NAME_USER_ID)).thenReturn(ATTRIBUTE_VALUE_USER_ID);
}
@Test
void shouldGetUsersResource() {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(realmResource).users();
}
@Test
void shouldGetUserResource() {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(usersResource).get(KEYCLOAK_USER_ID);
}
@Test
void shouldGetUserRepresentation() {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(userResource).toRepresentation();
}
@Test
void shouldUpdateAttributeIfNotExist() {
when(userRepresentation.firstAttribute(ATTRIBUTE_NAME_USER_ID)).thenReturn(null);
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(userRepresentation).singleAttribute(ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(service).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
}
@Test
void shouldUpdateAttributeIfExistsWithDifferentValue() {
when(userRepresentation.firstAttribute(ATTRIBUTE_NAME_USER_ID)).thenReturn(NEW_USER_ID);
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(userRepresentation).singleAttribute(ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(service).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
}
@Test
void shouldUpdateAttributeIfNewOneGiven() {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, NEW_USER_ID);
verify(userRepresentation).singleAttribute(ATTRIBUTE_NAME_USER_ID, NEW_USER_ID);
verify(service).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
}
@Test
void shouldNotSetAttributeIfExistsWithSameValue() {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(userRepresentation, never()).singleAttribute(ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(service, never()).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
}
@Test
void shouldCatchBadRequestException() {
when(userRepresentation.firstAttribute(ATTRIBUTE_NAME_USER_ID)).thenReturn(NEW_USER_ID);
doThrow(new BadRequestException("error message")).when(userResource).update(any(UserRepresentation.class));
assertThatCode(
() -> service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID)).doesNotThrowAnyException();
}
}
@Nested
class TestTryUpdateUserResource {
private static final String ATTRIBUTE_NAME_USER_ID = "userId";
@Captor
private ArgumentCaptor<UserRepresentation> userRepresentationArgumentCaptor;
@Mock
private UserRepresentation userRepresentation;
@Test
void shouldUpdateUserResource() {
service.tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
verify(userResource).update(any(UserRepresentation.class));
}
@Test
void shouldCreateOlderUserRepresentation() {
service.tryUpdateUserResource(userResource, UserRepresentationTestFactory.create(), ATTRIBUTE_NAME_USER_ID);
verify(userResource).update(userRepresentationArgumentCaptor.capture());
assertThat(userRepresentationArgumentCaptor.getValue()).usingRecursiveComparison().isEqualTo(UserRepresentationTestFactory.create());
}
}
} }
\ No newline at end of file
/*
* Copyright (C) 2023 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.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.MethodOrderer;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;
import org.keycloak.admin.client.resource.RealmResource;
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;
@InjectSpy
KeycloakApiService apiService;
@Inject
RealmResource realmResource;
@Test
void shouldCallGetAllUsers() {
service.getAllUsers();
verify(apiService).findAllUser();
}
@Nested
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class TestUpdateOzgCloudUserId {
private static final String KEYCLOAK_USER_ID = "90748555-7894-4854-8292-1f6106826962";
@DisplayName("Set ozgCloudUserId attribute in keycloak on new user")
@Test
@Order(1)
void shouldSetOzgCloudUserId() {
User user = prepareUser();
service.updateOzgCloudUserId(user);
var ozgCloudUserId = getOzgCloudUserIdFromKeycloak();
assertThat(user.getId().toString()).isEqualTo(ozgCloudUserId);
}
@DisplayName("Update ozgCloudUserId attribute in keycloak on existing user")
@Test
@Order(2)
void shouldUpdateOzgCloudUserId() {
var oldCloudUserId = getOzgCloudUserIdFromKeycloak();
service.updateOzgCloudUserId(prepareUser());
var newCloudUserId = getOzgCloudUserIdFromKeycloak();
assertThat(oldCloudUserId).isNotEqualTo(newCloudUserId);
}
private User prepareUser() {
return UserTestFactory.createBuilder()
.id(new ObjectId())
.externalId(KEYCLOAK_USER_ID)
.keycloakUserId(KEYCLOAK_USER_ID)
.email("dorothea@test.local")
.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
...@@ -54,21 +54,6 @@ class KeycloakUserRemoteServiceTest { ...@@ -54,21 +54,6 @@ class KeycloakUserRemoteServiceTest {
} }
} }
@DisplayName("Update ozgCloudUserId attribute in keycloak")
@Nested
class TestUpdateOzgCloudUserId {
@Test
void shouldCallApiService() {
remoteService.updateOzgCloudUserId(UserTestFactory.create());
verify(apiService).updateAttribute(
UserTestFactory.KEYCLOAK_USER_ID,
KeycloakUserRemoteService.ATTRIBUTE_NAME_OZG_CLOUD_USER_ID,
UserTestFactory.ID.toString());
}
}
@Nested @Nested
@DisplayName("Get user by id") @DisplayName("Get user by id")
class TestGetUser { class TestGetUser {
......
...@@ -76,7 +76,7 @@ class SyncServiceTest { ...@@ -76,7 +76,7 @@ class SyncServiceTest {
} }
@Test @Test
void shouldCallSaveAndSync() { void shouldCallSave() {
var syncTimestamp = Instant.now().toEpochMilli(); var syncTimestamp = Instant.now().toEpochMilli();
var updatedUser = UserTestFactory.createBuilder().lastSyncTimestamp(syncTimestamp).build(); var updatedUser = UserTestFactory.createBuilder().lastSyncTimestamp(syncTimestamp).build();
when(keycloakService.getAllUsers()).thenReturn(Stream.of(user, user)); when(keycloakService.getAllUsers()).thenReturn(Stream.of(user, user));
...@@ -84,19 +84,19 @@ class SyncServiceTest { ...@@ -84,19 +84,19 @@ class SyncServiceTest {
service.sync(syncTimestamp); service.sync(syncTimestamp);
verify(userService, times(2)).saveAndSync(updatedUser); verify(userService, times(2)).save(updatedUser);
} }
@Test @Test
void shouldAddLasSyncToUser() { void shouldAddLasSyncToUser() {
when(keycloakService.getAllUsers()).thenReturn(Stream.of(user)); when(keycloakService.getAllUsers()).thenReturn(Stream.of(user));
when(userService.saveAndSync(any())).thenReturn(user); when(userService.save(any())).thenReturn(user);
var timestamp = Instant.now().toEpochMilli(); var timestamp = Instant.now().toEpochMilli();
service.sync(timestamp); service.sync(timestamp);
verify(userService).saveAndSync(userCaptor.capture()); verify(userService).save(userCaptor.capture());
assertThat(userCaptor.getValue().getLastSyncTimestamp()).isEqualTo(timestamp); assertThat(userCaptor.getValue().getLastSyncTimestamp()).isEqualTo(timestamp);
} }
......
...@@ -811,22 +811,6 @@ ...@@ -811,22 +811,6 @@
"jsonType.label": "int" "jsonType.label": "int"
} }
}, },
{
"id": "e068b24d-9731-4b81-a49a-8107e3053daa",
"name": "ozgCloudUserId",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-attribute-mapper",
"consentRequired": false,
"config": {
"aggregate.attrs": "false",
"multivalued": "false",
"userinfo.token.claim": "true",
"user.attribute": "ozgCloudUserId",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "ozgCloudUserId"
}
},
{ {
"id": "9ed930aa-7dfd-441b-b4c1-829c8abc060e", "id": "9ed930aa-7dfd-441b-b4c1-829c8abc060e",
"name": "organisationseinheitIdMapper", "name": "organisationseinheitIdMapper",
...@@ -1003,22 +987,6 @@ ...@@ -1003,22 +987,6 @@
"claim.name": "resource_access.${client_id}.roles", "claim.name": "resource_access.${client_id}.roles",
"multivalued": "true" "multivalued": "true"
} }
},
{
"id": "14117f93-bf7a-4c20-a8cf-b46d96598c57",
"name": "ozgCloudUserId",
"protocol": "openid-connect",
"protocolMapper": "oidc-usermodel-attribute-mapper",
"consentRequired": false,
"config": {
"aggregate.attrs": "false",
"multivalued": "false",
"userinfo.token.claim": "true",
"user.attribute": "ozgCloudUserId",
"id.token.claim": "true",
"access.token.claim": "true",
"claim.name": "ozgCloudUserId"
}
} }
], ],
"defaultClientScopes": [ "defaultClientScopes": [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment