Skip to content
Snippets Groups Projects
Commit a6bc47c7 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-2653 UserResourceMapper hinzugefügt

parent c12dc730
No related branches found
No related tags found
No related merge requests found
package de.itvsh.kop.user;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.inject.Inject;
import org.keycloak.admin.client.resource.UserResource;
import org.keycloak.representations.idm.GroupRepresentation;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy;
import de.itvsh.kop.user.keycloak.KeycloakApiProperties;
@Mapper(unmappedTargetPolicy = ReportingPolicy.WARN)
public abstract class UserResourceMapper {
@Inject
KeycloakApiProperties properties;
@Mapping(target = "createdAt", expression = "java(mapCreatedAt(userRes))")
@Mapping(target = "email", expression = "java(mapEmail(userRes))")
@Mapping(target = "firstName", expression = "java(mapFirstName(userRes))")
@Mapping(target = "lastName", expression = "java(mapLastName(userRes))")
@Mapping(target = "username", expression = "java(mapUsername(userRes))")
@Mapping(target = "externalId", expression = "java(mapId(userRes))")
@Mapping(target = "organisationsEinheitIds", expression = "java(mapOrganisationsEinheitIds(userRes))")
@Mapping(target = "roles", expression = "java(mapRoles(userRes))")
@Mapping(target = "lastSyncTimestamp", ignore = true)
@Mapping(target = "deleted", ignore = true)
abstract User toKopUser(UserResource userRes);
Date mapCreatedAt(UserResource userRes) {
var createdAt = userRes.toRepresentation().getCreatedTimestamp();
return createdAt != null ? new Date(createdAt) : new Date();
}
List<String> mapOrganisationsEinheitIds(UserResource userRes) {
return userRes.groups().stream()
.map(GroupRepresentation::getAttributes)
.filter(Objects::nonNull)
.map(attributeMap -> attributeMap.get(properties.organisationsEinheitIdKey()))
.filter(Objects::nonNull)
.map(attributeValues -> attributeValues.get(0))
.toList();
}
List<String> mapRoles(UserResource userRes) {
return List.of();
}
String mapId(UserResource userRes) {
var userRepresentation = userRes.toRepresentation();
var id = userRepresentation.getAttributes().get(properties.ldapIdKey());
return id != null ? id.get(0) : userRepresentation.getId();
}
String mapEmail(UserResource userRes) {
return userRes.toRepresentation().getEmail();
}
String mapFirstName(UserResource userRes) {
return userRes.toRepresentation().getFirstName();
}
String mapLastName(UserResource userRes) {
return userRes.toRepresentation().getLastName();
}
String mapUsername(UserResource userRes) {
return userRes.toRepresentation().getUsername();
}
}
package de.itvsh.kop.user;
import java.util.List;
import java.util.Map;
import javax.ws.rs.core.Response;
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.CredentialRepresentation;
import org.keycloak.representations.idm.FederatedIdentityRepresentation;
import org.keycloak.representations.idm.GroupRepresentation;
import org.keycloak.representations.idm.MappingsRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.representations.idm.UserSessionRepresentation;
class StubUserResource implements UserResource {
@Override
public UserRepresentation toRepresentation() {
return UserRepresentationTestFactory.create();
}
@Override
public void update(UserRepresentation userRepresentation) {
// not implemented
}
@Override
public void remove() {
// not implemented
}
@Override
public List<GroupRepresentation> groups() {
return List.of(createGroup());
}
private GroupRepresentation createGroup() {
var group = new GroupRepresentation();
group.setAttributes(UserRepresentationTestFactory.ATTRIBUTES);
return group;
}
@Override
public void leaveGroup(String groupId) {
// not implemented
}
@Override
public List<GroupRepresentation> groups(Integer firstResult, Integer maxResults) {
return groups();
}
@Override
public List<GroupRepresentation> groups(String search, Integer firstResult, Integer maxResults) {
return groups();
}
@Override
public List<GroupRepresentation> groups(Integer firstResult, Integer maxResults, boolean briefRepresentation) {
return groups();
}
@Override
public List<GroupRepresentation> groups(String search, Integer firstResult, Integer maxResults, boolean briefRepresentation) {
return groups();
}
@Override
public Map<String, Long> groupsCount(String search) {
return Map.of();
}
@Override
public void joinGroup(String groupId) {
// not implemented
}
@Override
public void logout() {
// not implemented
}
@Override
public List<CredentialRepresentation> credentials() {
return null;
}
@Override
public List<String> getConfiguredUserStorageCredentialTypes() {
return null;
}
@Override
public void removeCredential(String credentialId) {
// not implemented
}
@Override
public void setCredentialUserLabel(String credentialId, String userLabel) {
// not implemented
}
@Override
public void moveCredentialToFirst(String credentialId) {
// not implemented
}
@Override
public void moveCredentialAfter(String credentialId, String newPreviousCredentialId) {
// not implemented
}
@Override
public void disableCredentialType(List<String> credentialTypes) {
// not implemented
}
@Override
public void resetPassword(CredentialRepresentation credentialRepresentation) {
// not implemented
}
@Override
public void resetPasswordEmail() {
// not implemented
}
@Override
public void resetPasswordEmail(String clientId) {
// not implemented
}
@Override
public void executeActionsEmail(List<String> actions) {
// not implemented
}
@Override
public void executeActionsEmail(List<String> actions, Integer lifespan) {
// not implemented
}
@Override
public void executeActionsEmail(String clientId, String redirectUri, Integer lifespan, List<String> actions) {
// not implemented
}
@Override
public void executeActionsEmail(String clientId, String redirectUri, List<String> actions) {
// not implemented
}
@Override
public void sendVerifyEmail() {
// not implemented
}
@Override
public void sendVerifyEmail(String clientId) {
// not implemented
}
@Override
public List<UserSessionRepresentation> getUserSessions() {
return null;
}
@Override
public List<UserSessionRepresentation> getOfflineSessions(String clientId) {
return null;
}
@Override
public List<FederatedIdentityRepresentation> getFederatedIdentity() {
return null;
}
@Override
public Response addFederatedIdentity(String provider, FederatedIdentityRepresentation rep) {
return null;
}
@Override
public void removeFederatedIdentity(String provider) {
// not implemented
}
@Override
public RoleMappingResource roles() {
return new RoleMappingResource() {
@Override
public RoleScopeResource realmLevel() {
return null;
}
@Override
public MappingsRepresentation getAll() {
return null;
}
@Override
public RoleScopeResource clientLevel(String clientUUID) {
return null;
}
};
}
@Override
public List<Map<String, Object>> getConsents() {
return List.of(Map.of());
}
@Override
public void revokeConsent(String clientId) {
// not implemented
}
@Override
public Map<String, Object> impersonate() {
return null;
}
}
package de.itvsh.kop.user;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mapstruct.factory.Mappers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import de.itvsh.kop.user.keycloak.KeycloakApiProperties;
class UserResourceMapperTest {
@InjectMocks
private UserResourceMapper mapper = Mappers.getMapper(UserResourceMapper.class);
@Mock
private KeycloakApiProperties apiProperties;
@Nested
class TestMapping {
@BeforeEach
void init() {
when(apiProperties.ldapIdKey()).thenReturn("LDAP_ID");
when(apiProperties.organisationsEinheitIdKey()).thenReturn("organisationseinheitId");
}
@Test
void shouldMapToUser() {
User user = mapper.toKopUser(UserResourceTestFactory.create());
assertThat(user).isNotNull();
}
@Test
void shouldMapEmail() {
User user = mapper.toKopUser(UserResourceTestFactory.create());
assertThat(user.getEmail()).isEqualTo(UserRepresentationTestFactory.EMAIL);
}
@Test
void shouldMapExternalId() {
User user = mapper.toKopUser(UserResourceTestFactory.create());
assertThat(user.getExternalId()).isEqualTo(UserRepresentationTestFactory.EXTERNAL_ID);
}
@Test
void shouldMapFirstName() {
User user = mapper.toKopUser(UserResourceTestFactory.create());
assertThat(user.getFirstName()).isEqualTo(UserRepresentationTestFactory.FIRST_NAME);
}
@Test
void shouldMapLastName() {
User user = mapper.toKopUser(UserResourceTestFactory.create());
assertThat(user.getLastName()).isEqualTo(UserRepresentationTestFactory.LAST_NAME);
}
@Test
void shouldMapUserName() {
User user = mapper.toKopUser(UserResourceTestFactory.create());
assertThat(user.getUsername()).isEqualTo(UserRepresentationTestFactory.USER_NAME);
}
@Test
void shouldMapOrganisationsEinheitIds() {
User user = mapper.toKopUser(UserResourceTestFactory.create());
assertThat(user.getOrganisationsEinheitIds()).isNotEmpty().contains(UserRepresentationTestFactory.ORGANSISATIONS_EINHEIT_ID);
}
}
}
package de.itvsh.kop.user;
import org.keycloak.admin.client.resource.UserResource;
class UserResourceTestFactory {
public static UserResource create() {
return new StubUserResource();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment