From 709449243caa00707d681d83cbfe08ac7154d1ec Mon Sep 17 00:00:00 2001 From: vmuzikar Date: Mon, 5 Oct 2015 13:04:48 +0200 Subject: [PATCH 1/7] Added @id to some UI elements (cherry picked from commit 4034258) --- .../theme/base/admin/resources/partials/client-detail.html | 4 ++-- .../base/admin/resources/partials/client-mappers-add.html | 2 +- .../theme/base/admin/resources/partials/password-policy.html | 2 +- .../theme/base/admin/resources/partials/required-actions.html | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html index 443cbe94ca0..521045f450c 100755 --- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html +++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html @@ -207,7 +207,7 @@
- +
@@ -266,7 +266,7 @@
- +
diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-mappers-add.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-mappers-add.html index 4237f7dce4b..04c2339238e 100755 --- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-mappers-add.html +++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-mappers-add.html @@ -37,7 +37,7 @@ {{mapper.name}} {{mapperTypes[mapper.protocolMapper].category}} {{mapperTypes[mapper.protocolMapper].name}} - + {{:: 'no-mappers-available' | translate}} diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html index 58942ce57d3..8a6fe6cce6f 100755 --- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html +++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html @@ -30,7 +30,7 @@ {{p.name|capitalize}} - diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html index 0161a3011eb..e9c8c1eda8c 100755 --- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html +++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html @@ -20,8 +20,8 @@ {{requiredAction.name}} - - + + No required actions configured From 5e0851c25f83cb539765c97a596ab1628a5b8f82 Mon Sep 17 00:00:00 2001 From: vmuzikar Date: Mon, 12 Oct 2015 18:57:36 +0200 Subject: [PATCH 2/7] Rewritten some POs to use @id attributes (cherry picked from commit 12b9c7e) --- .../page/authentication/RequiredActions.java | 37 ++++++++++++------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java index 0ea6af2b514..ca3d0bbc887 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java @@ -7,11 +7,16 @@ import org.openqa.selenium.support.FindBy; /** * @author tkyjovsk * @author mhajas + * @author Vaclav Muzikar */ public class RequiredActions extends Authentication { - public final static String ENABLED = "enabled"; - public final static String DEFAULT_ACTION = "defaultAction"; + public final static String DEFAULT = "_default"; + public final static String CONFIGURE_TOTP = "CONFIGURE_TOTP"; + public final static String UPDATE_PROFILE = "UPDATE_PROFILE"; + public final static String TERMS_AND_CONDITIONS = "terms_and_conditions"; + public final static String UPDATE_PASSWORD = "UPDATE_PASSWORD"; + public final static String VERIFY_EMAIL = "VERIFY_EMAIL"; @FindBy(tagName = "table") private WebElement requiredActionTable; @@ -21,51 +26,55 @@ public class RequiredActions extends Authentication { return super.getUriFragment() + "/required-actions"; } - private void setRequiredActionValue(String row, String column, boolean value) { - WebElement checkbox = requiredActionTable.findElement(By.xpath("//td[text()='" + row + "']/..//input[@ng-model='requiredAction." + column + "']")); + private void setRequiredActionValue(String id, boolean value) { + WebElement checkbox = requiredActionTable.findElement(By.id(id)); if (checkbox.isSelected() != value) { checkbox.click(); } } + private void setRequiredActionDefaultValue(String id, boolean value) { + setRequiredActionValue(id + DEFAULT, value); + } + public void setTermsAndConditionEnabled(boolean value) { - setRequiredActionValue("Terms and Conditions", ENABLED, value); + setRequiredActionValue(TERMS_AND_CONDITIONS, value); } public void setTermsAndConditionDefaultAction(boolean value) { - setRequiredActionValue("Terms and Conditions", DEFAULT_ACTION, value); + setRequiredActionDefaultValue(TERMS_AND_CONDITIONS, value); } public void setVerifyEmailEnabled(boolean value) { - setRequiredActionValue("Verify Email", ENABLED, value); + setRequiredActionValue(VERIFY_EMAIL, value); } public void setVerifyEmailDefaultAction(boolean value) { - setRequiredActionValue("Verify Email", DEFAULT_ACTION, value); + setRequiredActionDefaultValue(VERIFY_EMAIL, value); } public void setUpdatePasswordEnabled(boolean value) { - setRequiredActionValue("Update Password", ENABLED, value); + setRequiredActionValue(UPDATE_PASSWORD, value); } public void setUpdatePasswordDefaultAction(boolean value) { - setRequiredActionValue("Update Password", DEFAULT_ACTION, value); + setRequiredActionDefaultValue(UPDATE_PASSWORD, value); } public void setConfigureTotpEnabled(boolean value) { - setRequiredActionValue("Configure Totp", ENABLED, value); + setRequiredActionValue(CONFIGURE_TOTP, value); } public void setConfigureTotpDefaultAction(boolean value) { - setRequiredActionValue("Configure Totp", DEFAULT_ACTION, value); + setRequiredActionDefaultValue(CONFIGURE_TOTP, value); } public void setUpdateProfileEnabled(boolean value) { - setRequiredActionValue("Update Profile", ENABLED, value); + setRequiredActionValue(UPDATE_PROFILE, value); } public void setUpdateProfileDefaultAction(boolean value) { - setRequiredActionValue("Update Profile", DEFAULT_ACTION, value); + setRequiredActionDefaultValue(UPDATE_PROFILE, value); } } From 8062f5f50e899aa237b96f74a4fab1d5298edfac Mon Sep 17 00:00:00 2001 From: vmuzikar Date: Wed, 21 Oct 2015 13:22:51 +0200 Subject: [PATCH 3/7] Added POs for client mappers (cherry picked from commit f491c3c) --- .../page/clients/CreateClientMappers.java | 21 +++ .../page/clients/CreateClientMappersForm.java | 124 ++++++++++++++++++ .../console/page/fragment/OnOffSwitch.java | 8 ++ 3 files changed, 153 insertions(+) create mode 100644 testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappers.java create mode 100644 testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappers.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappers.java new file mode 100644 index 00000000000..962e7a51a18 --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappers.java @@ -0,0 +1,21 @@ +package org.keycloak.testsuite.console.page.clients; + +import org.jboss.arquillian.graphene.page.Page; +import org.keycloak.testsuite.console.page.AdminConsoleCreate; + +/** + * @author Vaclav Muzikar + */ +public class CreateClientMappers extends AdminConsoleCreate { + + @Page + private CreateClientMappersForm form; + + public CreateClientMappers() { + setEntity("mappers"); + } + + public CreateClientMappersForm form() { + return form; + } +} diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java new file mode 100644 index 00000000000..8670a505e4c --- /dev/null +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java @@ -0,0 +1,124 @@ +package org.keycloak.testsuite.console.page.clients; + +import org.jboss.arquillian.test.api.ArquillianResource; +import org.keycloak.testsuite.console.page.fragment.OnOffSwitch; +import org.keycloak.testsuite.page.Form; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.interactions.Actions; +import org.openqa.selenium.support.FindBy; +import org.openqa.selenium.support.ui.Select; + +import java.util.List; + +/** + * @author Vaclav Muzikar + * + * TODO: SAML + */ +public class CreateClientMappersForm extends Form { + + // Mappers types + public static final String HARDCODED_ROLE = "Hardcoded Role"; + public static final String HARDCODED_CLAIM = "Hardcoded claim"; + public static final String USER_SESSION_NOTE = "User Session Note"; + public static final String ROLE_NAME_MAPPER = "Role Name Mapper"; + public static final String USER_ADDRESS = "User Address"; + public static final String USERS_FULL_NAME = "User's full name"; + public static final String USER_ATTRIBUTE = "User Attribute"; + public static final String USER_PROPERTY = "User Property"; + + // Attributes labels + public final static String PROPERTY_LABEL = "Property"; + public final static String USER_ATTRIBUTE_LABEL = "User Attribute"; + public final static String USER_SESSION_NOTE_LABEL = "User Session Note"; + public final static String MULTIVALUED_LABEL = "Multivalued"; + public final static String SELECT_ROLE_LABEL = "Select Role"; + public final static String TOKEN_CLAIM_NAME_LABEL = "Token Claim Name"; + public final static String CLAIM_JSON_TYPE_LABEL = "Claim JSON Type"; + public final static String ADD_TO_ID_TOKEN_LABEL = "Add to ID token"; + public final static String ADD_TO_ACCESS_TOKEN_LABEL = "Add to access token"; + + @FindBy(id = "name") + private WebElement nameElement; + + @FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='consentRequired']]") + private OnOffSwitch consentRequiredSwitch; + + @FindBy(id = "consentText") + private WebElement consentTextElement; + + @FindBy(id = "mapperTypeCreate") + private Select mapperTypeSelect; + + @FindBy + private WebElement roleElement; + + @ArquillianResource + private Actions actions; + + public void getName() { + getInputValue(nameElement); + } + + public void setName(String name) { + setInputValue(nameElement, name); + } + + public boolean isConsentRequired() { + return consentRequiredSwitch.isOn(); + } + + public void setConsentRequired(boolean consentRequired) { + consentRequiredSwitch.setOn(consentRequired); + } + + public String getConsentText() { + return getInputValue(consentTextElement); + } + + public void setConsentText(String consentText) { + setInputValue(consentTextElement, consentText); + } + + public String getMapperType() { + return mapperTypeSelect.getFirstSelectedOption().getText(); + } + + public void setMapperType(String type) { + mapperTypeSelect.selectByVisibleText(type); + } + + protected String getConfigBaseXPath(String label) { + return ".//div[@properties='mapperType.properties']//label[text()='" + label + "']//following-sibling::node()"; + } + + protected WebElement getTextInputElement(String label) { + return driver.findElement(By.xpath(getConfigBaseXPath(label) + "//input[@type='text']")); + } + + protected Select getSelectElement(String label) { + return new Select(driver.findElement(By.xpath(getConfigBaseXPath(label) + "//select"))); + } + + public String getTextInput(String label) { + return getInputValue(getTextInputElement(label)); + } + + public void setTextInput(String label, String value) { + setInputValue(getTextInputElement(label), value); + } + + public String getSelect(String label) { + return getSelectElement(label).getFirstSelectedOption().getText(); + } + + public void setSelect(String label, String value) { + getSelectElement(label).selectByVisibleText(value); + } + + public OnOffSwitch onOffSwitch(String label) { + WebElement root = driver.findElement(By.xpath(getConfigBaseXPath(label) + "//div[@class='onoffswitch']")); + return new OnOffSwitch(root, actions); + } +} diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/OnOffSwitch.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/OnOffSwitch.java index 6319c4c8207..118e0586318 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/OnOffSwitch.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/fragment/OnOffSwitch.java @@ -36,6 +36,14 @@ public class OnOffSwitch { @ArquillianResource private Actions actions; + public OnOffSwitch() { + } + + public OnOffSwitch(WebElement root, Actions actions) { + this.root = root; + this.actions = actions; + } + public boolean isOn() { waitAjaxForElement(root); return root.findElement(By.tagName("input")).isSelected(); From 700740a3789ef23b8913555affd45ab560a41091 Mon Sep 17 00:00:00 2001 From: vmuzikar Date: Wed, 21 Oct 2015 15:19:51 +0200 Subject: [PATCH 4/7] Added POs for client mappers (cherry picked from commit f2cd982) --- .../page/clients/CreateClientMappersForm.java | 141 +++++++++++++----- 1 file changed, 102 insertions(+), 39 deletions(-) diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java index 8670a505e4c..900b4d207a6 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/CreateClientMappersForm.java @@ -28,17 +28,6 @@ public class CreateClientMappersForm extends Form { public static final String USER_ATTRIBUTE = "User Attribute"; public static final String USER_PROPERTY = "User Property"; - // Attributes labels - public final static String PROPERTY_LABEL = "Property"; - public final static String USER_ATTRIBUTE_LABEL = "User Attribute"; - public final static String USER_SESSION_NOTE_LABEL = "User Session Note"; - public final static String MULTIVALUED_LABEL = "Multivalued"; - public final static String SELECT_ROLE_LABEL = "Select Role"; - public final static String TOKEN_CLAIM_NAME_LABEL = "Token Claim Name"; - public final static String CLAIM_JSON_TYPE_LABEL = "Claim JSON Type"; - public final static String ADD_TO_ID_TOKEN_LABEL = "Add to ID token"; - public final static String ADD_TO_ACCESS_TOKEN_LABEL = "Add to access token"; - @FindBy(id = "name") private WebElement nameElement; @@ -51,19 +40,38 @@ public class CreateClientMappersForm extends Form { @FindBy(id = "mapperTypeCreate") private Select mapperTypeSelect; - @FindBy - private WebElement roleElement; + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Property']//following-sibling::node()//input[@type='text']") + private WebElement propertyInput; - @ArquillianResource - private Actions actions; + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='User Attribute']//following-sibling::node()//input[@type='text']") + private WebElement userAttributeInput; - public void getName() { - getInputValue(nameElement); - } + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='User Session Note']//following-sibling::node()//input[@type='text']") + private WebElement userSessionNoteInput; - public void setName(String name) { - setInputValue(nameElement, name); - } + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Multivalued']//following-sibling::node()//div[@class='onoffswitch']") + private OnOffSwitch multivaluedInput; + + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Role']//following-sibling::node()//input[@type='text']") + private WebElement roleInput; + + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='New Role Name']//following-sibling::node()//input[@type='text']") + private WebElement newRoleInput; + + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Token Claim Name']//following-sibling::node()//input[@type='text']") + private WebElement tokenClaimNameInput; + + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Claim value']//following-sibling::node()//input[@type='text']") + private WebElement tokenClaimValueInput; + + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Claim JSON Type']//following-sibling::node()//select") + private Select claimJSONTypeInput; + + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Add to ID token']//following-sibling::node()//div[@class='onoffswitch']") + private OnOffSwitch addToIDTokenInput; + + @FindBy(xpath = ".//div[@properties='mapperType.properties']//label[text()='Add to access token']//following-sibling::node()//div[@class='onoffswitch']") + private OnOffSwitch addToAccessTokenInput; public boolean isConsentRequired() { return consentRequiredSwitch.isOn(); @@ -88,37 +96,92 @@ public class CreateClientMappersForm extends Form { public void setMapperType(String type) { mapperTypeSelect.selectByVisibleText(type); } - - protected String getConfigBaseXPath(String label) { - return ".//div[@properties='mapperType.properties']//label[text()='" + label + "']//following-sibling::node()"; + + public String getProperty() { + return getInputValue(propertyInput); + } + + public void setProperty(String value) { + setInputValue(propertyInput, value); } - protected WebElement getTextInputElement(String label) { - return driver.findElement(By.xpath(getConfigBaseXPath(label) + "//input[@type='text']")); + public String getUserAttribute() { + return getInputValue(userAttributeInput); } - protected Select getSelectElement(String label) { - return new Select(driver.findElement(By.xpath(getConfigBaseXPath(label) + "//select"))); + public void setUserAttribute(String value) { + setInputValue(userAttributeInput, value); } - public String getTextInput(String label) { - return getInputValue(getTextInputElement(label)); + public String getUserSessionNote() { + return getInputValue(userSessionNoteInput); } - public void setTextInput(String label, String value) { - setInputValue(getTextInputElement(label), value); + public void setUserSessionNote(String value) { + setInputValue(userSessionNoteInput, value); } - public String getSelect(String label) { - return getSelectElement(label).getFirstSelectedOption().getText(); + public boolean isMultivalued() { + return multivaluedInput.isOn(); } - public void setSelect(String label, String value) { - getSelectElement(label).selectByVisibleText(value); + public void setMultivalued(boolean value) { + multivaluedInput.setOn(value); } - public OnOffSwitch onOffSwitch(String label) { - WebElement root = driver.findElement(By.xpath(getConfigBaseXPath(label) + "//div[@class='onoffswitch']")); - return new OnOffSwitch(root, actions); + public String getRole() { + return getInputValue(roleInput); + } + + public void setRole(String value) { + setInputValue(roleInput, value); + } + + public String getNewRole() { + return getInputValue(newRoleInput); + } + + public void setNewRole(String value) { + setInputValue(newRoleInput, value); + } + + public String getTokenClaimName() { + return getInputValue(tokenClaimNameInput); + } + + public void setTokenClaimName(String value) { + setInputValue(tokenClaimNameInput, value); + } + + public String getTokenClaimValue() { + return getInputValue(tokenClaimValueInput); + } + + public void setTokenClaimValue(String value) { + setInputValue(tokenClaimValueInput, value); + } + + public String getClaimJSONType() { + return claimJSONTypeInput.getFirstSelectedOption().getText(); + } + + public void setClaimJSONType(String value) { + claimJSONTypeInput.selectByVisibleText(value); + } + + public boolean isAddToIDToken() { + return addToIDTokenInput.isOn(); + } + + public void setAddToIDToken(boolean value) { + addToIDTokenInput.setOn(value); + } + + public boolean isAddToAccessToken() { + return addToAccessTokenInput.isOn(); + } + + public void setAddToAccessToken(boolean value) { + addToAccessTokenInput.setOn(value); } } From ccfaf72b093246ee9226de234ec87117fa3106d7 Mon Sep 17 00:00:00 2001 From: vmuzikar Date: Mon, 26 Oct 2015 15:47:05 +0100 Subject: [PATCH 5/7] Init changes (cherry picked from commit 31d8cab) --- .../console/page/clients/ClientMappers.java | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/ClientMappers.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/ClientMappers.java index d56dca5482c..10fb7e5f897 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/ClientMappers.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/clients/ClientMappers.java @@ -1,14 +1,112 @@ package org.keycloak.testsuite.console.page.clients; +import org.keycloak.representations.idm.ProtocolMapperRepresentation; +import org.keycloak.testsuite.console.page.fragment.DataTable; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.FindBy; + +import java.util.ArrayList; +import java.util.List; + /** * * @author tkyjovsk + * @author Vaclav Muzikar */ public class ClientMappers extends Client { + public static final String ADD_BUILTIN = "Add Builtin"; + + @FindBy(tagName = "table") + private ClientMapperTable table; + @Override public String getUriFragment() { return super.getUriFragment() + "/mappers"; } + public ClientMapperTable mapperTable() { + return table; + } + + public class ClientMapperTable extends DataTable { + + public List searchMappings(String searchPattern) { + search(searchPattern); + return getMappingsFromRows(); + } + + public void createMapper() { + waitAjaxForBody(); + clickHeaderLink(CREATE); + } + + public void addBuiltin() { + waitAjaxForBody(); + clickHeaderLink(ADD_BUILTIN); + } + + public void clickMapper(String mapperName) { + waitAjaxForBody(); + body().findElement(By.linkText(mapperName)).click(); + } + + public void clickMapper(ProtocolMapperRepresentation mapper) { + clickMapper(mapper.getName()); + } + + private void clickMapperActionButton(String mapperName, String buttonText) { + waitAjaxForBody(); + clickRowActionButton(getRowByLinkText(mapperName), buttonText); + } + + private void clickMapperActionButton(ProtocolMapperRepresentation mapper, String buttonName) { + clickMapperActionButton(mapper.getName(), buttonName); + } + + public void editMapper(String mapperName) { + clickMapperActionButton(mapperName, EDIT); + } + + public void editMapper(ProtocolMapperRepresentation mapper) { + clickMapperActionButton(mapper, EDIT); + } + + public void deleteMapper(String mapperName) { + clickMapperActionButton(mapperName, DELETE); + } + + public void deleteMapper(ProtocolMapperRepresentation mapper) { + clickMapperActionButton(mapper, DELETE); + } + + public ProtocolMapperRepresentation getMappingFromRow(WebElement row) { + if (!row.isDisplayed()) {return null;} // Is that necessary? + + ProtocolMapperRepresentation mappingsRepresentation = new ProtocolMapperRepresentation(); + List cols = row.findElements(By.tagName("td")); + + + mappingsRepresentation.setName(cols.get(0).getText()); + //mappingsRepresentation.setProtocol(cols.get(1).getText()); + mappingsRepresentation.setProtocolMapper(cols.get(2).getText()); + + return mappingsRepresentation; + } + + public List getMappingsFromRows() { + List mappings = new ArrayList(); + + for (WebElement row : rows()) { + ProtocolMapperRepresentation mapperRepresentation = getMappingFromRow(row); + if (mapperRepresentation != null) { + mappings.add(mapperRepresentation); + } + } + + return mappings; + } + } + } From 059ebacffc1544282c9147546eafc5a61807aefa Mon Sep 17 00:00:00 2001 From: Vaclav Muzikar Date: Tue, 10 Nov 2015 15:45:57 +0100 Subject: [PATCH 6/7] Removed IDs from redirect URIs and Web Origins in Client (cherry picked from commit 5c68854) --- .../theme/base/admin/resources/partials/client-detail.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html index 521045f450c..443cbe94ca0 100755 --- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html +++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/client-detail.html @@ -207,7 +207,7 @@
- +
@@ -266,7 +266,7 @@
- +
From dfb39d13a2725c356769d028d49caa7463fb774b Mon Sep 17 00:00:00 2001 From: Vaclav Muzikar Date: Wed, 11 Nov 2015 11:55:44 +0100 Subject: [PATCH 7/7] Removed IDs from Password Policy (cherry picked from commit 35376b7) --- .../resources/partials/password-policy.html | 2 +- .../resources/partials/required-actions.html | 4 ++-- .../page/authentication/RequiredActions.java | 17 +++++++++++------ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html index 8a6fe6cce6f..58942ce57d3 100755 --- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html +++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/password-policy.html @@ -30,7 +30,7 @@ {{p.name|capitalize}} - diff --git a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html index e9c8c1eda8c..8a81237f4d1 100755 --- a/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html +++ b/forms/common-themes/src/main/resources/theme/base/admin/resources/partials/required-actions.html @@ -20,8 +20,8 @@ {{requiredAction.name}} - - + + No required actions configured diff --git a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java index ca3d0bbc887..b6f182a5b4c 100644 --- a/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java +++ b/testsuite/integration-arquillian/tests/base/src/main/java/org/keycloak/testsuite/console/page/authentication/RequiredActions.java @@ -11,7 +11,8 @@ import org.openqa.selenium.support.FindBy; */ public class RequiredActions extends Authentication { - public final static String DEFAULT = "_default"; + public final static String ENABLED = ".enabled"; + public final static String DEFAULT = ".defaultAction"; public final static String CONFIGURE_TOTP = "CONFIGURE_TOTP"; public final static String UPDATE_PROFILE = "UPDATE_PROFILE"; public final static String TERMS_AND_CONDITIONS = "terms_and_conditions"; @@ -34,12 +35,16 @@ public class RequiredActions extends Authentication { } } + private void setRequiredActionEnabledValue(String id, boolean value) { + setRequiredActionValue(id + ENABLED, value); + } + private void setRequiredActionDefaultValue(String id, boolean value) { setRequiredActionValue(id + DEFAULT, value); } public void setTermsAndConditionEnabled(boolean value) { - setRequiredActionValue(TERMS_AND_CONDITIONS, value); + setRequiredActionEnabledValue(TERMS_AND_CONDITIONS, value); } public void setTermsAndConditionDefaultAction(boolean value) { @@ -47,7 +52,7 @@ public class RequiredActions extends Authentication { } public void setVerifyEmailEnabled(boolean value) { - setRequiredActionValue(VERIFY_EMAIL, value); + setRequiredActionEnabledValue(VERIFY_EMAIL, value); } public void setVerifyEmailDefaultAction(boolean value) { @@ -55,7 +60,7 @@ public class RequiredActions extends Authentication { } public void setUpdatePasswordEnabled(boolean value) { - setRequiredActionValue(UPDATE_PASSWORD, value); + setRequiredActionEnabledValue(UPDATE_PASSWORD, value); } public void setUpdatePasswordDefaultAction(boolean value) { @@ -63,7 +68,7 @@ public class RequiredActions extends Authentication { } public void setConfigureTotpEnabled(boolean value) { - setRequiredActionValue(CONFIGURE_TOTP, value); + setRequiredActionEnabledValue(CONFIGURE_TOTP, value); } public void setConfigureTotpDefaultAction(boolean value) { @@ -71,7 +76,7 @@ public class RequiredActions extends Authentication { } public void setUpdateProfileEnabled(boolean value) { - setRequiredActionValue(UPDATE_PROFILE, value); + setRequiredActionEnabledValue(UPDATE_PROFILE, value); } public void setUpdateProfileDefaultAction(boolean value) {