in component-test/src/main/java/TestPasswords.java [39:80]
public void testAdminChangeUserPassword() throws InterruptedException {
final String username = createUserWithNonexpiredPassword(AHMES_PASSWORD, ADMIN_ROLE);
try (final AutoUserContext ignore = loginAdmin()) {
final String newPassword = TestEnvironment.encodePassword(
AHMES_PASSWORD + "make_it_a_little_longer");
{
//Important here is that we are changing the password *as*the*admin*.
getTestSubject().changeUserPassword(username, new Password(newPassword));
boolean found = eventRecorder.wait(EventConstants.OPERATION_PUT_USER_PASSWORD, username);
Assert.assertTrue(found);
}
final Authentication newPasswordAuthentication = getTestSubject().login(username, newPassword);
try (final AutoUserContext ignore2 = new AutoUserContext(username, newPasswordAuthentication.getAccessToken()))
{
getTestSubject().createUser(new UserWithPassword("Ahmes_friend", "scribe",
TestEnvironment.encodePassword(AHMES_FRIENDS_PASSWORD)));
Assert.fail("createUser should've thrown an exception because the password is admin reset.");
}
catch (final NotFoundException ex)
{
//Should throw because under the new password, the user has only the right to change the password.
}
try (final AutoUserContext ignore3 = new AutoUserContext(username, newPasswordAuthentication.getAccessToken()))
{
getTestSubject().changeUserPassword(username, new Password(newPassword));
boolean found = eventRecorder.wait(EventConstants.OPERATION_PUT_USER_PASSWORD, username);
Assert.assertTrue(found);
}
final Authentication newPasswordAuthenticationAsFullyPermissionedUser = getTestSubject().login(username, newPassword);
try (final AutoUserContext ignore4 = new AutoUserContext(username, newPasswordAuthenticationAsFullyPermissionedUser.getAccessToken()))
{
//Now it should be possible to create a user since the user changed the password herself.
getTestSubject().createUser(new UserWithPassword("Ahmes_friend", "scribe",
TestEnvironment.encodePassword(AHMES_FRIENDS_PASSWORD)));
}
}
}