diff --git a/test-framework/core/src/main/java/org/keycloak/testframework/realm/RealmConfigBuilder.java b/test-framework/core/src/main/java/org/keycloak/testframework/realm/RealmConfigBuilder.java index b3bdb6231d4..4adf8d2e559 100644 --- a/test-framework/core/src/main/java/org/keycloak/testframework/realm/RealmConfigBuilder.java +++ b/test-framework/core/src/main/java/org/keycloak/testframework/realm/RealmConfigBuilder.java @@ -4,12 +4,15 @@ import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.RolesRepresentation; import org.keycloak.representations.idm.UserRepresentation; +import org.keycloak.representations.userprofile.config.UPConfig; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; public class RealmConfigBuilder { @@ -131,6 +134,19 @@ public class RealmConfigBuilder { return this; } + public RealmConfigBuilder internationalizationEnabled() { + rep.setInternationalizationEnabled(true); + return this; + } + + public RealmConfigBuilder supportedLocales(String... supportedLocales) { + if (rep.getSupportedLocales() == null) { + rep.setSupportedLocales(new HashSet<>()); + } + rep.getSupportedLocales().addAll(Set.of(supportedLocales)); + return this; + } + public RealmConfigBuilder smtp(String host, int port, String from) { Map config = new HashMap<>(); config.put("host", host); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/DeclarativeUserTest.java b/tests/base/src/test/java/org/keycloak/tests/admin/DeclarativeUserTest.java similarity index 58% rename from testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/DeclarativeUserTest.java rename to tests/base/src/test/java/org/keycloak/tests/admin/DeclarativeUserTest.java index 90102f7b078..90b2dcca0a6 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/DeclarativeUserTest.java +++ b/tests/base/src/test/java/org/keycloak/tests/admin/DeclarativeUserTest.java @@ -1,65 +1,58 @@ -package org.keycloak.testsuite.admin; +package org.keycloak.tests.admin; + +import jakarta.ws.rs.BadRequestException; +import jakarta.ws.rs.core.Response; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.keycloak.admin.client.resource.UserResource; +import org.keycloak.admin.client.resource.UsersResource; +import org.keycloak.models.UserModel; +import org.keycloak.representations.idm.ErrorRepresentation; +import org.keycloak.representations.idm.RealmRepresentation; +import org.keycloak.representations.idm.UserRepresentation; +import org.keycloak.testframework.annotations.InjectRealm; +import org.keycloak.testframework.annotations.KeycloakIntegrationTest; +import org.keycloak.testframework.realm.ManagedRealm; +import org.keycloak.testframework.realm.RealmConfig; +import org.keycloak.testframework.realm.RealmConfigBuilder; +import org.keycloak.testframework.remote.runonserver.InjectRunOnServer; +import org.keycloak.testframework.remote.runonserver.RunOnServerClient; +import org.keycloak.tests.utils.admin.ApiUtil; +import org.keycloak.userprofile.DeclarativeUserProfileProvider; +import org.keycloak.userprofile.UserProfileProvider; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasSize; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.fail; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; -import static org.keycloak.testsuite.forms.VerifyProfileTest.setUserProfileConfiguration; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.keycloak.admin.client.Keycloak; -import org.keycloak.admin.client.resource.UserResource; -import org.keycloak.admin.client.resource.UsersResource; -import org.keycloak.models.UserModel; -import org.keycloak.protocol.oidc.OIDCLoginProtocol; -import org.keycloak.representations.idm.ClientRepresentation; -import org.keycloak.representations.idm.ErrorRepresentation; -import org.keycloak.representations.idm.RealmRepresentation; -import org.keycloak.representations.idm.RoleRepresentation; -import org.keycloak.representations.idm.UserRepresentation; -import org.keycloak.testsuite.util.AdminClientUtil; -import org.keycloak.testsuite.util.UserBuilder; -import org.keycloak.userprofile.DeclarativeUserProfileProvider; -import org.keycloak.userprofile.UserProfileProvider; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import jakarta.ws.rs.BadRequestException; -import jakarta.ws.rs.WebApplicationException; -import jakarta.ws.rs.core.Response; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ALL; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.setUserProfileConfiguration; /** * @author Pedro Igor */ -public class DeclarativeUserTest extends AbstractAdminTest { +@KeycloakIntegrationTest +public class DeclarativeUserTest { + + @InjectRealm(config = DeclarativeRealmConfig.class) + ManagedRealm managedRealm; + + @InjectRunOnServer + RunOnServerClient runOnServer; - private static final String TEST_REALM_USER_MANAGER_NAME = "test-realm-user-manager"; private static final String REQUIRED_ATTR_KEY = "required-attr"; - private Keycloak testRealmUserManagerClient; - - @Before - public void onBefore() throws Exception { - RealmRepresentation realmRep = realm.toRepresentation(); - realmRep.setInternationalizationEnabled(true); - realmRep.setSupportedLocales(new HashSet<>(Arrays.asList("en", "de"))); - realm.update(realmRep); - setUserProfileConfiguration(realm, "{\"attributes\": [" + @BeforeEach + public void onBefore() { + setUserProfileConfiguration(managedRealm.admin(), "{\"attributes\": [" + "{\"name\": \"username\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"firstName\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"email\", " + PERMISSIONS_ALL + "}," @@ -69,49 +62,6 @@ public class DeclarativeUserTest extends AbstractAdminTest { + "{\"name\": \"custom-hidden\"}," + "{\"name\": \"attr1\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"attr2\", " + PERMISSIONS_ALL + "}]}"); - - UserRepresentation testRealmUserManager = UserBuilder.create().username(TEST_REALM_USER_MANAGER_NAME) - .password(TEST_REALM_USER_MANAGER_NAME).build(); - String createdUserId = null; - try (Response response = realm.users().create(testRealmUserManager)) { - createdUserId = ApiUtil.getCreatedId(response); - } catch (WebApplicationException e) { - // it's ok when the user has already been created for a previous test - assertThat(e.getResponse().getStatus(), equalTo(409)); - } - - if (createdUserId != null) { - List foundClients = realm.clients().findByClientId("realm-management"); - assertThat(foundClients, hasSize(1)); - ClientRepresentation realmManagementClient = foundClients.get(0); - - RoleRepresentation manageUsersRole = - realm.clients().get(realmManagementClient.getId()).roles().get("manage-users").toRepresentation(); - assertThat(manageUsersRole, notNullValue()); - - realm.users().get(createdUserId).roles().clientLevel(realmManagementClient.getId()) - .add(Collections.singletonList(manageUsersRole)); - } - - ClientRepresentation testApp = new ClientRepresentation(); - testApp.setClientId("test-app"); - testApp.setProtocol(OIDCLoginProtocol.LOGIN_PROTOCOL); - testApp.setSecret("secret"); - try (Response response = realm.clients().create(testApp)) { - ApiUtil.getCreatedId(response); - } catch (WebApplicationException e) { - // it's ok when the client has already been created for a previous test - } - - testRealmUserManagerClient = AdminClientUtil.createAdminClient(true, realmRep.getRealm(), - TEST_REALM_USER_MANAGER_NAME, TEST_REALM_USER_MANAGER_NAME, testApp.getClientId(), testApp.getSecret()); - } - - @After - public void closeClient() { - if (testRealmUserManagerClient != null) { - testRealmUserManagerClient.close(); - } } @Test @@ -120,14 +70,14 @@ public class DeclarativeUserTest extends AbstractAdminTest { user1.setUsername("user1"); user1.singleAttribute("attr1", "value1user1"); user1.singleAttribute("attr2", "value2user1"); - String user1Id = createUser(user1); + String user1Id = createUserWithCleanup(user1); - user1 = realm.users().get(user1Id).toRepresentation(); + user1 = managedRealm.admin().users().get(user1Id).toRepresentation(); Map> attributes = user1.getAttributes(); - assertEquals(2, attributes.size()); - assertFalse(attributes.containsKey("custom-hidden")); + Assertions.assertEquals(2, attributes.size()); + Assertions.assertFalse(attributes.containsKey("custom-hidden")); - setUserProfileConfiguration(this.realm, "{\"attributes\": [" + setUserProfileConfiguration(managedRealm.admin(), "{\"attributes\": [" + "{\"name\": \"username\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"firstName\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"email\", " + PERMISSIONS_ALL + "}," @@ -139,15 +89,15 @@ public class DeclarativeUserTest extends AbstractAdminTest { + "{\"name\": \"attr2\", " + PERMISSIONS_ALL + "}]}"); - user1 = realm.users().get(user1Id).toRepresentation(); + user1 = managedRealm.admin().users().get(user1Id).toRepresentation(); attributes = user1.getAttributes(); - assertEquals(2, attributes.size()); - assertFalse(attributes.containsKey("custom-hidden")); + Assertions.assertEquals(2, attributes.size()); + Assertions.assertFalse(attributes.containsKey("custom-hidden")); } @Test public void testUpdateUnsetAttributeWithEmptyValue() { - setUserProfileConfiguration(this.realm, "{\"attributes\": [" + setUserProfileConfiguration(managedRealm.admin(), "{\"attributes\": [" + "{\"name\": \"username\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"firstName\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"email\", " + PERMISSIONS_ALL + "}," @@ -159,34 +109,34 @@ public class DeclarativeUserTest extends AbstractAdminTest { user1.setUsername("user1"); // set an attribute to later remove it from the configuration user1.singleAttribute("attr1", "some-value"); - String user1Id = createUser(user1); + String user1Id = createUserWithCleanup(user1); // remove the attr1 attribute from the configuration - setUserProfileConfiguration(this.realm, "{\"attributes\": [" + setUserProfileConfiguration(managedRealm.admin(), "{\"attributes\": [" + "{\"name\": \"username\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"firstName\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"email\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"lastName\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"attr2\"}]}"); - UserResource userResource = realm.users().get(user1Id); + UserResource userResource = managedRealm.admin().users().get(user1Id); user1 = userResource.toRepresentation(); - assertNull(user1.getAttributes()); + Assertions.assertNull(user1.getAttributes()); user1.singleAttribute("attr2", ""); // should be able to update the user when a read-only attribute has an empty or null value userResource.update(user1); user1 = userResource.toRepresentation(); - assertNull(user1.getAttributes()); + Assertions.assertNull(user1.getAttributes()); user1.setAttributes(new HashMap<>()); user1.getAttributes().put("attr2", null); userResource.update(user1); user1 = userResource.toRepresentation(); - assertNull(user1.getAttributes()); + Assertions.assertNull(user1.getAttributes()); } @Test public void testValidationUsingExistingAttributes() { - setUserProfileConfiguration(this.realm, "{\"attributes\": [" + setUserProfileConfiguration(managedRealm.admin(), "{\"attributes\": [" + "{\"name\": \"username\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"firstName\", " + PERMISSIONS_ALL + "}," + "{\"name\": \"email\", " + PERMISSIONS_ALL + "}," @@ -197,9 +147,9 @@ public class DeclarativeUserTest extends AbstractAdminTest { user1.setUsername("user1"); // set an attribute to later remove it from the configuration user1.singleAttribute(REQUIRED_ATTR_KEY, "some-value"); - String user1Id = createUser(user1); + String user1Id = createUserWithCleanup(user1); - UserResource userResource = realm.users().get(user1Id); + UserResource userResource = managedRealm.admin().users().get(user1Id); user1 = userResource.toRepresentation(); user1.setFirstName("changed"); user1.setAttributes(null); @@ -207,11 +157,11 @@ public class DeclarativeUserTest extends AbstractAdminTest { // do not validate REQUIRED_ATTR_KEY because the attribute list is not provided and the user has the attribute userResource.update(user1); user1 = userResource.toRepresentation(); - assertEquals("changed", user1.getFirstName()); + Assertions.assertEquals("changed", user1.getFirstName()); user1.setAttributes(Collections.emptyMap()); String expectedErrorMessage = "error-user-attribute-required"; - verifyUserUpdateFails(realm.users(), user1Id, user1, expectedErrorMessage); + verifyUserUpdateFails(managedRealm.admin().users(), user1Id, user1, expectedErrorMessage); } private void verifyUserUpdateFails(UsersResource usersResource, String userId, UserRepresentation user, @@ -219,7 +169,7 @@ public class DeclarativeUserTest extends AbstractAdminTest { UserResource userResource = usersResource.get(userId); try { userResource.update(user); - fail("Should fail with errorMessage: " + expectedErrorMessage); + Assertions.fail("Should fail with errorMessage: " + expectedErrorMessage); } catch (BadRequestException badRequest) { try (Response response = badRequest.getResponse()) { assertThat(response.getStatus(), equalTo(400)); @@ -231,7 +181,7 @@ public class DeclarativeUserTest extends AbstractAdminTest { @Test public void testDefaultUserProfileProviderIsActive() { - getTestingClient().server(REALM_NAME).run(session -> { + runOnServer.run(session -> { Set providers = session.getAllProviders(UserProfileProvider.class); assertThat(providers, notNullValue()); assertThat(providers.isEmpty(), is(false)); @@ -245,37 +195,47 @@ public class DeclarativeUserTest extends AbstractAdminTest { @Test public void testUserLocale() { - RealmRepresentation realmRep = realm.toRepresentation(); + RealmRepresentation realmRep = managedRealm.admin().toRepresentation(); Boolean internationalizationEnabled = realmRep.isInternationalizationEnabled(); realmRep.setInternationalizationEnabled(true); - realm.update(realmRep); + managedRealm.admin().update(realmRep); try { UserRepresentation user1 = new UserRepresentation(); user1.setUsername("user1"); user1.singleAttribute(UserModel.LOCALE, "pt_BR"); - String user1Id = createUser(user1); + String user1Id = createUserWithCleanup(user1); - UserResource userResource = realm.users().get(user1Id); + UserResource userResource = managedRealm.admin().users().get(user1Id); user1 = userResource.toRepresentation(); - assertEquals("pt_BR", user1.getAttributes().get(UserModel.LOCALE).get(0)); + Assertions.assertEquals("pt_BR", user1.getAttributes().get(UserModel.LOCALE).get(0)); realmRep.setInternationalizationEnabled(false); - realm.update(realmRep); + managedRealm.admin().update(realmRep); user1 = userResource.toRepresentation(); - assertNull(user1.getAttributes()); + Assertions.assertNull(user1.getAttributes()); } finally { realmRep.setInternationalizationEnabled(internationalizationEnabled); - realm.update(realmRep); + managedRealm.admin().update(realmRep); } } - private String createUser(UserRepresentation userRep) { - Response response = realm.users().create(userRep); + private String createUserWithCleanup(UserRepresentation userRep) { + Response response = managedRealm.admin().users().create(userRep); String createdId = ApiUtil.getCreatedId(response); - response.close(); - getCleanup().addUserId(createdId); + managedRealm.cleanup().add(r -> r.users().get(createdId).remove()); + return createdId; } + + public static class DeclarativeRealmConfig implements RealmConfig { + + @Override + public RealmConfigBuilder configure(RealmConfigBuilder realm) { + realm.internationalizationEnabled() + .supportedLocales("en", "de"); + return realm; + } + } } diff --git a/tests/utils-shared/pom.xml b/tests/utils-shared/pom.xml index dc8a7c59d71..c0c3f5bcb6a 100755 --- a/tests/utils-shared/pom.xml +++ b/tests/utils-shared/pom.xml @@ -41,6 +41,10 @@ org.keycloak keycloak-services + + org.keycloak + keycloak-admin-client-tests + org.apache.httpcomponents httpclient diff --git a/tests/utils-shared/src/main/java/org/keycloak/testsuite/util/userprofile/UserProfileUtil.java b/tests/utils-shared/src/main/java/org/keycloak/testsuite/util/userprofile/UserProfileUtil.java new file mode 100644 index 00000000000..300abef59b1 --- /dev/null +++ b/tests/utils-shared/src/main/java/org/keycloak/testsuite/util/userprofile/UserProfileUtil.java @@ -0,0 +1,69 @@ +package org.keycloak.testsuite.util.userprofile; + +import org.keycloak.admin.client.resource.RealmResource; +import org.keycloak.admin.client.resource.UserProfileResource; +import org.keycloak.models.UserModel; +import org.keycloak.representations.userprofile.config.UPAttribute; +import org.keycloak.representations.userprofile.config.UPAttributePermissions; +import org.keycloak.representations.userprofile.config.UPAttributeRequired; +import org.keycloak.representations.userprofile.config.UPConfig; +import org.keycloak.util.JsonSerialization; + +import java.io.IOException; +import java.util.Set; + +import static org.keycloak.userprofile.config.UPConfigUtils.ROLE_ADMIN; +import static org.keycloak.userprofile.config.UPConfigUtils.ROLE_USER; + +public class UserProfileUtil { + + 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 + "}," + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," + + "{\"name\": \"department\"," + PERMISSIONS_ALL + "}" + + "]}"; + + public static UPConfig setUserProfileConfiguration(RealmResource testRealm, String configuration) { + try { + UPConfig config = configuration == null ? null : JsonSerialization.readValue(configuration, UPConfig.class); + + if (config != null) { + UPAttribute username = config.getAttribute(UserModel.USERNAME); + + if (username == null) { + config.addOrReplaceAttribute(new UPAttribute(UserModel.USERNAME)); + } + + UPAttribute email = config.getAttribute(UserModel.EMAIL); + + if (email == null) { + config.addOrReplaceAttribute(new UPAttribute(UserModel.EMAIL, new UPAttributePermissions(Set.of(ROLE_USER, ROLE_ADMIN), Set.of(ROLE_USER, ROLE_ADMIN)), new UPAttributeRequired(Set.of(ROLE_USER), Set.of()))); + } + } + + testRealm.users().userProfile().update(config); + + return config; + } catch (IOException ioe) { + throw new RuntimeException("Failed to read configuration", ioe); + } + } + + public static UPConfig enableUnmanagedAttributes(UserProfileResource upResource) { + UPConfig cfg = upResource.getConfiguration(); + cfg.setUnmanagedAttributePolicy(UPConfig.UnmanagedAttributePolicy.ENABLED); + upResource.update(cfg); + return cfg; + } + +} + diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceTest.java index ec0e5812d7b..15a2949c21a 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceTest.java @@ -75,10 +75,10 @@ import org.keycloak.testsuite.admin.ApiUtil; import org.keycloak.testsuite.admin.authentication.AbstractAuthenticationTest; import org.keycloak.testsuite.arquillian.annotation.EnableFeature; import org.keycloak.testsuite.broker.util.SimpleHttpDefault; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.util.oauth.AccessTokenResponse; import org.keycloak.testsuite.util.TokenUtil; import org.keycloak.testsuite.util.UserBuilder; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.userprofile.UserProfileContext; import jakarta.ws.rs.ClientErrorException; @@ -103,7 +103,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ALL; /** * @author Stian Thorgersen @@ -1865,6 +1865,6 @@ public class AccountRestServiceTest extends AbstractRestServiceTest { } protected void setUserProfileConfiguration(String configuration) { - VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); + UserProfileUtil.setUserProfileConfiguration(testRealm(), configuration); } } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceWithUserProfileTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceWithUserProfileTest.java index b84babdb4dc..0d4287c0f1f 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceWithUserProfileTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/AccountRestServiceWithUserProfileTest.java @@ -22,9 +22,9 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.keycloak.testsuite.account.AccountRestServiceTest.assertUserProfileAttributeMetadata; import static org.keycloak.testsuite.account.AccountRestServiceTest.getUserProfileAttributeMetadata; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ADMIN_EDITABLE; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ADMIN_ONLY; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ALL; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_EDITABLE; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_ONLY; import java.io.IOException; import java.util.Collections; @@ -44,7 +44,7 @@ import org.keycloak.representations.idm.UserProfileMetadata; import org.keycloak.representations.account.UserRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.testsuite.broker.util.SimpleHttpDefault; -import org.keycloak.testsuite.forms.VerifyProfileTest; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.userprofile.UserProfileContext; /** @@ -372,7 +372,7 @@ public class AccountRestServiceWithUserProfileTest extends AbstractRestServiceTe } protected void setUserProfileConfiguration(String configuration) { - VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); + UserProfileUtil.setUserProfileConfiguration(testRealm(), configuration); } protected UserRepresentation getUser() throws IOException { diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/custom/CustomAuthFlowOTPTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/custom/CustomAuthFlowOTPTest.java index 4c2449a9376..58280abf7b1 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/custom/CustomAuthFlowOTPTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/account/custom/CustomAuthFlowOTPTest.java @@ -31,7 +31,6 @@ import org.keycloak.representations.idm.RoleRepresentation; import org.keycloak.testsuite.admin.ApiUtil; import org.keycloak.testsuite.admin.Users; import org.keycloak.testsuite.auth.page.login.OneTimeCode; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.pages.LoginConfigTotpPage; import org.keycloak.testsuite.pages.LoginTotpPage; import org.keycloak.testsuite.pages.PageUtils; @@ -40,6 +39,7 @@ import org.keycloak.testsuite.updaters.RealmAttributeUpdater; import jakarta.ws.rs.NotFoundException; import jakarta.ws.rs.core.Response; import org.keycloak.testsuite.util.AccountHelper; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import java.io.IOException; import java.util.ArrayList; @@ -92,7 +92,7 @@ public class CustomAuthFlowOTPTest extends AbstractCustomAccountManagementTest { @Before public void configureUserProfile() { UserProfileResource userProfileRes = testRealmResource().users().userProfile(); - VerifyProfileTest.enableUnmanagedAttributes(userProfileRes); + UserProfileUtil.enableUnmanagedAttributes(userProfileRes); } private void configureRequiredActions() { 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 468a0fea470..f1b6c69147d 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 @@ -23,13 +23,13 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ADMIN_EDITABLE; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ADMIN_ONLY; -import static org.keycloak.testsuite.forms.VerifyProfileTest.SCOPE_DEPARTMENT; -import static org.keycloak.testsuite.forms.VerifyProfileTest.VALIDATIONS_LENGTH; -import static org.keycloak.testsuite.forms.VerifyProfileTest.ATTRIBUTE_DEPARTMENT; -import static org.keycloak.testsuite.forms.VerifyProfileTest.CONFIGURATION_FOR_USER_EDIT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ALL; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_EDITABLE; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_ONLY; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.SCOPE_DEPARTMENT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.VALIDATIONS_LENGTH; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.ATTRIBUTE_DEPARTMENT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.CONFIGURATION_FOR_USER_EDIT; import java.util.ArrayList; import java.util.Collections; @@ -41,7 +41,6 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.keycloak.OAuth2Constants; import org.keycloak.events.Details; import org.keycloak.events.EventType; import org.keycloak.models.UserModel; @@ -61,6 +60,7 @@ import org.keycloak.testsuite.pages.LoginUpdateProfileEditUsernameAllowedPage; import org.keycloak.testsuite.util.ClientScopeBuilder; import org.keycloak.testsuite.util.KeycloakModelUtils; import org.keycloak.testsuite.util.UserBuilder; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; @@ -109,7 +109,7 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends AbstractTest @Before public void beforeTest() { - VerifyProfileTest.setUserProfileConfiguration(testRealm(), null); + UserProfileUtil.setUserProfileConfiguration(testRealm(), null); ApiUtil.removeUserByUsername(testRealm(), "test-user@localhost"); UserRepresentation user = UserBuilder.create().enabled(true) @@ -160,11 +160,11 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends AbstractTest public void testAttributeGrouping() { setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"group\": \"contact\"}" + + "{\"name\": \"lastName\"," + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"username\", " + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + UserProfileUtil.PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"department\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," + + "{\"name\": \"email\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"group\": \"contact\"}" + "], \"groups\": [" + "{\"name\": \"company\", \"displayDescription\": \"Company field desc\" }," + "{\"name\": \"contact\" }" @@ -197,11 +197,11 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends AbstractTest public void testAttributeGuiOrder() { setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + "}" + + "{\"name\": \"lastName\"," + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"department\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"required\":{}}," + + "{\"name\": \"username\", " + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + UserProfileUtil.PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"email\", " + UserProfileUtil.PERMISSIONS_ALL + "}" + "]}"); loginPage.open(); @@ -611,7 +611,7 @@ public class RequiredActionUpdateProfileWithUserProfileTest extends AbstractTest } protected void setUserProfileConfiguration(String configuration) { - VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); + UserProfileUtil.setUserProfileConfiguration(testRealm(), configuration); } protected UserRepresentation getUserByUsername(String username) { diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java index 8f9598c8371..06c005c9c15 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/adapter/AbstractAdapterTest.java @@ -17,10 +17,7 @@ package org.keycloak.testsuite.adapter; -import org.apache.commons.io.IOUtils; import org.jboss.arquillian.graphene.page.Page; -import org.jboss.shrinkwrap.api.Archive; -import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.AfterClass; import org.junit.Before; @@ -31,10 +28,9 @@ import org.keycloak.testsuite.AbstractAuthTest; import org.keycloak.testsuite.adapter.page.AppServerContextRoot; import org.keycloak.testsuite.arquillian.SuiteContext; import org.keycloak.testsuite.arquillian.annotation.AppServerContainer; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.util.ServerURLs; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; -import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; @@ -123,7 +119,7 @@ public abstract class AbstractAdapterTest extends AbstractAuthTest { public void enableUnmanagedAttributes() { for (RealmRepresentation realm : adminClient.realms().findAll()) { UserProfileResource upResource = adminClient.realm(realm.getRealm()).users().userProfile(); - VerifyProfileTest.enableUnmanagedAttributes(upResource); + UserProfileUtil.enableUnmanagedAttributes(upResource); } } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java index 91af41cf72d..f05ec359580 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/UserTest.java @@ -75,7 +75,6 @@ import org.keycloak.storage.StorageId; import org.keycloak.storage.UserStorageProvider; import org.keycloak.testsuite.federation.DummyUserFederationProviderFactory; import org.keycloak.testsuite.federation.UserMapStorageFactory; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.pages.LoginPasswordUpdatePage; import org.keycloak.testsuite.pages.ErrorPage; import org.keycloak.testsuite.pages.InfoPage; @@ -96,6 +95,7 @@ import org.keycloak.testsuite.util.oauth.OAuthClient; import org.keycloak.testsuite.util.RealmBuilder; import org.keycloak.testsuite.util.RoleBuilder; import org.keycloak.testsuite.util.UserBuilder; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.userprofile.DefaultAttributes; import org.keycloak.userprofile.validator.UsernameProhibitedCharactersValidator; import org.keycloak.util.JsonSerialization; @@ -200,14 +200,14 @@ public class UserTest extends AbstractAdminTest { public void beforeUserTest() throws IOException { createAppClientInRealm(REALM_NAME); - VerifyProfileTest.setUserProfileConfiguration(realm, null); + UserProfileUtil.setUserProfileConfiguration(realm, null); UPConfig upConfig = realm.users().userProfile().getConfiguration(); for (String name : managedAttributes) { upConfig.addOrReplaceAttribute(createAttributeMetadata(name)); } - VerifyProfileTest.setUserProfileConfiguration(realm, JsonSerialization.writeValueAsString(upConfig)); + UserProfileUtil.setUserProfileConfiguration(realm, JsonSerialization.writeValueAsString(upConfig)); assertAdminEvents.clear(); } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java index 17879f683ad..57920729c31 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/admin/group/GroupTest.java @@ -43,13 +43,13 @@ import org.keycloak.representations.idm.RoleRepresentation; import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.representations.userprofile.config.UPConfig; import org.keycloak.testsuite.admin.ApiUtil; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.updaters.Creator; import org.keycloak.testsuite.util.AdminEventPaths; import org.keycloak.testsuite.util.ClientBuilder; import org.keycloak.testsuite.util.RoleBuilder; import org.keycloak.testsuite.util.URLAssert; import org.keycloak.testsuite.util.UserBuilder; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.testsuite.utils.tls.TLSUtils; import org.keycloak.util.JsonSerialization; @@ -1300,7 +1300,7 @@ public class GroupTest extends AbstractGroupTest { // enable user profile unmanaged attributes UserProfileResource upResource = realm.users().userProfile(); - UPConfig cfg = VerifyProfileTest.enableUnmanagedAttributes(upResource); + UPConfig cfg = UserProfileUtil.enableUnmanagedAttributes(upResource); GroupsResource groups = realm.groups(); try (Response response = groups.add(GroupBuilder.create().name(groupName).build())) { diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBaseBrokerTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBaseBrokerTest.java index 4559be39b5b..177f84d8298 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBaseBrokerTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/AbstractBaseBrokerTest.java @@ -17,6 +17,9 @@ package org.keycloak.testsuite.broker; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.UriBuilderException; import org.hamcrest.Matchers; import org.jboss.arquillian.graphene.page.Page; import org.junit.After; @@ -31,7 +34,7 @@ import org.keycloak.representations.idm.UserRepresentation; import org.keycloak.services.resources.RealmsResource; import org.keycloak.testsuite.AbstractKeycloakTest; import org.keycloak.testsuite.Assert; -import org.keycloak.testsuite.forms.VerifyProfileTest; +import org.keycloak.testsuite.pages.AppPage; import org.keycloak.testsuite.pages.ErrorPage; import org.keycloak.testsuite.pages.IdpConfirmLinkPage; import org.keycloak.testsuite.pages.IdpConfirmOverrideLinkPage; @@ -47,16 +50,13 @@ import org.keycloak.testsuite.pages.OAuthGrantPage; import org.keycloak.testsuite.pages.ProceedPage; import org.keycloak.testsuite.pages.UpdateAccountInformationPage; import org.keycloak.testsuite.pages.VerifyEmailPage; -import org.keycloak.testsuite.pages.AppPage; import org.keycloak.testsuite.util.MailServer; import org.keycloak.testsuite.util.UserBuilder; import org.keycloak.testsuite.util.oauth.LogoutUrlBuilder; import org.keycloak.testsuite.util.oauth.OAuthClient; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.openqa.selenium.TimeoutException; -import jakarta.ws.rs.core.Response; -import jakarta.ws.rs.core.UriBuilder; -import jakarta.ws.rs.core.UriBuilderException; import java.net.URI; import java.util.Collections; import java.util.List; @@ -190,8 +190,8 @@ public abstract class AbstractBaseBrokerTest extends AbstractKeycloakTest { importRealm(consumerRealm); importRealm(providerRealm); - VerifyProfileTest.enableUnmanagedAttributes(adminClient.realm(consumerRealm.getRealm()).users().userProfile()); - VerifyProfileTest.enableUnmanagedAttributes(adminClient.realm(providerRealm.getRealm()).users().userProfile()); + UserProfileUtil.enableUnmanagedAttributes(adminClient.realm(consumerRealm.getRealm()).users().userProfile()); + UserProfileUtil.enableUnmanagedAttributes(adminClient.realm(providerRealm.getRealm()).users().userProfile()); } @After diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginTest.java index ec8bc013909..dcefbf9135c 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/broker/KcOidcFirstBrokerLoginTest.java @@ -1,7 +1,6 @@ package org.keycloak.testsuite.broker; import org.apache.commons.lang3.StringUtils; -import org.hamcrest.CoreMatchers; import org.jboss.arquillian.graphene.page.Page; import org.junit.Test; import org.keycloak.admin.client.resource.IdentityProviderResource; @@ -25,6 +24,7 @@ import org.keycloak.testsuite.pages.RegisterPage; import org.keycloak.testsuite.pages.AppPage; import org.keycloak.testsuite.util.AccountHelper; import org.keycloak.testsuite.util.ClientScopeBuilder; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.util.JsonSerialization; import org.openqa.selenium.By; import org.openqa.selenium.NoSuchElementException; @@ -42,9 +42,9 @@ import static org.keycloak.testsuite.admin.ApiUtil.removeUserByUsername; import static org.keycloak.testsuite.broker.BrokerTestConstants.IDP_OIDC_ALIAS; import static org.keycloak.testsuite.broker.BrokerTestTools.createIdentityProvider; import static org.keycloak.testsuite.broker.BrokerTestTools.waitForPage; -import static org.keycloak.testsuite.forms.VerifyProfileTest.ATTRIBUTE_DEPARTMENT; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ADMIN_EDITABLE; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.ATTRIBUTE_DEPARTMENT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_EDITABLE; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ALL; import java.util.List; @@ -478,11 +478,11 @@ public class KcOidcFirstBrokerLoginTest extends AbstractFirstBrokerLoginTest { updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"group\": \"contact\"}" + + "{\"name\": \"lastName\"," + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"username\", " + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + UserProfileUtil.PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"department\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," + + "{\"name\": \"email\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"group\": \"contact\"}" + "], \"groups\": [" + "{\"name\": \"company\", \"displayDescription\": \"Company field desc\" }," + "{\"name\": \"contact\" }" @@ -522,11 +522,11 @@ public class KcOidcFirstBrokerLoginTest extends AbstractFirstBrokerLoginTest { updateExecutions(AbstractBrokerTest::enableUpdateProfileOnFirstLogin); setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + "}" + + "{\"name\": \"lastName\"," + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"department\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"required\":{}}," + + "{\"name\": \"username\", " + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + UserProfileUtil.PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"email\", " + UserProfileUtil.PERMISSIONS_ALL + "}" + "]}"); oauth.clientId("broker-app"); @@ -824,7 +824,7 @@ public class KcOidcFirstBrokerLoginTest extends AbstractFirstBrokerLoginTest { } protected void setUserProfileConfiguration(String configuration) { - VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); + UserProfileUtil.setUserProfileConfiguration(testRealm(), configuration); } private RealmResource testRealm() { diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java index db8a07206ab..439b334ef86 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/exportimport/ExportImportTest.java @@ -45,10 +45,10 @@ import org.keycloak.testsuite.AbstractKeycloakTest; import org.keycloak.testsuite.Assert; import org.keycloak.testsuite.arquillian.annotation.UncaughtServerErrorExpected; import org.keycloak.testsuite.client.resources.TestingExportImportResource; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.runonserver.RunHelpers; import org.keycloak.testsuite.util.JsonTestUtils; import org.keycloak.testsuite.util.UserBuilder; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.userprofile.DeclarativeUserProfileProvider; import org.keycloak.util.JsonSerialization; @@ -291,7 +291,7 @@ public class ExportImportTest extends AbstractKeycloakTest { RealmResource realmRes = adminClient.realm(TEST_REALM); //add some non-default config - UPConfig persistedConfig = VerifyProfileTest.setUserProfileConfiguration(realmRes, VerifyProfileTest.CONFIGURATION_FOR_USER_EDIT); + UPConfig persistedConfig = UserProfileUtil.setUserProfileConfiguration(realmRes, UserProfileUtil.CONFIGURATION_FOR_USER_EDIT); //export TestingExportImportResource exportImport = testingClient.testing().exportImport(); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAccountRestApiTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAccountRestApiTest.java index e0d4cdbb980..27ba791f8a6 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAccountRestApiTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAccountRestApiTest.java @@ -46,10 +46,10 @@ import org.keycloak.services.messages.Messages; import org.keycloak.services.resources.account.AccountCredentialResource; import org.keycloak.storage.ldap.idm.model.LDAPObject; import org.keycloak.testsuite.broker.util.SimpleHttpDefault; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.util.LDAPRule; import org.keycloak.testsuite.util.LDAPTestUtils; import org.keycloak.testsuite.util.TokenUtil; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -175,7 +175,7 @@ public class LDAPAccountRestApiTest extends AbstractLDAPTest { public void testUpdateProfileUnmanagedAttributes() throws IOException { // User profile unmanaged attributes supported UserProfileResource userProfileRes = testRealm().users().userProfile(); - UPConfig origConfig = VerifyProfileTest.enableUnmanagedAttributes(userProfileRes); + UPConfig origConfig = UserProfileUtil.enableUnmanagedAttributes(userProfileRes); try { UserRepresentation user = getProfile(); diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAdminRestApiTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAdminRestApiTest.java index ca04d93d825..81e76badc40 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAdminRestApiTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPAdminRestApiTest.java @@ -56,7 +56,7 @@ import static org.junit.Assert.assertEquals; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; -import static org.keycloak.testsuite.forms.VerifyProfileTest.setUserProfileConfiguration; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.setUserProfileConfiguration; import static org.keycloak.util.JsonSerialization.writeValueAsString; /** diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPBinaryAttributesTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPBinaryAttributesTest.java index a42d49a5c57..fa7816cbf39 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPBinaryAttributesTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/LDAPBinaryAttributesTest.java @@ -42,11 +42,11 @@ import org.keycloak.storage.ldap.idm.model.LDAPObject; import org.keycloak.storage.ldap.mappers.LDAPStorageMapper; import org.keycloak.storage.ldap.mappers.UserAttributeLDAPStorageMapper; import org.keycloak.testsuite.client.KeycloakTestingClient; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.util.LDAPRule; import org.keycloak.testsuite.util.LDAPTestUtils; import jakarta.ws.rs.core.Response; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.validate.validators.LengthValidator; import java.util.Collections; @@ -97,7 +97,7 @@ public class LDAPBinaryAttributesTest extends AbstractLDAPTest { // User profile unmanaged attributes supported UserProfileResource userProfileRes = testRealm().users().userProfile(); - VerifyProfileTest.enableUnmanagedAttributes(userProfileRes); + UserProfileUtil.enableUnmanagedAttributes(userProfileRes); } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/noimport/LDAPProvidersIntegrationNoImportTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/noimport/LDAPProvidersIntegrationNoImportTest.java index a2db35583ea..7128b9c1013 100755 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/noimport/LDAPProvidersIntegrationNoImportTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/ldap/noimport/LDAPProvidersIntegrationNoImportTest.java @@ -57,8 +57,8 @@ import org.keycloak.testsuite.admin.ApiUtil; import org.keycloak.testsuite.federation.ldap.LDAPProvidersIntegrationTest; import org.keycloak.testsuite.federation.ldap.LDAPTestAsserts; import org.keycloak.testsuite.federation.ldap.LDAPTestContext; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.util.LDAPTestUtils; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; /** @@ -76,7 +76,7 @@ public class LDAPProvidersIntegrationNoImportTest extends LDAPProvidersIntegrati @Before public void enableUserProfileUnmanagedAttributes() { UserProfileResource userProfileRes = testRealm().users().userProfile(); - VerifyProfileTest.enableUnmanagedAttributes(userProfileRes); + UserProfileUtil.enableUnmanagedAttributes(userProfileRes); } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java index 24f87de8130..90f70be8139 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/federation/storage/UserStorageTest.java @@ -47,7 +47,6 @@ import org.keycloak.testsuite.arquillian.annotation.ModelTest; import org.keycloak.testsuite.federation.UserMapStorage; import org.keycloak.testsuite.federation.UserMapStorageFactory; import org.keycloak.testsuite.federation.UserPropertyFileStorageFactory; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.pages.AppPage; import org.keycloak.testsuite.pages.LoginPage; import org.keycloak.testsuite.pages.RegisterPage; @@ -56,6 +55,7 @@ import org.keycloak.testsuite.updaters.RealmAttributeUpdater; import org.keycloak.testsuite.util.AccountHelper; import org.keycloak.testsuite.util.GreenMailRule; import org.keycloak.testsuite.util.TestCleanup; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.userprofile.DefaultAttributes; import org.openqa.selenium.Cookie; @@ -169,7 +169,7 @@ public class UserStorageTest extends AbstractAuthTest { createAppClientInRealm(testRealmResource().toRepresentation().getRealm()); UserProfileResource userProfileRes = testRealmResource().users().userProfile(); - VerifyProfileTest.enableUnmanagedAttributes(userProfileRes); + UserProfileUtil.enableUnmanagedAttributes(userProfileRes); } @After diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/ConditionalUserAttributeAuthenticatorTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/ConditionalUserAttributeAuthenticatorTest.java index 5c31eaa0a58..b05845e41d5 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/ConditionalUserAttributeAuthenticatorTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/forms/ConditionalUserAttributeAuthenticatorTest.java @@ -25,6 +25,7 @@ import org.keycloak.testsuite.util.AccountHelper; import org.keycloak.testsuite.util.FlowUtil; import org.keycloak.testsuite.util.GroupBuilder; import org.keycloak.testsuite.util.UserBuilder; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import java.util.HashMap; import java.util.List; @@ -68,7 +69,7 @@ public class ConditionalUserAttributeAuthenticatorTest extends AbstractTestRealm @Before public void configureUserProfile() { UserProfileResource userProfileRes = testRealm().users().userProfile(); - VerifyProfileTest.enableUnmanagedAttributes(userProfileRes); + UserProfileUtil.enableUnmanagedAttributes(userProfileRes); } private void createUsers() { 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 564a0e8a67f..2d5340f0a37 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 @@ -22,11 +22,11 @@ import static org.hamcrest.Matchers.anyOf; import static org.hamcrest.Matchers.containsString; import static org.junit.Assert.assertEquals; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ALL; -import static org.keycloak.testsuite.forms.VerifyProfileTest.PERMISSIONS_ADMIN_EDITABLE; -import static org.keycloak.testsuite.forms.VerifyProfileTest.SCOPE_DEPARTMENT; -import static org.keycloak.testsuite.forms.VerifyProfileTest.VALIDATIONS_LENGTH; -import static org.keycloak.testsuite.forms.VerifyProfileTest.ATTRIBUTE_DEPARTMENT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ALL; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_EDITABLE; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.SCOPE_DEPARTMENT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.VALIDATIONS_LENGTH; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.ATTRIBUTE_DEPARTMENT; import java.util.ArrayList; import java.util.Collections; @@ -39,7 +39,6 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.keycloak.OAuth2Constants; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.UserRepresentation; @@ -53,6 +52,7 @@ import org.keycloak.testsuite.pages.RegisterPage; import org.keycloak.testsuite.util.ClientScopeBuilder; import org.keycloak.testsuite.util.GreenMailRule; import org.keycloak.testsuite.util.KeycloakModelUtils; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; @@ -110,7 +110,7 @@ public class RegisterWithUserProfileTest extends AbstractTestRealmKeycloakTest { @Before public void beforeTest() { - VerifyProfileTest.setUserProfileConfiguration(testRealm(),null); + UserProfileUtil.setUserProfileConfiguration(testRealm(),null); } @Test @@ -276,11 +276,11 @@ public class RegisterWithUserProfileTest extends AbstractTestRealmKeycloakTest { public void testAttributeGuiOrder() { setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + "}" + + "{\"name\": \"lastName\"," + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"department\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"required\":{}}," + + "{\"name\": \"username\", " + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + UserProfileUtil.PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"email\", " + UserProfileUtil.PERMISSIONS_ALL + "}" + "]}"); loginPage.open(); @@ -298,20 +298,20 @@ public class RegisterWithUserProfileTest extends AbstractTestRealmKeycloakTest { } } - 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.\"}}," - + "{\"name\": \"textWithBasicAttributes\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"text\",\"inputTypeSize\":\"35\",\"inputTypeMinlength\":\"1\",\"inputTypeMaxlength\":\"10\",\"inputTypePattern\":\".*\"}}," - + "{\"name\": \"html5NumberWithAttributes\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"html5-number\",\"inputTypeMin\":\"10\",\"inputTypeMax\":\"20\",\"inputTypeStep\":1}}," - + "{\"name\": \"textareaWithAttributes\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"textarea\",\"inputTypeCols\":\"35\",\"inputTypeRows\":\"7\",\"inputTypeMaxlength\":\"10\"}}," - + "{\"name\": \"selectWithoutOptions\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"select\",\"inputTypeSize\":\"5\"}}," - + "{\"name\": \"selectWithOptionsWithoutLabels\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\":{\"options\":{\"options\":[ \"opt1\",\"opt2\"]}}, \"annotations\":{\"inputType\":\"select\"}}," - + "{\"name\": \"multiselectWithOptionsAndSimpleI18nLabels\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\":{\"options\":{ \"options\":[\"totp\",\"opt2\"]}}, \"annotations\":{\"inputType\":\"multiselect\",\"inputOptionLabelsI18nPrefix\": \"loginTotp\"}}," - + "{\"name\": \"multiselectWithOptionsAndLabels\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"validations\":{\"options\":{ \"options\":[\"opt1\",\"opt2\",\"opt3\"]}}, \"annotations\":{\"inputType\":\"multiselect\",\"inputOptionLabels\":{\"opt1\": \"Option 1\",\"opt2\":\"${username}\"}}}," - + "{\"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}\"}}}"; + public static final String UP_CONFIG_PART_INPUT_TYPES = "{\"name\": \"defaultType\"," + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"placeholderAttribute\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"text\",\"inputTypePlaceholder\":\"Example.\"}}," + + "{\"name\": \"helperTexts\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"text\",\"inputHelperTextBefore\":\"Example bold text before.\",\"inputHelperTextAfter\":\"Example i text after.\"}}," + + "{\"name\": \"textWithBasicAttributes\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"text\",\"inputTypeSize\":\"35\",\"inputTypeMinlength\":\"1\",\"inputTypeMaxlength\":\"10\",\"inputTypePattern\":\".*\"}}," + + "{\"name\": \"html5NumberWithAttributes\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"html5-number\",\"inputTypeMin\":\"10\",\"inputTypeMax\":\"20\",\"inputTypeStep\":1}}," + + "{\"name\": \"textareaWithAttributes\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"textarea\",\"inputTypeCols\":\"35\",\"inputTypeRows\":\"7\",\"inputTypeMaxlength\":\"10\"}}," + + "{\"name\": \"selectWithoutOptions\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"annotations\":{\"inputType\":\"select\",\"inputTypeSize\":\"5\"}}," + + "{\"name\": \"selectWithOptionsWithoutLabels\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"validations\":{\"options\":{\"options\":[ \"opt1\",\"opt2\"]}}, \"annotations\":{\"inputType\":\"select\"}}," + + "{\"name\": \"multiselectWithOptionsAndSimpleI18nLabels\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"validations\":{\"options\":{ \"options\":[\"totp\",\"opt2\"]}}, \"annotations\":{\"inputType\":\"multiselect\",\"inputOptionLabelsI18nPrefix\": \"loginTotp\"}}," + + "{\"name\": \"multiselectWithOptionsAndLabels\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"validations\":{\"options\":{ \"options\":[\"opt1\",\"opt2\",\"opt3\"]}}, \"annotations\":{\"inputType\":\"multiselect\",\"inputOptionLabels\":{\"opt1\": \"Option 1\",\"opt2\":\"${username}\"}}}," + + "{\"name\": \"selectWithOptionsFromCustomValidatorAndLabels\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"validations\":{\"dummyOptions\":{\"options\" : [\"vopt1\",\"vopt2\",\"vopt3\"]}} ,\"annotations\":{\"inputType\":\"select\",\"inputOptionsFromValidation\":\"dummyOptions\",\"inputOptionLabels\":{\"vopt1\": \"Option 1\",\"vopt2\":\"${username}\"}}}," + + "{\"name\": \"selectRadiobuttons\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"validations\" : {\"options\" : {\"options\":[\"opt1\",\"opt2\",\"opt3\"]}}, \"annotations\":{\"inputType\":\"select-radiobuttons\",\"inputOptionLabels\":{\"opt1\": \"Option 1\",\"opt2\":\"${username}\"}}}," + + "{\"name\": \"selectRadiobuttonsWithOptionsFromCustomValidatorAndLabels\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"validations\" : {\"dummyOptions\" : {\"options\" : [\"vopt1\",\"vopt2\",\"vopt3\"]}} ,\"annotations\":{\"inputType\":\"select-radiobuttons\",\"inputOptionsFromValidation\":\"dummyOptions\",\"inputOptionLabels\":{\"vopt1\": \"Option 1\",\"vopt2\":\"${username}\"}}}," + + "{\"name\": \"multiselectCheckboxes\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"validations\": {\"options\":{\"options\":[\"opt1\",\"opt2\",\"opt3\"]}}, \"annotations\":{\"inputType\":\"multiselect-checkboxes\",\"inputOptionLabels\":{\"opt1\": \"Option 1\",\"opt2\":\"${username}\"}}}"; @Test public void testAttributeInputTypes() { @@ -399,11 +399,11 @@ public class RegisterWithUserProfileTest extends AbstractTestRealmKeycloakTest { public void testAttributeGrouping() { setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"group\": \"contact\"}" + + "{\"name\": \"lastName\"," + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"username\", " + UserProfileUtil.PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + UserProfileUtil.PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"department\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," + + "{\"name\": \"email\", " + UserProfileUtil.PERMISSIONS_ALL + ", \"group\": \"contact\"}" + "], \"groups\": [" + "{\"name\": \"company\", \"displayDescription\": \"Company field desc\" }," + "{\"name\": \"contact\" }" @@ -641,7 +641,7 @@ public class RegisterWithUserProfileTest extends AbstractTestRealmKeycloakTest { } private void setUserProfileConfiguration(String configuration) { - VerifyProfileTest.setUserProfileConfiguration(testRealm(), configuration); + UserProfileUtil.setUserProfileConfiguration(testRealm(), configuration); } private UserRepresentation getUser(String userId) { 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 aab89ab8306..f11b5441c02 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,30 +16,13 @@ */ 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; -import static org.keycloak.userprofile.config.UPConfigUtils.ROLE_ADMIN; -import static org.keycloak.userprofile.config.UPConfigUtils.ROLE_USER; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.UUID; - import org.apache.commons.lang3.StringUtils; import org.jboss.arquillian.graphene.page.Page; import org.jboss.arquillian.test.api.ArquillianResource; import org.junit.Assert; import org.junit.Rule; import org.junit.Test; -import org.keycloak.OAuth2Constants; import org.keycloak.admin.client.resource.RealmResource; -import org.keycloak.admin.client.resource.UserProfileResource; import org.keycloak.common.Profile; import org.keycloak.events.Details; import org.keycloak.events.EventType; @@ -50,9 +33,6 @@ import org.keycloak.representations.idm.AdminEventRepresentation; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.RealmRepresentation; import org.keycloak.representations.idm.UserRepresentation; -import org.keycloak.representations.userprofile.config.UPAttribute; -import org.keycloak.representations.userprofile.config.UPAttributePermissions; -import org.keycloak.representations.userprofile.config.UPAttributeRequired; import org.keycloak.representations.userprofile.config.UPConfig; import org.keycloak.testsuite.AbstractTestRealmKeycloakTest; import org.keycloak.testsuite.AssertEvents; @@ -67,35 +47,39 @@ import org.keycloak.testsuite.util.AssertAdminEvents; import org.keycloak.testsuite.util.ClientScopeBuilder; import org.keycloak.testsuite.util.JsonTestUtils; import org.keycloak.testsuite.util.KeycloakModelUtils; -import org.keycloak.testsuite.util.oauth.OAuthClient; import org.keycloak.testsuite.util.RealmBuilder; import org.keycloak.testsuite.util.UserBuilder; +import org.keycloak.testsuite.util.oauth.OAuthClient; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import org.keycloak.userprofile.UserProfileContext; import org.keycloak.util.JsonSerialization; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +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; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.ATTRIBUTE_DEPARTMENT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.CONFIGURATION_FOR_USER_EDIT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_EDITABLE; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ADMIN_ONLY; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.PERMISSIONS_ALL; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.SCOPE_DEPARTMENT; +import static org.keycloak.testsuite.util.userprofile.UserProfileUtil.VALIDATIONS_LENGTH; + /** * @author Vlastimil Elias */ 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 + "}," - + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," - + "{\"name\": \"department\"," + PERMISSIONS_ALL + "}" - + "]}"; - - private static String userId; private static String user2Id; @@ -205,11 +189,11 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { updateUser(user5Id, "ExistingFirst", "ExistingLast", null); setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"group\": \"contact\"}" + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," + + "{\"name\": \"username\", " + PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}, \"group\": \"company\"}," + + "{\"name\": \"email\", " + PERMISSIONS_ALL + ", \"group\": \"contact\"}" + "], \"groups\": [" + "{\"name\": \"company\", \"displayDescription\": \"Company field desc\" }," + "{\"name\": \"contact\" }" @@ -244,11 +228,11 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { updateUser(user5Id, "ExistingFirst", "ExistingLast", null); setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"lastName\"," + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}}," - + "{\"name\": \"username\", " + VerifyProfileTest.PERMISSIONS_ALL + "}," - + "{\"name\": \"firstName\"," + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\": {}}," - + "{\"name\": \"email\", " + VerifyProfileTest.PERMISSIONS_ALL + "}" + + "{\"name\": \"lastName\"," + PERMISSIONS_ALL + "}," + + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}}," + + "{\"name\": \"username\", " + PERMISSIONS_ALL + "}," + + "{\"name\": \"firstName\"," + PERMISSIONS_ALL + ", \"required\": {}}," + + "{\"name\": \"email\", " + PERMISSIONS_ALL + "}" + "]}"); RealmRepresentation realm = testRealm().toRepresentation(); @@ -277,7 +261,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { updateUser(user5Id, "ExistingFirst", "ExistingLast", null); setUserProfileConfiguration("{\"attributes\": [" - + "{\"name\": \"department\", " + VerifyProfileTest.PERMISSIONS_ALL + ", \"required\":{}}," + + "{\"name\": \"department\", " + PERMISSIONS_ALL + ", \"required\":{}}," + RegisterWithUserProfileTest.UP_CONFIG_PART_INPUT_TYPES + "]}"); @@ -1136,7 +1120,7 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { protected UPConfig setUserProfileConfiguration(String configuration) { assertAdminEvents.clear(); - UPConfig result = setUserProfileConfiguration(testRealm(), configuration); + UPConfig result = UserProfileUtil.setUserProfileConfiguration(testRealm(), configuration); AdminEventRepresentation adminEvent = assertAdminEvents.assertEvent(TEST_REALM_NAME, OperationType.UPDATE, AdminEventPaths.userProfilePath(), ResourceType.USER_PROFILE); Assert.assertTrue("Incorrect representation in event", StringUtils.isBlank(configuration) @@ -1145,39 +1129,6 @@ public class VerifyProfileTest extends AbstractTestRealmKeycloakTest { return result; } - public static UPConfig setUserProfileConfiguration(RealmResource testRealm, String configuration) { - try { - UPConfig config = configuration == null ? null : JsonSerialization.readValue(configuration, UPConfig.class); - - if (config != null) { - UPAttribute username = config.getAttribute(UserModel.USERNAME); - - if (username == null) { - config.addOrReplaceAttribute(new UPAttribute(UserModel.USERNAME)); - } - - UPAttribute email = config.getAttribute(UserModel.EMAIL); - - if (email == null) { - config.addOrReplaceAttribute(new UPAttribute(UserModel.EMAIL, new UPAttributePermissions(Set.of(ROLE_USER, ROLE_ADMIN), Set.of(ROLE_USER, ROLE_ADMIN)), new UPAttributeRequired(Set.of(ROLE_USER), Set.of()))); - } - } - - testRealm.users().userProfile().update(config); - - return config; - } catch (IOException ioe) { - throw new RuntimeException("Failed to read configuration", ioe); - } - } - - public static UPConfig enableUnmanagedAttributes(UserProfileResource upResource) { - UPConfig cfg = upResource.getConfiguration(); - cfg.setUnmanagedAttributePolicy(UPConfig.UnmanagedAttributePolicy.ENABLED); - upResource.update(cfg); - return cfg; - } - public static UserRepresentation getUser(RealmResource testRealm, String userId) { return testRealm.users().get(userId).toRepresentation(); } diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OIDCProtocolMappersTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OIDCProtocolMappersTest.java index 6a9afab0a50..84b0ae7e3c9 100644 --- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OIDCProtocolMappersTest.java +++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/oauth/OIDCProtocolMappersTest.java @@ -53,7 +53,6 @@ import org.keycloak.testsuite.Assert; import org.keycloak.testsuite.AssertEvents; import org.keycloak.testsuite.admin.ApiUtil; import org.keycloak.testsuite.arquillian.annotation.EnableFeature; -import org.keycloak.testsuite.forms.VerifyProfileTest; import org.keycloak.testsuite.updaters.ClientAttributeUpdater; import org.keycloak.testsuite.updaters.ProtocolMappersUpdater; import org.keycloak.testsuite.util.AdminClientUtil; @@ -65,6 +64,7 @@ import org.keycloak.testsuite.util.UserInfoClientUtil; import jakarta.ws.rs.client.Client; import jakarta.ws.rs.core.Response; +import org.keycloak.testsuite.util.userprofile.UserProfileUtil; import java.nio.charset.StandardCharsets; import java.util.Arrays; @@ -127,7 +127,7 @@ public class OIDCProtocolMappersTest extends AbstractKeycloakTest { // enable user profile unmanaged attributes UserProfileResource upResource = adminClient.realm("test").users().userProfile(); - VerifyProfileTest.enableUnmanagedAttributes(upResource); + UserProfileUtil.enableUnmanagedAttributes(upResource); }