diff --git a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java index 4e92bd3640450d3765176046aced08900e257a79..eb5ca4944d9df2355897eea04660a2a21c57bdaa 100644 --- a/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java +++ b/ozgcloud-keycloak-operator/src/main/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionService.java @@ -25,6 +25,7 @@ package de.ozgcloud.operator.keycloak.user; import java.util.Optional; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import de.ozgcloud.operator.keycloak.KeycloakGenericRemoteService; @@ -55,6 +56,10 @@ class KeycloakUserPreconditionService { return groupError; } + if (!userHasEmail(user)) { + return Optional.of(String.format("User Email does not yet exist")); + } + return Optional.empty(); } @@ -78,4 +83,10 @@ class KeycloakUserPreconditionService { .map(groupName -> String.format("Group %s for realm %s does not exist yet", groupName, realm)) .findAny(); } + + boolean userHasEmail(OzgCloudKeycloakUser user) { + String email = user.getSpec().getKeycloakUser().getEmail(); + return !StringUtils.isEmpty(email); + } + } diff --git a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java index 1800a5a8d2d84a9e76f61d80d64288b08f024a8d..1ca6e80975e0766071fe6683d9308461234f8de7 100644 --- a/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java +++ b/ozgcloud-keycloak-operator/src/test/java/de/ozgcloud/operator/keycloak/user/KeycloakUserPreconditionServiceTest.java @@ -90,17 +90,57 @@ class KeycloakUserPreconditionServiceTest { assertThat(response).isPresent(); } + @Test + void shouldReturnErrorIfUserDoesNotHaveEmail() { + var user = OzgCloudKeycloakUserTestFactory.create(); + doReturn(true).when(service).realmExists(REALM); + doReturn(Optional.empty()).when(service).clientsExists(any(), any()); + doReturn(Optional.empty()).when(service).groupsExists(any(), any()); + doReturn(false).when(service).userHasEmail(user); + + var response = service.getPreconditionErrors(user); + + assertThat(response).isPresent(); + } + @Test void shouldReturnEmptyIfRealmExists() { + var user = OzgCloudKeycloakUserTestFactory.create(); + doReturn(true).when(service).userHasEmail(user); doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString()); doReturn(Optional.empty()).when(service).clientsExists(any(), any()); doReturn(Optional.empty()).when(service).groupsExists(any(), any()); - var response = service.getPreconditionErrors(OzgCloudKeycloakUserTestFactory.create()); + var response = service.getPreconditionErrors(user); + + assertThat(response).isEmpty(); + } + + @Test + void shouldReturnEmptyIfuserHasEmail() { + var user = OzgCloudKeycloakUserTestFactory.create(); + doReturn(true).when(service).userHasEmail(user); + doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString()); + doReturn(Optional.empty()).when(service).clientsExists(any(), any()); + doReturn(Optional.empty()).when(service).groupsExists(any(), any()); + + var response = service.getPreconditionErrors(user); assertThat(response).isEmpty(); } + @Test + void shouldCheckuserHasEmail() { + var user = OzgCloudKeycloakUserTestFactory.create(); + doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString()); + doReturn(Optional.empty()).when(service).clientsExists(any(), any()); + doReturn(Optional.empty()).when(service).groupsExists(any(), any()); + + service.getPreconditionErrors(user); + + verify(service).userHasEmail(user); + } + @Test void shouldCheckIfKeycloakClientExists() { doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString()); @@ -145,55 +185,87 @@ class KeycloakUserPreconditionServiceTest { } @Nested - class TestClientExists { + class TestuserHasEmail { @Test - void shouldRespondMissingRealm() { - when(keycloakGenericRemoteService.getByClientId(any(), any())).thenReturn(Optional.empty()); - - var rsp = service.clientsExists(OzgCloudKeycloakUserTestFactory.create(), null); + void shouldResponduserHasEmail() { + var response = service.userHasEmail(OzgCloudKeycloakUserTestFactory.create()); - assertThat(rsp).isPresent(); + assertThat(response).isTrue(); } @Test - void shouldReturnClientExists() { - when(keycloakGenericRemoteService.getByClientId(any(), any())).thenReturn(Optional.of(mock(ClientRepresentation.class))); + void shouldRespondWhenUserEmailIsEmpty() { + var user = OzgCloudKeycloakUserTestFactory.create(); + user.getSpec().getKeycloakUser().setEmail(""); - var rsp = service.clientsExists(OzgCloudKeycloakUserTestFactory.create(), null); + var response = service.userHasEmail(user); - assertThat(rsp).isEmpty(); + assertThat(response).isFalse(); } - } - @Nested - class TestGroupsExists { + @Test + void shouldRespondWhenUserEmailIsNull() { + var user = OzgCloudKeycloakUserTestFactory.create(); + user.getSpec().getKeycloakUser().setEmail(null); - private static final OzgCloudKeycloakUser user = OzgCloudKeycloakUserTestFactory.create(); + var response = service.userHasEmail(user); - @BeforeEach - void init() { - doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString()); - doReturn(Optional.empty()).when(service).clientsExists(any(), any()); + assertThat(response).isFalse(); } - @Test - void shouldReturnMissingGroup() { - when(keycloakGenericRemoteService.groupExists(KeycloakUserSpecUserTestFactory.GROUP_NAME_1, OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE)).thenReturn(false); + @Nested + class TestClientExists { + + @Test + void shouldRespondMissingRealm() { + when(keycloakGenericRemoteService.getByClientId(any(), any())).thenReturn(Optional.empty()); + + var rsp = service.clientsExists(OzgCloudKeycloakUserTestFactory.create(), null); - var rsp = service.getPreconditionErrors(user); + assertThat(rsp).isPresent(); + } - assertThat(rsp).isPresent(); + @Test + void shouldReturnClientExists() { + when(keycloakGenericRemoteService.getByClientId(any(), any())).thenReturn(Optional.of(mock(ClientRepresentation.class))); + + var rsp = service.clientsExists(OzgCloudKeycloakUserTestFactory.create(), null); + + assertThat(rsp).isEmpty(); + } } - @Test - void shouldReturnGroupExists() { - when(keycloakGenericRemoteService.groupExists(KeycloakUserSpecUserTestFactory.GROUP_NAME_1, OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE)).thenReturn(true); - when(keycloakGenericRemoteService.groupExists(KeycloakUserSpecUserTestFactory.GROUP_NAME_2, OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE)).thenReturn(true); + @Nested + class TestGroupsExists { + + private static final OzgCloudKeycloakUser user = OzgCloudKeycloakUserTestFactory.create(); + + @BeforeEach + void init() { + doReturn(true).when(keycloakGenericRemoteService).realmExists(anyString()); + doReturn(Optional.empty()).when(service).clientsExists(any(), any()); + } + + @Test + void shouldReturnMissingGroup() { + when(keycloakGenericRemoteService.groupExists(KeycloakUserSpecUserTestFactory.GROUP_NAME_1, + OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE)).thenReturn(false); + + var rsp = service.getPreconditionErrors(user); + + assertThat(rsp).isPresent(); + } + + @Test + void shouldReturnGroupExists() { + when(keycloakGenericRemoteService.groupExists(KeycloakUserSpecUserTestFactory.GROUP_NAME_1, OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE)).thenReturn(true); + when(keycloakGenericRemoteService.groupExists(KeycloakUserSpecUserTestFactory.GROUP_NAME_2, OzgCloudKeycloakUserTestFactory.METADATA_NAMESPACE)).thenReturn(true); - var rsp = service.getPreconditionErrors(user); + var rsp = service.getPreconditionErrors(user); - assertThat(rsp).isEmpty(); + assertThat(rsp).isEmpty(); + } } } }