Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
strehle committed Jun 10, 2024
1 parent 87c3b2d commit 3acb204
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -827,6 +827,14 @@ public void testPatchActive() {
assertTrue(patchUser.isActive());
}

@Test
public void testScimUserAliasDeserialization() {
user.setAliasId("aliasId");
user.setAliasZid("custom");
String staticJson = "{\"id\":\"id\",\"externalId\":\"\",\"meta\":{\"version\":0},\"userName\":\"uname\",\"name\":{\"formatted\":\"gname fname\",\"familyName\":\"fname\",\"givenName\":\"gname\"},\"emails\":[{\"value\":\"test@example.org\",\"primary\":false}],\"phoneNumbers\":[{\"value\":\"0123456789\"}],\"displayName\":\"display\",\"title\":\"title\",\"locale\":\"en.UTF-8\",\"active\":true,\"verified\":true,\"origin\":\"\",\"aliasZid\":\"custom\",\"aliasId\":\"aliasId\",\"password\":\"password\",\"schemas\":[\"urn:scim:schemas:core:1.0\"]}";
assertEquals(user, JsonUtils.readValue(staticJson, ScimUser.class));
}

@Test
public void testPatchVerified() {
user.setVerified(false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
import static org.cloudfoundry.identity.uaa.alias.EntityAliasHandlerValidationTest.NoExistingAliasBase.ExistingEntityArgument.ENTITY_WITH_EMPTY_ALIAS_PROPS;
import static org.junit.Assert.assertFalse;

import java.util.UUID;
import java.util.stream.Stream;
Expand Down Expand Up @@ -129,6 +130,12 @@ final void shouldReturnFalse_UpdatesOfEntitiesWithExistingAliasForbidden() {
requestBody = buildEntityWithAliasProps(null, null);
assertThat(aliasHandler.aliasPropertiesAreValid(requestBody, existingEntity)).isFalse();
}

@Test
final void shouldReturnFalse_DefaultSetting() {
AliasEntitiesConfig aliasEntitiesConfig = new AliasEntitiesConfig();
assertFalse(aliasEntitiesConfig.aliasEntitiesEnabled(false));
}
}

protected abstract class ExistingAlias_AliasFeatureEnabled extends Base {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import org.cloudfoundry.identity.uaa.scim.ScimUserAliasHandler;
import org.cloudfoundry.identity.uaa.scim.ScimUserProvisioning;
import org.cloudfoundry.identity.uaa.scim.exception.ScimException;
import org.cloudfoundry.identity.uaa.scim.exception.ScimResourceConflictException;
import org.cloudfoundry.identity.uaa.scim.validate.PasswordValidator;
import org.cloudfoundry.identity.uaa.security.IsSelfCheck;
import org.cloudfoundry.identity.uaa.util.AlphanumericRandomValueStringGenerator;
Expand All @@ -26,6 +27,7 @@
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.dao.OptimisticLockingFailureException;
import org.springframework.http.HttpStatus;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
Expand Down Expand Up @@ -123,7 +125,7 @@ void setUp() {

lenient().when(transactionTemplate.execute(any())).then(invocationOnMock -> {
final TransactionCallback<?> callback = invocationOnMock.getArgument(0);
return callback.doInTransaction(mock(TransactionStatus.class));
return callback != null ? callback.doInTransaction(mock(TransactionStatus.class)) : null;
});
}

Expand Down Expand Up @@ -177,6 +179,21 @@ void shouldThrow_WhenAliasPropertiesAreInvalid() {
assertThat(exception.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST);
}

@Test
void shouldThrow_WhenAliasIsNotPresent() {
final ScimUser user = buildScimUser(UAA, origin);

when(scimUserAliasHandler.aliasPropertiesAreValid(user, null)).thenReturn(true);
when(scimUserAliasHandler.ensureConsistencyOfAliasEntity(user, null)).thenReturn(null);

final MockHttpServletRequest req = new MockHttpServletRequest();
final MockHttpServletResponse res = new MockHttpServletResponse();
final IllegalStateException exception = assertThrows(IllegalStateException.class, () ->
scimUserEndpoints.createUser(user, req, res)
);
assertThat(exception.getMessage()).isEqualTo("The persisted user is not present after handling the alias.");
}

@Test
void shouldReturnOriginalUser() {
final ScimUser user = buildScimUser(UAA, origin);
Expand Down Expand Up @@ -246,6 +263,28 @@ void shouldThrow_IfAliasPropertiesAreInvalid() {
assertThat(exception.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST);
}

@Test
void shouldThrow_IfAliasIsLocked() {
when(scimUserAliasHandler.aliasPropertiesAreValid(originalUser, existingOriginalUser))
.thenReturn(true);
when(transactionTemplate.execute(any())).then(invocationOnMock -> {
throw new OptimisticLockingFailureException("The alias is locked.");
});

final ScimResourceConflictException exception = assertThrows(ScimResourceConflictException.class, () ->
scimUserEndpoints.updateUser(
originalUser,
originalUser.getId(),
"*",
new MockHttpServletRequest(),
new MockHttpServletResponse(),
null
)
);
assertThat(exception.getMessage()).isEqualTo("The alias is locked.");
assertThat(exception.getStatus()).isEqualTo(HttpStatus.CONFLICT);
}

@Test
void shouldAlsoUpdateAliasUserIfPresent() {
when(scimUserAliasHandler.aliasPropertiesAreValid(originalUser, existingOriginalUser))
Expand Down Expand Up @@ -467,6 +506,20 @@ void shouldThrowException_IfUserHasExistingAlias() {
.isEqualTo("Could not delete user with alias since alias entities are disabled.");
assertThat(exception.getHttpStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
}

@Test
void shouldDeleteUserIfPresent() {
ScimUser originalUser = buildScimUser("123456789", "uaa");
when(scimUserProvisioning.retrieve(any(), any())).thenReturn(originalUser);
final ScimUser response = scimUserEndpoints.deleteUser(
"12345678",
null,
new MockHttpServletRequest(),
new MockHttpServletResponse()
);

assertScimUsersAreEqual(response, originalUser);
}
}
}

Expand Down

0 comments on commit 3acb204

Please sign in to comment.