diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionUpdateProfileWithUserProfileTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionUpdateProfileWithUserProfileTest.java index ae0cdc7e5b..e5a6cc784b 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionUpdateProfileWithUserProfileTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/actions/RequiredActionUpdateProfileWithUserProfileTest.java @@ -16,6 +16,8 @@ */ package org.keycloak.testsuite.actions; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -31,6 +33,7 @@ import static org.keycloak.testsuite.forms.VerifyProfileTest.CONFIGURATION_FOR_U import java.util.ArrayList; import java.util.Collections; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -48,21 +51,20 @@ import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.pages.AppPage.RequestType; import org.keycloak.testsuite.util.ClientScopeBuilder; import org.keycloak.testsuite.util.KeycloakModelUtils; -import org.keycloak.userprofile.EventAuditingAttributeChangeListener; import org.openqa.selenium.By; /** - * + * * @author Vlastimil Elias * */ @EnableFeature(value = Profile.Feature.DECLARATIVE_USER_PROFILE) @AuthServerContainerExclude(AuthServerContainerExclude.AuthServer.REMOTE) public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActionUpdateProfileTest { - + protected static final String PASSWORD = "password"; protected static final String USERNAME1 = "test-user@localhost"; - + private static ClientRepresentation client_scope_default; private static ClientRepresentation client_scope_optional; @@ -70,44 +72,44 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi protected boolean isDynamicForm() { return true; } - + @Override public void configureTestRealm(RealmRepresentation testRealm) { super.configureTestRealm(testRealm); - + VerifyProfileTest.enableDynamicUserProfile(testRealm); - + testRealm.setClientScopes(new ArrayList<>()); testRealm.getClientScopes().add(ClientScopeBuilder.create().name(SCOPE_DEPARTMENT).protocol("openid-connect").build()); testRealm.getClientScopes().add(ClientScopeBuilder.create().name("profile").protocol("openid-connect").build()); - + client_scope_default = KeycloakModelUtils.createClient(testRealm, "client-a"); client_scope_default.setDefaultClientScopes(Collections.singletonList(SCOPE_DEPARTMENT)); client_scope_default.setRedirectUris(Collections.singletonList("*")); client_scope_optional = KeycloakModelUtils.createClient(testRealm, "client-b"); client_scope_optional.setOptionalClientScopes(Collections.singletonList(SCOPE_DEPARTMENT)); client_scope_optional.setRedirectUris(Collections.singletonList("*")); - + } - + @Before public void beforeTest() { VerifyProfileTest.setUserProfileConfiguration(testRealm(),null); super.beforeTest(); } - + @Test public void testDisplayName() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + "]}"); loginPage.open(); loginPage.login(USERNAME1, PASSWORD); - + updateProfilePage.assertCurrent(); //assert field names @@ -117,7 +119,7 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi Assert.assertEquals("lastName",updateProfilePage.getLabelForField("lastName")); // direct value in display name Assert.assertEquals("Department",updateProfilePage.getLabelForField("department")); - + } @Test @@ -199,35 +201,35 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi loginPage.login(USERNAME1, PASSWORD); updateProfilePage.assertCurrent(); - + //assert fields location in form Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(1) > div:nth-child(2) > input#lastName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(1) > div:nth-child(2) > input#lastName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(2) > div:nth-child(2) > input#department") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(2) > div:nth-child(2) > input#department") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(3) > div:nth-child(2) > input#username") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(3) > div:nth-child(2) > input#username") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(4) > div:nth-child(2) > input#firstName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(4) > div:nth-child(2) > input#firstName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(5) > div:nth-child(2) > input#email") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(5) > div:nth-child(2) > input#email") + ).isDisplayed() ); } - + @Test public void testAttributeInputTypes() { @@ -239,10 +241,10 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi loginPage.login(USERNAME1, PASSWORD); updateProfilePage.assertCurrent(); - + RegisterWithUserProfileTest.assertFieldTypes(driver); } - + @Test public void testUsernameOnlyIfEditAllowed() { RealmRepresentation realm = testRealm().toRepresentation(); @@ -267,14 +269,14 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi testRealm().update(realm); } } - + @Test public void testOptionalAttribute() { setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}" + "]}"); - + loginPage.open(); loginPage.login(USERNAME1, PASSWORD); @@ -295,20 +297,20 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi // assert user is really updated in persistent store UserRepresentation user = ActionUtil.findUserWithAdminClient(adminClient, USERNAME1); Assert.assertEquals("New first", user.getFirstName()); - Assert.assertEquals("", user.getLastName()); + assertThat(StringUtils.isEmpty(user.getLastName()), is(true)); Assert.assertEquals("new@email.com", user.getEmail()); Assert.assertEquals(USERNAME1, user.getUsername()); } - + @Test public void testCustomValidationLastName() { - + setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUserByUsername(USERNAME1, "ExistingFirst", "La", "Department"); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"lastName\"," + PERMISSIONS_ALL +","+VALIDATIONS_LENGTH + "}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL +","+VALIDATIONS_LENGTH + "}," + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_ONLY + "}" + "]}"); @@ -332,14 +334,14 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi //check that not configured attribute is unchanged assertEquals("Department", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testRequiredReadOnlyAttribute() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -348,7 +350,7 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi updateProfilePage.assertCurrent(); Assert.assertEquals("Brady", updateProfilePage.getLastName()); Assert.assertFalse(updateProfilePage.isDepartmentEnabled()); - + //update of the other attributes must be successful in this case updateProfilePage.update("First", "Last", USERNAME1, USERNAME1); @@ -386,14 +388,14 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi assertEquals("First", user.getFirstName()); assertEquals("Last", user.getLastName()); } - + @Test public void testAttributeNotVisible() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_ONLY + ", \"required\":{}}" + + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_ONLY + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -402,7 +404,7 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi updateProfilePage.assertCurrent(); Assert.assertEquals("Brady", updateProfilePage.getLastName()); Assert.assertFalse("'department' field is visible" , updateProfilePage.isDepartmentPresent()); - + //update of the other attributes must be successful in this case updateProfilePage.update("First", "Last", USERNAME1, USERNAME1); @@ -413,14 +415,14 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi assertEquals("First", user.getFirstName()); assertEquals("Last", user.getLastName()); } - + @Test public void testRequiredAttribute() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -431,17 +433,17 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi //submit with error updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "", USERNAME1, USERNAME1); updateProfilePage.assertCurrent(); - + //submit OK updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "DepartmentCC", USERNAME1, USERNAME1); - // we also test additional attribute configured to be audited in the event + // we also test additional attribute configured to be audited in the event events.expectRequiredAction(EventType.UPDATE_PROFILE) - .detail(Details.PREVIOUS_FIRST_NAME, "Tom").detail(Details.UPDATED_FIRST_NAME, "FirstCC") - .detail(Details.PREVIOUS_LAST_NAME, "Brady").detail(Details.UPDATED_LAST_NAME, "LastCC") - .detail(Details.PREF_UPDATED + "department", "DepartmentCC") - .assertEvent(); - + .detail(Details.PREVIOUS_FIRST_NAME, "Tom").detail(Details.UPDATED_FIRST_NAME, "FirstCC") + .detail(Details.PREVIOUS_LAST_NAME, "Brady").detail(Details.UPDATED_LAST_NAME, "LastCC") + .detail(Details.PREF_UPDATED + "department", "DepartmentCC") + .assertEvent(); + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -453,33 +455,33 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi @Test public void testAttributeRequiredForScope() { - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login(USERNAME1, PASSWORD); - + updateProfilePage.assertCurrent(); - + //submit with error updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "", USERNAME1, USERNAME1); updateProfilePage.assertCurrent(); - + //submit OK updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "DepartmentCC", USERNAME1, USERNAME1); - - events.expectRequiredAction(EventType.UPDATE_PROFILE).client(client_scope_optional.getClientId()) - .detail(Details.PREVIOUS_FIRST_NAME, "Tom").detail(Details.UPDATED_FIRST_NAME, "FirstCC") - .detail(Details.PREVIOUS_LAST_NAME, "Brady").detail(Details.UPDATED_LAST_NAME, "LastCC") - .assertEvent(); - + events.expectRequiredAction(EventType.UPDATE_PROFILE).client(client_scope_optional.getClientId()) + .detail(Details.PREVIOUS_FIRST_NAME, "Tom").detail(Details.UPDATED_FIRST_NAME, "FirstCC") + .detail(Details.PREVIOUS_LAST_NAME, "Brady").detail(Details.UPDATED_LAST_NAME, "LastCC") + .assertEvent(); + + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -488,18 +490,18 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi assertEquals("LastCC", user.getLastName()); assertEquals("DepartmentCC", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testAttributeRequiredForDefaultScope() { - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.clientId(client_scope_default.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login(USERNAME1, PASSWORD); @@ -508,10 +510,10 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi //submit with error updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "", USERNAME1, USERNAME1); updateProfilePage.assertCurrent(); - + //submit OK updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "DepartmentCC", USERNAME1, USERNAME1); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -520,18 +522,18 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi assertEquals("LastCC", user.getLastName()); assertEquals("DepartmentCC", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testAttributeRequiredAndSelectedByScope() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login(USERNAME1, PASSWORD); @@ -540,10 +542,10 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi //submit with error updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "", USERNAME1, USERNAME1); updateProfilePage.assertCurrent(); - + //submit OK updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "DepartmentCC", USERNAME1, USERNAME1); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -556,22 +558,22 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi @Test public void testAttributeNotRequiredAndSelectedByScopeCanBeUpdated() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login(USERNAME1, PASSWORD); updateProfilePage.assertCurrent(); - + Assert.assertTrue(updateProfilePage.isDepartmentPresent()); updateProfilePage.updateWithDepartment("FirstCC", "LastCC", "DepartmentCC", USERNAME1, USERNAME1); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -580,26 +582,26 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi assertEquals("LastCC", user.getLastName()); assertEquals("DepartmentCC", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testAttributeRequiredButNotSelectedByScopeIsNotRendered() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login(USERNAME1, PASSWORD); updateProfilePage.assertCurrent(); - + Assert.assertFalse(updateProfilePage.isDepartmentPresent()); updateProfilePage.update("FirstCC", "LastCC", USERNAME1, USERNAME1); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -621,11 +623,11 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi protected void setUserProfileConfiguration(String configuration) { VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); } - + protected UserRepresentation getUserByUsername(String username) { return VerifyProfileTest.getUserByUsername(testRealm(), username); } - + protected void updateUserByUsername(String username, String firstName, String lastName, String department) { UserRepresentation ur = getUserByUsername(username); ur.setFirstName(firstName); @@ -634,4 +636,4 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends RequiredActi testRealm().users().get(ur.getId()).update(ur); } -} +} \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginWithUserProfileTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginWithUserProfileTest.java index fff53ddfae..28540e4fbf 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginWithUserProfileTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginWithUserProfileTest.java @@ -16,6 +16,8 @@ */ package org.keycloak.testsuite.broker; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.keycloak.testsuite.broker.BrokerTestTools.getConsumerRoot; import static org.keycloak.testsuite.broker.BrokerTestTools.waitForPage; @@ -23,6 +25,7 @@ import static org.keycloak.testsuite.forms.VerifyProfileTest.ATTRIBUTE_DEPARTMEN import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ADMIN_EDITABLE; import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -37,35 +40,35 @@ import org.keycloak.testsuite.util.ClientScopeBuilder; import org.openqa.selenium.By; /** - * + * * @author Vlastimil Elias * */ @EnableFeature(value = Profile.Feature.DECLARATIVE_USER_PROFILE) @AuthServerContainerExclude(AuthServerContainerExclude.AuthServer.REMOTE) public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBrokerLoginTest { - + @Override @Before public void beforeBrokerTest() { super.beforeBrokerTest(); enableDynamicUserProfile(); } - + @Test public void testDisplayName() { updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); @@ -80,7 +83,7 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker @Test public void testAttributeGrouping() { - + updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); setUserProfileConfiguration("{\"attributes\": [" @@ -102,7 +105,7 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker //assert fields location in form String htmlFormId = "kc-idp-review-profile-form"; - + //assert fields and groups location in form Assert.assertTrue( driver.findElement( @@ -145,10 +148,10 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker ).isDisplayed() ); } - + @Test public void testAttributeGuiOrder() { - + updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); setUserProfileConfiguration("{\"attributes\": [" @@ -161,42 +164,42 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); - + //assert fields location in form String htmlFormId = "kc-idp-review-profile-form"; Assert.assertTrue( - driver.findElement( - By.cssSelector("form#"+htmlFormId+" > div:nth-child(1) > div:nth-child(2) > input#lastName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#"+htmlFormId+" > div:nth-child(1) > div:nth-child(2) > input#lastName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#"+htmlFormId+" > div:nth-child(2) > div:nth-child(2) > input#department") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#"+htmlFormId+" > div:nth-child(2) > div:nth-child(2) > input#department") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#"+htmlFormId+" > div:nth-child(3) > div:nth-child(2) > input#username") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#"+htmlFormId+" > div:nth-child(3) > div:nth-child(2) > input#username") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#"+htmlFormId+" > div:nth-child(4) > div:nth-child(2) > input#firstName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#"+htmlFormId+" > div:nth-child(4) > div:nth-child(2) > input#firstName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#"+htmlFormId+" > div:nth-child(5) > div:nth-child(2) > input#email") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#"+htmlFormId+" > div:nth-child(5) > div:nth-child(2) > input#email") + ).isDisplayed() ); } - + @Test public void testAttributeInputTypes() { - + updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); setUserProfileConfiguration("{\"attributes\": [" @@ -205,22 +208,22 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); - + RegisterWithUserProfileTest.assertFieldTypes(driver); } - + @Test public void testDynamicUserProfileReviewWhenMissing_requiredReadOnlyAttributeDoesnotForceUpdate() { updateExecutions(AbstractBrokerTest::setUpMissingUpdateProfileOnFirstLogin); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + + "{\"name\": \"department\", " + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); @@ -229,18 +232,18 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker waitForAccountManagementTitle(); accountUpdateProfilePage.assertCurrent(); } - + @Test public void testDynamicUserProfileReviewWhenMissing_requiredButNotSelectedByScopeAttributeDoesnotForceUpdate() { addDepartmentScopeIntoRealm(); updateExecutions(AbstractBrokerTest::setUpMissingUpdateProfileOnFirstLogin); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"department\"]}}" + + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"department\"]}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); @@ -249,17 +252,17 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker waitForAccountManagementTitle(); accountUpdateProfilePage.assertCurrent(); } - + @Test public void testDynamicUserProfileReviewWhenMissing_requiredAndSelectedByScopeAttributeForcesUpdate() { updateExecutions(AbstractBrokerTest::setUpMissingUpdateProfileOnFirstLogin); - + //we use 'profile' scope which is requested by default - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"profile\"]}}" + + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"profile\"]}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); @@ -267,22 +270,22 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); - } - + } + @Test public void testDynamicUserProfileReview_requiredReadOnlyAttributeNotRenderedAndNotBlockingProcess() { updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + + "{\"name\": \"department\", " + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); @@ -294,22 +297,22 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker waitForAccountManagementTitle(); accountUpdateProfilePage.assertCurrent(); } - + @Test public void testDynamicUserProfileReview_attributeRequiredAndSelectedByScopeMustBeSet() { updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); //we use 'profile' scope which is requested by default - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"profile\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"profile\"]}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); @@ -327,22 +330,22 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker assertEquals("LastAA", user.getLastName()); assertEquals("DepartmentAA", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testDynamicUserProfileReview_attributeNotRequiredAndSelectedByScopeCanBeIgnored() { updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); - + //we use 'profile' scope which is requested by default - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\"profile\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\"profile\"]}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); @@ -355,24 +358,24 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker UserRepresentation user = VerifyProfileTest.getUserByUsername(testRealm(),"attributeNotRequiredAndSelectedByScopeCanBeIgnored"); assertEquals("FirstAA", user.getFirstName()); assertEquals("LastAA", user.getLastName()); - assertEquals("", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); + assertThat(StringUtils.isEmpty(user.firstAttribute(ATTRIBUTE_DEPARTMENT)), is(true)); } - + @Test public void testDynamicUserProfileReview_attributeNotRequiredAndSelectedByScopeCanBeSet() { updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); - + //we use 'profile' scope which is requested by default - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\"profile\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\"profile\"]}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); @@ -387,23 +390,23 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker assertEquals("LastAA", user.getLastName()); assertEquals("Department AA", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testDynamicUserProfileReview_attributeRequiredButNotSelectedByScopeIsNotRenderedAndNotBlockingProcess() { addDepartmentScopeIntoRealm(); - + updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"department\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\"department\"]}}" + "]}"); driver.navigate().to(getAccountUrl(getConsumerRoot(), bc.consumerRealmName())); logInWithBroker(bc); - + waitForPage(driver, "update account information", false); updateAccountInformationPage.assertCurrent(); @@ -422,7 +425,7 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker public void addDepartmentScopeIntoRealm() { testRealm().clientScopes().create(ClientScopeBuilder.create().name("department").protocol("openid-connect").build()); } - + protected void setUserProfileConfiguration(String configuration) { VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); } @@ -431,4 +434,4 @@ public class KcOidcFirstBrokerLoginWithUserProfileTest extends KcOidcFirstBroker return adminClient.realm(bc.consumerRealmName()); } -} +} \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterWithUserProfileTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterWithUserProfileTest.java index 6768dd3260..e697b1b708 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterWithUserProfileTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/RegisterWithUserProfileTest.java @@ -16,6 +16,8 @@ */ package org.keycloak.testsuite.forms; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; @@ -28,6 +30,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -50,7 +53,7 @@ import org.openqa.selenium.WebDriver; @EnableFeature(value = Profile.Feature.DECLARATIVE_USER_PROFILE) @AuthServerContainerExclude(AuthServerContainerExclude.AuthServer.REMOTE) public class RegisterWithUserProfileTest extends RegisterTest { - + private static final String SCOPE_LAST_NAME = "lastName"; private static ClientRepresentation client_scope_default; @@ -58,14 +61,14 @@ public class RegisterWithUserProfileTest extends RegisterTest { public static String UP_CONFIG_BASIC_ATTRIBUTES = "{\"name\": \"username\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"email\"," + PERMISSIONS_ALL + ", \"required\": {}},"; - + @Override public void configureTestRealm(RealmRepresentation testRealm) { - + super.configureTestRealm(testRealm); - + VerifyProfileTest.enableDynamicUserProfile(testRealm); - + testRealm.setClientScopes(new ArrayList<>()); testRealm.getClientScopes().add(ClientScopeBuilder.create().name(SCOPE_LAST_NAME).protocol("openid-connect").build()); testRealm.getClientScopes().add(ClientScopeBuilder.create().name(SCOPE_DEPARTMENT).protocol("openid-connect").build()); @@ -73,18 +76,18 @@ public class RegisterWithUserProfileTest extends RegisterTest { List scopes = new ArrayList<>(); scopes.add(SCOPE_LAST_NAME); scopes.add(SCOPE_DEPARTMENT); - + client_scope_default = KeycloakModelUtils.createClient(testRealm, "client-a"); client_scope_default.setDefaultClientScopes(scopes); client_scope_default.setRedirectUris(Collections.singletonList("*")); client_scope_optional = KeycloakModelUtils.createClient(testRealm, "client-b"); client_scope_optional.setOptionalClientScopes(scopes); - client_scope_optional.setRedirectUris(Collections.singletonList("*")); + client_scope_optional.setRedirectUris(Collections.singletonList("*")); } - + @Before public void beforeTest() { - VerifyProfileTest.setUserProfileConfiguration(testRealm(),null); + VerifyProfileTest.setUserProfileConfiguration(testRealm(),null); } @Test @@ -226,10 +229,10 @@ public class RegisterWithUserProfileTest extends RegisterTest { @Test public void testAttributeDisplayName() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -261,45 +264,45 @@ public class RegisterWithUserProfileTest extends RegisterTest { loginPage.clickRegister(); registerPage.assertCurrent(); - + //assert fields location in form Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-register-form > div:nth-child(1) > div:nth-child(2) > input#lastName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-register-form > div:nth-child(1) > div:nth-child(2) > input#lastName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-register-form > div:nth-child(2) > div:nth-child(2) > input#department") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-register-form > div:nth-child(2) > div:nth-child(2) > input#department") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-register-form > div:nth-child(3) > div:nth-child(2) > input#username") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-register-form > div:nth-child(3) > div:nth-child(2) > input#username") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-register-form > div:nth-child(4) > div:nth-child(2) > input#password") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-register-form > div:nth-child(4) > div:nth-child(2) > input#password") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-register-form > div:nth-child(5) > div:nth-child(2) > input#password-confirm") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-register-form > div:nth-child(5) > div:nth-child(2) > input#password-confirm") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-register-form > div:nth-child(6) > div:nth-child(2) > input#firstName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-register-form > div:nth-child(6) > div:nth-child(2) > input#firstName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-register-form > div:nth-child(7) > div:nth-child(2) > input#email") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-register-form > div:nth-child(7) > div:nth-child(2) > input#email") + ).isDisplayed() ); } - + public static final String UP_CONFIG_PART_INPUT_TYPES = "{\"name\": \"defaultType\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," + "{\"name\": \"placeholderAttribute\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"text\",\"inputTypePlaceholder\":\"Example.\"}}," + "{\"name\": \"helperTexts\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"text\",\"inputHelperTextBefore\":\"Example bold text before.\",\"inputHelperTextAfter\":\"Example i text after.\"}}," @@ -313,8 +316,8 @@ public class RegisterWithUserProfileTest extends RegisterTest { + "{\"name\": \"selectWithOptionsFromCustomValidatorAndLabels\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\":{\"dummyOptions\":{\"options\" : [\"vopt1\",\"vopt2\",\"vopt3\"]}} ,\"annotations\":{\"inputType\":\"select\",\"inputOptionsFromValidation\":\"dummyOptions\",\"inputOptionLabels\":{\"vopt1\": \"Option 1\",\"vopt2\":\"${username}\"}}}," + "{\"name\": \"selectRadiobuttons\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\" : {\"options\" : {\"options\":[\"opt1\",\"opt2\",\"opt3\"]}}, \"annotations\":{\"inputType\":\"select-radiobuttons\",\"inputOptionLabels\":{\"opt1\": \"Option 1\",\"opt2\":\"${username}\"}}}," + "{\"name\": \"selectRadiobuttonsWithOptionsFromCustomValidatorAndLabels\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\" : {\"dummyOptions\" : {\"options\" : [\"vopt1\",\"vopt2\",\"vopt3\"]}} ,\"annotations\":{\"inputType\":\"select-radiobuttons\",\"inputOptionsFromValidation\":\"dummyOptions\",\"inputOptionLabels\":{\"vopt1\": \"Option 1\",\"vopt2\":\"${username}\"}}}," - + "{\"name\": \"multiselectCheckboxes\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\": {\"options\":{\"options\":[\"opt1\",\"opt2\",\"opt3\"]}}, \"annotations\":{\"inputType\":\"multiselect-checkboxes\",\"inputOptionLabels\":{\"opt1\": \"Option 1\",\"opt2\":\"${username}\"}}}"; - + + "{\"name\": \"multiselectCheckboxes\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\": {\"options\":{\"options\":[\"opt1\",\"opt2\",\"opt3\"]}}, \"annotations\":{\"inputType\":\"multiselect-checkboxes\",\"inputOptionLabels\":{\"opt1\": \"Option 1\",\"opt2\":\"${username}\"}}}"; + @Test public void testAttributeInputTypes() { @@ -324,27 +327,27 @@ public class RegisterWithUserProfileTest extends RegisterTest { loginPage.clickRegister(); registerPage.assertCurrent(); - + assertFieldTypes(driver); } public static void assertFieldTypes(WebDriver driver) { Assert.assertEquals("text", driver.findElement(By.cssSelector("input#defaultType")).getAttribute("type")); - + Assert.assertEquals("text", driver.findElement(By.cssSelector("input#placeholderAttribute")).getAttribute("type")); Assert.assertEquals("Example.", driver.findElement(By.cssSelector("input#placeholderAttribute")).getAttribute("placeholder")); - + Assert.assertEquals("Example bold text before.", driver.findElement(By.cssSelector("div#form-help-text-before-helperTexts")).getText()); Assert.assertEquals("bold text", driver.findElement(By.cssSelector("div#form-help-text-before-helperTexts b")).getText()); Assert.assertEquals("Example i text after.", driver.findElement(By.cssSelector("div#form-help-text-after-helperTexts")).getText()); Assert.assertEquals("i text", driver.findElement(By.cssSelector("div#form-help-text-after-helperTexts i")).getText()); - + Assert.assertEquals("text", driver.findElement(By.cssSelector("input#textWithBasicAttributes")).getAttribute("type")); Assert.assertEquals("35", driver.findElement(By.cssSelector("input#textWithBasicAttributes")).getAttribute("size")); Assert.assertEquals("1", driver.findElement(By.cssSelector("input#textWithBasicAttributes")).getAttribute("minlength")); Assert.assertEquals("10", driver.findElement(By.cssSelector("input#textWithBasicAttributes")).getAttribute("maxlength")); Assert.assertEquals(".*", driver.findElement(By.cssSelector("input#textWithBasicAttributes")).getAttribute("pattern")); - + Assert.assertEquals("number", driver.findElement(By.cssSelector("input#html5NumberWithAttributes")).getAttribute("type")); Assert.assertEquals("10", driver.findElement(By.cssSelector("input#html5NumberWithAttributes")).getAttribute("min")); Assert.assertEquals("20", driver.findElement(By.cssSelector("input#html5NumberWithAttributes")).getAttribute("max")); @@ -355,7 +358,7 @@ public class RegisterWithUserProfileTest extends RegisterTest { Assert.assertEquals("10", driver.findElement(By.cssSelector("textarea#textareaWithAttributes")).getAttribute("maxlength")); Assert.assertEquals("5", driver.findElement(By.cssSelector("select#selectWithoutOptions")).getAttribute("size")); - + Assert.assertEquals(null, driver.findElement(By.cssSelector("select#selectWithOptionsWithoutLabels")).getAttribute("multiple")); Assert.assertEquals("opt1", driver.findElement(By.cssSelector("select#selectWithOptionsWithoutLabels option[value=opt1]")).getText()); Assert.assertEquals("opt2", driver.findElement(By.cssSelector("select#selectWithOptionsWithoutLabels option[value=opt2]")).getText()); @@ -369,12 +372,12 @@ public class RegisterWithUserProfileTest extends RegisterTest { Assert.assertEquals("Option 1", driver.findElement(By.cssSelector("select#multiselectWithOptionsAndLabels option[value=opt1]")).getText()); Assert.assertEquals("Username", driver.findElement(By.cssSelector("select#multiselectWithOptionsAndLabels option[value=opt2]")).getText()); Assert.assertEquals("opt3", driver.findElement(By.cssSelector("select#multiselectWithOptionsAndLabels option[value=opt3]")).getText()); - + Assert.assertEquals(null, driver.findElement(By.cssSelector("select#selectWithOptionsFromCustomValidatorAndLabels")).getAttribute("multiple")); Assert.assertEquals("Option 1", driver.findElement(By.cssSelector("select#selectWithOptionsFromCustomValidatorAndLabels option[value=vopt1]")).getText()); Assert.assertEquals("Username", driver.findElement(By.cssSelector("select#selectWithOptionsFromCustomValidatorAndLabels option[value=vopt2]")).getText()); Assert.assertEquals("vopt3", driver.findElement(By.cssSelector("select#selectWithOptionsFromCustomValidatorAndLabels option[value=vopt3]")).getText()); - + Assert.assertEquals("radio", driver.findElement(By.cssSelector("input#selectRadiobuttons-opt1")).getAttribute("type")); Assert.assertEquals("Option 1", driver.findElement(By.cssSelector("label[for=selectRadiobuttons-opt1]")).getText()); Assert.assertEquals("radio", driver.findElement(By.cssSelector("input#selectRadiobuttons-opt2")).getAttribute("type")); @@ -416,7 +419,7 @@ public class RegisterWithUserProfileTest extends RegisterTest { registerPage.assertCurrent(); String htmlFormId="kc-register-form"; - + //assert fields and groups location in form Assert.assertTrue( driver.findElement( @@ -473,10 +476,10 @@ public class RegisterWithUserProfileTest extends RegisterTest { @Test public void testRegisterUserSuccess_requiredReadOnlyAttributeNotRenderedAndNotBlockingRegistration() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -497,10 +500,10 @@ public class RegisterWithUserProfileTest extends RegisterTest { @Test public void testRegisterUserSuccess_attributeRequiredAndSelectedByScopeMustBeSet() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); @@ -525,10 +528,10 @@ public class RegisterWithUserProfileTest extends RegisterTest { @Test public void testRegisterUserSuccess_attributeNotRequiredAndSelectedByScopeCanBeIgnored() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); @@ -545,16 +548,16 @@ public class RegisterWithUserProfileTest extends RegisterTest { UserRepresentation user = getUser(userId); assertEquals("FirstAA", user.getFirstName()); assertEquals("LastAA", user.getLastName()); - assertEquals("", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); + assertThat(StringUtils.isEmpty(user.firstAttribute(ATTRIBUTE_DEPARTMENT)), is(true)); } @Test public void testRegisterUserSuccess_attributeNotRequiredAndSelectedByScopeCanBeSet() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.clientId(client_scope_default.getClientId()).openLoginForm(); @@ -577,10 +580,10 @@ public class RegisterWithUserProfileTest extends RegisterTest { @Test public void testRegisterUserSuccess_attributeRequiredButNotSelectedByScopeIsNotRenderedAndNotBlockingRegistration() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.clientId(client_scope_optional.getClientId()).openLoginForm(); @@ -613,10 +616,15 @@ public class RegisterWithUserProfileTest extends RegisterTest { assertEquals(username.toLowerCase(), user.getUsername()); assertEquals(email.toLowerCase(), user.getEmail()); assertEquals(firstName, user.getFirstName()); - assertEquals(lastName, user.getLastName()); + + if (StringUtils.isEmpty(lastName)) { + assertThat(StringUtils.isEmpty(user.getLastName()), is(true)); + } else { + assertThat(user.getLastName(), is(lastName)); + } } - + protected void setUserProfileConfiguration(String configuration) { VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); } -} +} \ No newline at end of file diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/VerifyProfileTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/VerifyProfileTest.java index 83e6717605..7b1ca0d008 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/VerifyProfileTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/VerifyProfileTest.java @@ -16,6 +16,8 @@ */ package org.keycloak.testsuite.forms; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -29,6 +31,7 @@ import java.util.UUID; import javax.ws.rs.core.Response; +import org.apache.commons.lang3.StringUtils; import org.jboss.arquillian.graphene.page.Page; import org.jboss.arquillian.test.api.ArquillianResource; import org.junit.Assert; @@ -58,7 +61,6 @@ import org.keycloak.testsuite.util.OAuthClient; import org.keycloak.testsuite.util.RealmBuilder; import org.keycloak.testsuite.util.UserBuilder; import org.keycloak.userprofile.UserProfileContext; -import org.keycloak.userprofile.EventAuditingAttributeChangeListener; import org.openqa.selenium.By; /** @@ -67,31 +69,31 @@ import org.openqa.selenium.By; @EnableFeature(value = Profile.Feature.DECLARATIVE_USER_PROFILE) @AuthServerContainerExclude(AuthServerContainerExclude.AuthServer.REMOTE) public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { - + public static final String SCOPE_DEPARTMENT = "department"; public static final String ATTRIBUTE_DEPARTMENT = "department"; - + public static final String PERMISSIONS_ALL = "\"permissions\": {\"view\": [\"admin\", \"user\"], \"edit\": [\"admin\", \"user\"]}"; public static final String PERMISSIONS_ADMIN_ONLY = "\"permissions\": {\"view\": [\"admin\"], \"edit\": [\"admin\"]}"; public static final String PERMISSIONS_ADMIN_EDITABLE = "\"permissions\": {\"view\": [\"admin\", \"user\"], \"edit\": [\"admin\"]}"; - + public static String VALIDATIONS_LENGTH = "\"validations\": {\"length\": { \"min\": 3, \"max\": 255 }}"; - public static final String CONFIGURATION_FOR_USER_EDIT = "{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + public static final String CONFIGURATION_FOR_USER_EDIT = "{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + "}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + "}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + "}" + "]}"; - + private static String userId; private static String user2Id; - + private static String user3Id; - + private static String user4Id; - + private static String user5Id; private static String user6Id; @@ -101,9 +103,9 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { @Override public void configureTestRealm(RealmRepresentation testRealm) { - + enableDynamicUserProfile(testRealm); - + UserRepresentation user = UserBuilder.create().id(UUID.randomUUID().toString()).username("login-test").email("login@test.com").enabled(true).password("password").build(); userId = user.getId(); @@ -112,10 +114,10 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { UserRepresentation user3 = UserBuilder.create().id(UUID.randomUUID().toString()).username("login-test3").email("login3@test.com").enabled(true).password("password").lastName("ExistingLast").build(); user3Id = user3.getId(); - + UserRepresentation user4 = UserBuilder.create().id(UUID.randomUUID().toString()).username("login-test4").email("login4@test.com").enabled(true).password("password").lastName("ExistingLast").build(); user4Id = user4.getId(); - + UserRepresentation user5 = UserBuilder.create().id(UUID.randomUUID().toString()).username("login-test5").email("login5@test.com").enabled(true).password("password").firstName("ExistingFirst").lastName("ExistingLast").build(); user5Id = user5.getId(); @@ -134,7 +136,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { List actions = new ArrayList<>(); actions.add(action); testRealm.setRequiredActions(actions); - + testRealm.setClientScopes(new ArrayList<>()); testRealm.getClientScopes().add(ClientScopeBuilder.create().name(SCOPE_DEPARTMENT).protocol("openid-connect").build()); testRealm.getClientScopes().add(ClientScopeBuilder.create().name("profile").protocol("openid-connect").build()); @@ -157,20 +159,20 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { @Page protected VerifyProfilePage verifyProfilePage; - + @ArquillianResource protected OAuthClient oauth; - + @Test public void testDisplayName() { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\",\"displayName\":\"${firstName}\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + + "{\"name\": \"department\", \"displayName\" : \"Department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -186,7 +188,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { // direct value in display name Assert.assertEquals("Department",verifyProfilePage.getLabelForField("department")); } - + @Test public void testAttributeGrouping() { @@ -209,7 +211,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { verifyProfilePage.assertCurrent(); String htmlFormId="kc-update-profile-form"; - + //assert fields and groups location in form Assert.assertTrue( driver.findElement( @@ -271,35 +273,35 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { loginPage.login("login-test5", "password"); verifyProfilePage.assertCurrent(); - + //assert fields location in form Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(1) > div:nth-child(2) > input#lastName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(1) > div:nth-child(2) > input#lastName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(2) > div:nth-child(2) > input#department") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(2) > div:nth-child(2) > input#department") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(3) > div:nth-child(2) > input#username") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(3) > div:nth-child(2) > input#username") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(4) > div:nth-child(2) > input#firstName") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(4) > div:nth-child(2) > input#firstName") + ).isDisplayed() ); Assert.assertTrue( - driver.findElement( - By.cssSelector("form#kc-update-profile-form > div:nth-child(5) > div:nth-child(2) > input#email") - ).isDisplayed() + driver.findElement( + By.cssSelector("form#kc-update-profile-form > div:nth-child(5) > div:nth-child(2) > input#email") + ).isDisplayed() ); } - + @Test public void testAttributeInputTypes() { @@ -315,20 +317,20 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { loginPage.login("login-test5", "password"); verifyProfilePage.assertCurrent(); - + RegisterWithUserProfileTest.assertFieldTypes(driver); } - + @Test public void testEvents() { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -337,22 +339,22 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { verifyProfilePage.assertCurrent(); //event when form is shown events.expectRequiredAction(EventType.VERIFY_PROFILE).user(user5Id).detail("fields_to_update", "department").assertEvent(); - + verifyProfilePage.update("First", "Last", "Department"); //event after profile is updated // we also test additional attribute configured to be audited in the event events.expectRequiredAction(EventType.UPDATE_PROFILE).user(user5Id) - .detail(Details.CONTEXT, UserProfileContext.UPDATE_PROFILE.name()) - .detail(Details.PREVIOUS_FIRST_NAME, "ExistingFirst").detail(Details.UPDATED_FIRST_NAME, "First") - .detail(Details.PREVIOUS_LAST_NAME, "ExistingLast").detail(Details.UPDATED_LAST_NAME, "Last") - .detail(Details.PREF_UPDATED+"department", "Department") - .assertEvent(); + .detail(Details.CONTEXT, UserProfileContext.UPDATE_PROFILE.name()) + .detail(Details.PREVIOUS_FIRST_NAME, "ExistingFirst").detail(Details.UPDATED_FIRST_NAME, "First") + .detail(Details.PREVIOUS_LAST_NAME, "ExistingLast").detail(Details.UPDATED_LAST_NAME, "Last") + .detail(Details.PREF_UPDATED+"department", "Department") + .assertEvent(); } - + @Test public void testDefaultProfile() { setUserProfileConfiguration(null); - + loginPage.open(); loginPage.login("login-test", "password"); @@ -360,12 +362,12 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { verifyProfilePage.assertCurrent(); Assert.assertFalse(verifyProfilePage.isDepartmentPresent()); verifyProfilePage.update("First", " "); - + //submit OK verifyProfilePage.assertCurrent(); Assert.assertFalse(verifyProfilePage.isDepartmentPresent()); verifyProfilePage.update("First", "Last"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -405,8 +407,8 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { @Test public void testOptionalAttribute() { setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}" + "]}"); loginPage.open(); @@ -420,18 +422,18 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { UserRepresentation user = getUser(user2Id); assertEquals("First", user.getFirstName()); - assertEquals("", user.getLastName()); + assertThat(StringUtils.isEmpty(user.getLastName()), is(true)); } - + @Test public void testCustomValidationLastName() { - + setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "La", "Department"); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"lastName\"," + PERMISSIONS_ALL +","+VALIDATIONS_LENGTH + "}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL +","+VALIDATIONS_LENGTH + "}," + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_ONLY + "}" + "]}"); @@ -455,16 +457,16 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { //check that not configured attribute is unchanged assertEquals("Department", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testNoActionIfNoValidationError() { - + setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", "Department"); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"lastName\"," + PERMISSIONS_ALL +","+VALIDATIONS_LENGTH + "}" + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL +","+VALIDATIONS_LENGTH + "}" + "]}"); loginPage.open(); @@ -502,14 +504,14 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { realmResource.update(realm); } } - + @Test public void testRequiredReadOnlyAttribute() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_EDITABLE + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -518,7 +520,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { verifyProfilePage.assertCurrent(); Assert.assertEquals("ExistingLast", verifyProfilePage.getLastName()); Assert.assertFalse(verifyProfilePage.isDepartmentEnabled()); - + //update of the other attributes must be successful in this case verifyProfilePage.update("First", "Last"); @@ -533,10 +535,10 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { @Test public void testAttributeNotVisible() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_ONLY + ", \"required\":{}}" + + "{\"name\": \"department\"," + PERMISSIONS_ADMIN_ONLY + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -545,7 +547,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { verifyProfilePage.assertCurrent(); Assert.assertEquals("ExistingLast", verifyProfilePage.getLastName()); Assert.assertFalse("'department' field is visible" , verifyProfilePage.isDepartmentPresent()); - + //update of the other attributes must be successful in this case verifyProfilePage.update("First", "Last"); @@ -556,17 +558,17 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { assertEquals("First", user.getFirstName()); assertEquals("Last", user.getLastName()); } - + @Test public void testRequiredAttribute() { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}}" + "]}"); loginPage.open(); @@ -577,7 +579,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { //submit with error verifyProfilePage.update("FirstCC", "LastCC", " "); verifyProfilePage.assertCurrent(); - + //submit OK verifyProfilePage.update("FirstCC", "LastCC", "DepartmentCC"); @@ -589,18 +591,18 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { assertEquals("LastCC", user.getLastName()); assertEquals("DepartmentCC", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testRequiredOnlyIfUser() { - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"roles\":[\"user\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"roles\":[\"user\"]}}" + "]}"); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); - + loginPage.open(); loginPage.login("login-test5", "password"); @@ -610,11 +612,11 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { //submit with error verifyProfilePage.update("FirstCC", "LastCC", " "); verifyProfilePage.assertCurrent(); - + //submit OK verifyProfilePage.update("FirstCC", "LastCC", "DepartmentCC"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); @@ -623,20 +625,20 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { assertEquals("LastCC", user.getLastName()); assertEquals("DepartmentCC", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testAttributeNotRequiredWhenMissingScope() { - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\"profile\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\"profile\"]}}" + "]}"); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); oauth.clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.login("login-test5", "password"); Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); @@ -649,27 +651,27 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { @Test public void testAttributeRequiredForScope() { - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login("login-test5", "password"); verifyProfilePage.assertCurrent(); - + verifyProfilePage.update("FirstAA", "LastAA", "DepartmentAA"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - + UserRepresentation user = getUser(user5Id); assertEquals("FirstAA", user.getFirstName()); assertEquals("LastAA", user.getLastName()); @@ -678,17 +680,17 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { @Test public void testAttributeRequiredForDefaultScope() { - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); oauth.clientId(client_scope_default.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login("login-test5", "password"); @@ -697,32 +699,32 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { //submit with error verifyProfilePage.update("FirstBB", "LastBB", " "); verifyProfilePage.assertCurrent(); - + //submit OK verifyProfilePage.update("FirstBB", "LastBB", "DepartmentBB"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - + UserRepresentation user = getUser(user5Id); assertEquals("FirstBB", user.getFirstName()); assertEquals("LastBB", user.getLastName()); assertEquals("DepartmentBB", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testNoActionIfValidForScope() { - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); updateUser(user5Id, "ExistingFirst", "ExistingLast", "ExistingDepartment"); oauth.clientId(client_scope_default.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login("login-test5", "password"); @@ -734,52 +736,52 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { assertEquals("ExistingLast", user.getLastName()); assertEquals("ExistingDepartment", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testAttributeRequiredButNotSelectedByScopeDoesntForceVerificationScreen() { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); - - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login("login-test5", "password"); Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); } - + @Test public void testAttributeRequiredAndSelectedByScope() { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", null); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login("login-test5", "password"); verifyProfilePage.assertCurrent(); - + verifyProfilePage.update("FirstAA", "LastAA", "DepartmentAA"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - + UserRepresentation user = getUser(user5Id); assertEquals("FirstAA", user.getFirstName()); assertEquals("LastAA", user.getLastName()); @@ -792,56 +794,56 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", null, null); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.scope(SCOPE_DEPARTMENT).clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login("login-test5", "password"); verifyProfilePage.assertCurrent(); - + Assert.assertTrue(verifyProfilePage.isDepartmentPresent()); verifyProfilePage.update("FirstAA", "LastAA", "Department AA"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - + UserRepresentation user = getUser(user5Id); assertEquals("FirstAA", user.getFirstName()); assertEquals("LastAA", user.getLastName()); assertEquals("Department AA", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testAttributeRequiredButNotSelectedByScopeIsNotRenderedOnVerificationScreenForcedByAnotherAttribute() { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", null, null); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", \"required\":{}, \"selector\":{\"scopes\":[\""+SCOPE_DEPARTMENT+"\"]}}" + "]}"); oauth.clientId(client_scope_optional.getClientId()).openLoginForm(); - + loginPage.assertCurrent(); loginPage.login("login-test5", "password"); verifyProfilePage.assertCurrent(); - + Assert.assertFalse(verifyProfilePage.isDepartmentPresent()); verifyProfilePage.update("FirstAA", "LastAA"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - + UserRepresentation user = getUser(user5Id); assertEquals("FirstAA", user.getFirstName()); assertEquals("LastAA", user.getLastName()); @@ -850,14 +852,14 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { @Test public void testCustomValidationInCustomAttribute() { - + setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", "D"); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", "+VALIDATIONS_LENGTH+"}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", "+VALIDATIONS_LENGTH+"}" + "]}"); loginPage.open(); @@ -868,27 +870,27 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { //submit with error verifyProfilePage.update("FirstCC", "LastCC", "De"); verifyProfilePage.assertCurrent(); - + //submit OK verifyProfilePage.update("FirstCC", "LastCC", "DepartmentCC"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - + UserRepresentation user = getUser(user5Id); assertEquals("FirstCC", user.getFirstName()); assertEquals("LastCC", user.getLastName()); assertEquals("DepartmentCC", user.firstAttribute(ATTRIBUTE_DEPARTMENT)); } - + @Test public void testEmailChangeSetsEmailVerified() { setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, true, "", "ExistingLast"); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}" + "]}"); @@ -899,25 +901,25 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { //submit OK verifyProfilePage.updateEmail("newemail@test.org","FirstCC", "LastCC"); - + Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); - + UserRepresentation user = getUser(user5Id); assertEquals("newemail@test.org", user.getEmail()); assertEquals(false, user.isEmailVerified()); } - + @Test public void testNoActionIfSuccessfulValidationForCustomAttribute() { - + setUserProfileConfiguration(CONFIGURATION_FOR_USER_EDIT); updateUser(user5Id, "ExistingFirst", "ExistingLast", "Department"); - setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + setUserProfileConfiguration("{\"attributes\": [" + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", "+VALIDATIONS_LENGTH+"}" + + "{\"name\": \"department\"," + PERMISSIONS_ALL + ", "+VALIDATIONS_LENGTH+"}" + "]}"); loginPage.open(); @@ -926,7 +928,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { Assert.assertEquals(RequestType.AUTH_RESPONSE, appPage.getRequestType()); Assert.assertNotNull(oauth.getCurrentQuery().get(OAuth2Constants.CODE)); } - + protected UserRepresentation getUser(String userId) { return getUser(testRealm(), userId); } @@ -934,7 +936,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { protected void updateUser(String userId, String firstName, String lastName, String department) { updateUser(testRealm(), userId, firstName, lastName, department); } - + protected void updateUser(String userId, boolean emailVerified, String firstName, String lastName) { UserRepresentation ur = getUser(testRealm(), userId); ur.setFirstName(firstName); @@ -942,7 +944,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { ur.setEmailVerified(emailVerified); testRealm().users().get(userId).update(ur); } - + protected void setUserProfileConfiguration(String configuration) { setUserProfileConfiguration(testRealm(), configuration); } @@ -971,7 +973,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { } } } - + public static UserRepresentation getUser(RealmResource testRealm, String userId) { return testRealm.users().get(userId).toRepresentation(); } @@ -990,5 +992,5 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { ur.singleAttribute(ATTRIBUTE_DEPARTMENT, department); testRealm.users().get(userId).update(ur); } - -} + +} \ No newline at end of file