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

OZG-4460 OZG-4495 enable tests, improve script

parent 1cb407f8
Branches
Tags
No related merge requests found
#!/usr/bin/env bash #!/usr/bin/env bash
export QUARKUS_CONTAINER_IMAGE_NAME=user-manager
export QUARKUS_CONTAINER_IMAGE_TAG=build-latest
export QUARKUS_NATIVE_CONTAINER_RUNTIME=docker
cd user-manager-server cd user-manager-server
./mvnw clean install -D skipTests \ ./mvnw clean install -D skipTests \
-Pnative \ -Pnative \
......
...@@ -45,6 +45,7 @@ import de.itvsh.kop.common.logging.KopLogging; ...@@ -45,6 +45,7 @@ import de.itvsh.kop.common.logging.KopLogging;
import de.itvsh.kop.user.RemoteUserIterator; import de.itvsh.kop.user.RemoteUserIterator;
import de.itvsh.kop.user.User; import de.itvsh.kop.user.User;
import de.itvsh.kop.user.UserResourceMapper; import de.itvsh.kop.user.UserResourceMapper;
import de.itvsh.kop.user.common.errorhandling.KeycloakUnavailableException;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@ApplicationScoped @ApplicationScoped
...@@ -86,17 +87,8 @@ class KeycloakApiService { ...@@ -86,17 +87,8 @@ class KeycloakApiService {
<T> T handlingKeycloakException(Supplier<T> runnable) { <T> T handlingKeycloakException(Supplier<T> runnable) {
try { try {
return runnable.get(); return runnable.get();
} catch (ClientErrorException e) { } catch (ClientErrorException | ProcessingException | IllegalStateException e) {
// throw new KeycloakUnavailableException(properties.user(), properties.realm(), keycloakUrl, e); throw new KeycloakUnavailableException(properties.user(), properties.realm(), keycloakUrl, e);
LOG.error("client error with status {} and message {}: {} / ", e.getMessage(), e.getResponse().getStatus(), e.getResponse().getEntity()
, e);
throw e;
} catch (ProcessingException e) {
LOG.error("error processing request or response ", e.getMessage(), e);
throw e;
} catch (IllegalStateException e) {
LOG.error("illegal state ", e.getMessage(), e);
throw e;
} }
} }
...@@ -110,7 +102,7 @@ class KeycloakApiService { ...@@ -110,7 +102,7 @@ class KeycloakApiService {
} }
} }
private void tryUpdateUserResource(UserResource userResource, UserRepresentation userRepresentation, String attributeName) { void tryUpdateUserResource(UserResource userResource, UserRepresentation userRepresentation, String attributeName) {
try { try {
userResource.update(new OlderUserRepresentation(userRepresentation)); userResource.update(new OlderUserRepresentation(userRepresentation));
} catch (BadRequestException e) { } catch (BadRequestException e) {
......
...@@ -36,7 +36,6 @@ import jakarta.ws.rs.ClientErrorException; ...@@ -36,7 +36,6 @@ import jakarta.ws.rs.ClientErrorException;
import jakarta.ws.rs.ProcessingException; import jakarta.ws.rs.ProcessingException;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
...@@ -44,6 +43,8 @@ import org.keycloak.admin.client.resource.RealmResource; ...@@ -44,6 +43,8 @@ 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;
...@@ -149,7 +150,6 @@ class KeycloakApiServiceTest { ...@@ -149,7 +150,6 @@ class KeycloakApiServiceTest {
@DisplayName("handling keycloak exception") @DisplayName("handling keycloak exception")
@Nested @Nested
@Disabled("temporary for testing in cluster")
class TestHandlingKeycloakException { class TestHandlingKeycloakException {
@Test @Test
...@@ -180,7 +180,6 @@ class KeycloakApiServiceTest { ...@@ -180,7 +180,6 @@ class KeycloakApiServiceTest {
@DisplayName("Set user attribute") @DisplayName("Set user attribute")
@Nested @Nested
@Disabled("temporary for testing")
class TestUpdateUserAttribute { class TestUpdateUserAttribute {
private static final String KEYCLOAK_USER_ID = "1ae2-b123"; private static final String KEYCLOAK_USER_ID = "1ae2-b123";
...@@ -231,7 +230,7 @@ class KeycloakApiServiceTest { ...@@ -231,7 +230,7 @@ class KeycloakApiServiceTest {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_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(userRepresentation).singleAttribute(ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(userResource).update(userRepresentation); verify(service).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
} }
@Test @Test
...@@ -241,7 +240,7 @@ class KeycloakApiServiceTest { ...@@ -241,7 +240,7 @@ class KeycloakApiServiceTest {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_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(userRepresentation).singleAttribute(ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(userResource).update(userRepresentation); verify(service).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
} }
@Test @Test
...@@ -249,7 +248,7 @@ class KeycloakApiServiceTest { ...@@ -249,7 +248,7 @@ class KeycloakApiServiceTest {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, NEW_USER_ID); service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, NEW_USER_ID);
verify(userRepresentation).singleAttribute(ATTRIBUTE_NAME_USER_ID, NEW_USER_ID); verify(userRepresentation).singleAttribute(ATTRIBUTE_NAME_USER_ID, NEW_USER_ID);
verify(userResource).update(userRepresentation); verify(service).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
} }
@Test @Test
...@@ -257,15 +256,98 @@ class KeycloakApiServiceTest { ...@@ -257,15 +256,98 @@ class KeycloakApiServiceTest {
service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID); 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(userRepresentation, never()).singleAttribute(ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID);
verify(service, never()).tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
} }
@Test @Test
void shouldCatchBadRequestException() { void shouldCatchBadRequestException() {
when(userRepresentation.firstAttribute(ATTRIBUTE_NAME_USER_ID)).thenReturn(NEW_USER_ID); when(userRepresentation.firstAttribute(ATTRIBUTE_NAME_USER_ID)).thenReturn(NEW_USER_ID);
doThrow(new BadRequestException("error message")).when(userResource).update(userRepresentation); doThrow(new BadRequestException("error message")).when(userResource).update(any(OlderUserRepresentation.class));
assertThatCode( assertThatCode(
() -> service.updateAttribute(KEYCLOAK_USER_ID, ATTRIBUTE_NAME_USER_ID, ATTRIBUTE_VALUE_USER_ID)).doesNotThrowAnyException(); () -> 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(OlderUserRepresentation.class));
}
@Test
void shouldCreateOlderUserRepresentation() {
service.tryUpdateUserResource(userResource, userRepresentation, ATTRIBUTE_NAME_USER_ID);
verify(userResource).update(userRepresentationArgumentCaptor.capture());
assertThat(userRepresentationArgumentCaptor.getValue())
.extracting(
UserRepresentation::getId,
UserRepresentation::getCreatedTimestamp,
UserRepresentation::getAttributes,
UserRepresentation::getEmail,
UserRepresentation::getFirstName,
UserRepresentation::getLastName,
UserRepresentation::isEmailVerified,
UserRepresentation::getAccess,
UserRepresentation::getClientConsents,
UserRepresentation::getClientRoles,
UserRepresentation::getCredentials,
UserRepresentation::getDisableableCredentialTypes,
UserRepresentation::getFederatedIdentities,
UserRepresentation::getFederationLink,
UserRepresentation::getGroups,
UserRepresentation::getNotBefore,
UserRepresentation::getOrigin,
UserRepresentation::getRealmRoles,
UserRepresentation::getRequiredActions,
UserRepresentation::getSelf,
UserRepresentation::getServiceAccountClientId,
UserRepresentation::getSocialLinks,
UserRepresentation::isEnabled,
UserRepresentation::getUserProfileMetadata,
UserRepresentation::isTotp
)
.containsExactly(
userRepresentation.getId(),
userRepresentation.getCreatedTimestamp(),
userRepresentation.getAttributes(),
userRepresentation.getEmail(),
userRepresentation.getFirstName(),
userRepresentation.getLastName(),
userRepresentation.isEmailVerified(),
userRepresentation.getAccess(),
userRepresentation.getClientConsents(),
userRepresentation.getClientRoles(),
userRepresentation.getCredentials(),
userRepresentation.getDisableableCredentialTypes(),
userRepresentation.getFederatedIdentities(),
userRepresentation.getFederationLink(),
userRepresentation.getGroups(),
userRepresentation.getNotBefore(),
userRepresentation.getOrigin(),
userRepresentation.getRealmRoles(),
userRepresentation.getRequiredActions(),
userRepresentation.getSelf(),
userRepresentation.getServiceAccountClientId(),
userRepresentation.getSocialLinks(),
userRepresentation.isEnabled(),
userRepresentation.getUserProfileMetadata(),
userRepresentation.isTotp()
);
}
}
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment