package org.keycloak.testsuite.console.users; import org.jboss.arquillian.graphene.page.Page; import org.junit.Before; import org.junit.Test; import org.keycloak.testsuite.auth.page.account.Account; import org.keycloak.testsuite.auth.page.login.UpdateAccount; import org.keycloak.testsuite.auth.page.login.UpdatePassword; import org.keycloak.testsuite.console.page.authentication.RequiredActions; import org.keycloak.testsuite.console.page.users.UserAttributes; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import static org.jboss.arquillian.graphene.Graphene.waitGui; import static org.keycloak.representations.idm.CredentialRepresentation.PASSWORD; import static org.keycloak.testsuite.auth.page.AuthRealm.TEST; import static org.keycloak.testsuite.model.RequiredUserAction.*; import static org.keycloak.testsuite.util.URLAssert.assertCurrentUrlStartsWith; /** * @author tkyjovsk * @author mhajas */ public class RequiredUserActionsTest extends AbstractUserTest { @Page private UserAttributes userAttributesPage; @Page private Account testRealmAccountPage; @Page private UpdateAccount testRealmUpdateAccountPage; @Page private UpdatePassword testRealmUpdatePasswordPage; @Page private RequiredActions requiredActionsPage; @FindBy(css = "kc-feedback-text") protected WebElement feedbackText; public void waitForFeedbackText(String text) { waitGui().until().element(By.className("kc-feedback-text")) .text().contains(text); } @Override public void setDefaultPageUriParameters() { super.setDefaultPageUriParameters(); testRealmAccountPage.setAuthRealm(TEST); testRealmUpdateAccountPage.setAuthRealm(TEST); testRealmUpdatePasswordPage.setAuthRealm(TEST); } @Before public void beforeRequiredActionsTest() { // usersPage.table().viewAllUsers(); // usersPage.table().clickUser(testUser.getUsername()); userAttributesPage.setId(testUser.getId()); userAttributesPage.navigateTo(); } @Test public void updatePassword() { userAttributesPage.form().addRequiredAction(UPDATE_PASSWORD.getActionName()); userAttributesPage.form().save(); assertAlertSuccess(); testRealmAccountPage.navigateTo(); testRealmLoginPage.form().login(testUser); waitForFeedbackText("You need to change your password to activate your account."); testRealmUpdatePasswordPage.updatePasswords(null, null); waitForFeedbackText("Please specify password."); testRealmUpdatePasswordPage.updatePasswords(PASSWORD, null); waitForFeedbackText("Passwords don't match."); testRealmUpdatePasswordPage.updatePasswords(PASSWORD, PASSWORD + "-mismatch"); waitForFeedbackText("Passwords don't match."); testRealmUpdatePasswordPage.updatePasswords(PASSWORD, PASSWORD); assertCurrentUrlStartsWith(testRealmAccountPage); } @Test public void updateProfile() { userAttributesPage.form().addRequiredAction(UPDATE_PROFILE.getActionName()); userAttributesPage.form().save(); assertAlertSuccess(); testRealmAccountPage.navigateTo(); testRealmLoginPage.form().login(testUser); waitForFeedbackText("You need to update your user profile to activate your account."); testUser.setEmail(null); testUser.setFirstName(null); testUser.setLastName(null); testRealmUpdateAccountPage.updateAccount(testUser); waitForFeedbackText("Please specify email."); testUser.setEmail("test@email.test"); testRealmUpdateAccountPage.updateAccount(testUser); waitForFeedbackText("Please specify first name."); testUser.setFirstName("test"); testRealmUpdateAccountPage.updateAccount(testUser); waitForFeedbackText("Please specify last name."); testUser.setLastName("user"); testRealmUpdateAccountPage.updateAccount(testUser); assertCurrentUrlStartsWith(testRealmAccountPage); } @Test public void termsAndConditions() { requiredActionsPage.navigateTo(); requiredActionsPage.setTermsAndConditionEnabled(true); manage().users(); usersPage.table().viewAllUsers(); usersPage.table().clickUser(testUser.getUsername()); userAttributesPage.form().addRequiredAction(TERMS_AND_CONDITIONS.getActionName()); userAttributesPage.form().save(); assertAlertSuccess(); testRealmAccountPage.navigateTo(); testRealmLoginPage.form().login(testUser); driver.findElement(By.xpath("//div[@id='kc-header-wrapper' and text()[contains(.,'Terms and Conditions')]]")); } }