Merge pull request #1358 from tkyjovsk/master

fixed some UI tests broken by KEYCLOAK-1431
This commit is contained in:
Stian Thorgersen 2015-06-11 13:56:23 +01:00
commit b5ee395aac
7 changed files with 240 additions and 95 deletions

View file

@ -15,7 +15,6 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.keycloak.testsuite.ui.fragment; package org.keycloak.testsuite.ui.fragment;
import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.drone.api.annotation.Drone;
@ -34,8 +33,8 @@ import org.openqa.selenium.WebElement;
*/ */
public class Navigation { public class Navigation {
@Drone @Drone
private WebDriver driver; private WebDriver driver;
@FindByJQuery("a:contains('Settings')") @FindByJQuery("a:contains('Settings')")
private WebElement settingsLink; private WebElement settingsLink;
@ -55,7 +54,7 @@ public class Navigation {
@FindByJQuery("a:contains('Tokens')") @FindByJQuery("a:contains('Tokens')")
private WebElement tokensLink; private WebElement tokensLink;
@FindByJQuery("a:contains('Sessions')") @FindByJQuery("a:contains('Sessions')")
private WebElement sessionLink; private WebElement sessionLink;
@FindByJQuery("a:contains('Security Defenses')") @FindByJQuery("a:contains('Security Defenses')")
@ -64,30 +63,30 @@ public class Navigation {
@FindByJQuery("a:contains('Events')") @FindByJQuery("a:contains('Events')")
private WebElement eventsLink; private WebElement eventsLink;
@FindByJQuery("a:contains('Login')") @FindByJQuery("a:contains('Login')")
private WebElement loginLink; private WebElement loginLink;
@FindByJQuery("a:contains('Themes')") @FindByJQuery("a:contains('Themes')")
private WebElement themesLink; private WebElement themesLink;
@FindByJQuery("a:contains('Role Mappings')") @FindByJQuery("a:contains('Role Mappings')")
private WebElement usersRoleMappings; private WebElement usersRoleMappings;
@FindByJQuery("a:contains('Add Realm')") @FindByJQuery("a:contains('Add Realm')")
private WebElement addRealm; private WebElement addRealm;
@FindByJQuery("a:contains('Credentials')") @FindByJQuery("a:contains('Credentials')")
private WebElement credentials; private WebElement credentials;
@FindByJQuery("a:contains('Attributes')") @FindByJQuery("a:contains('Attributes')")
private WebElement attributes; private WebElement attributes;
@FindBy(css = "div h1") @FindBy(css = "div h1")
private WebElement currentHeader; private WebElement currentHeader;
public void selectRealm(String realmName) { public void selectRealm(String realmName) {
driver.findElement(By.linkText(realmName)).click(); driver.findElement(By.linkText(realmName)).click();
} }
public void settings() { public void settings() {
openPage(settingsLink, "Settings"); openPage(settingsLink, "Settings");
@ -113,9 +112,9 @@ public class Navigation {
openPage(tokensLink, "Settings"); openPage(tokensLink, "Settings");
} }
public void sessions() { public void sessions() {
openPage(sessionLink, "Sessions"); openPage(sessionLink, "Sessions");
} }
public void security() { public void security() {
openPage(securityLink, "Settings"); openPage(securityLink, "Settings");
@ -125,29 +124,31 @@ public class Navigation {
openPage(eventsLink, "Events"); openPage(eventsLink, "Events");
} }
public void login() { public void login() {
openPage(loginLink, "Settings"); openPage(loginLink, "Settings");
} }
public void themes() { public void themes() {
openPage(themesLink, "Settings"); openPage(themesLink, "Settings");
} }
public void roleMappings() { public void roleMappings(String username) {
openPage(usersRoleMappings, "User"); String usernameCapitalized = Character.toUpperCase(username.charAt(0))
} + username.substring(1);
openPage(usersRoleMappings, usernameCapitalized);
}
public void addRealm() { public void addRealm() {
openPage(addRealm, "Add Realm"); openPage(addRealm, "Add Realm");
} }
public void credentials() { public void credentials() {
openPage(credentials, "Settings"); openPage(credentials, "Settings");
} }
public void attributes() { public void attributes() {
openPage(attributes, "Attributes"); openPage(attributes, "Attributes");
} }
private void openPage(WebElement page, String headerText) { private void openPage(WebElement page, String headerText) {
waitGuiForElement(page); waitGuiForElement(page);

View file

@ -0,0 +1,71 @@
package org.keycloak.testsuite.ui.page.settings.user;
import org.keycloak.testsuite.ui.page.AbstractPage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.Select;
import static org.keycloak.testsuite.ui.util.SeleniumUtils.waitGuiForElement;
/**
* Created by fkiss.
*/
public class RoleMappingsPage extends AbstractPage {
@FindBy(id = "available")
private Select availableRolesSelect;
@FindBy(id = "assigned")
private Select assignedRolesSelect;
@FindBy(id = "realm-composite")
private Select effectiveRolesSelect;
@FindBy(id = "available-client")
private Select availableClientRolesSelect;
@FindBy(id = "assigned-client")
private Select assignedClientRolesSelect;
@FindBy(css = "button[ng-click*='addRealm']")
private WebElement addSelected;
@FindBy(css = "button[ng-click*='addRealm']")
private WebElement addSelectedButton;
@FindBy(css = "button[ng-click*='deleteRealm']")
private WebElement removeSelectedButton;
@FindBy(id = "clients")
private Select clientRolesSelect;
public void addAvailableRole(String role){
waitGuiForElement(By.id("available"));
availableRolesSelect.selectByVisibleText(role);
addSelected.click();
}
public void removeAssignedRole(String client){
waitGuiForElement(By.id("assigned"));
assignedRolesSelect.selectByVisibleText(client);
removeSelectedButton.click();
}
public void selectClientRole(String client){
waitGuiForElement(By.id("clients"));
clientRolesSelect.selectByVisibleText(client);
}
public void addAvailableClientRole(String role){
waitGuiForElement(By.id("available-client"));
availableRolesSelect.selectByVisibleText(role);
addSelected.click();
}
public void removeAssignedClientRole(String client){
waitGuiForElement(By.id("assigned-client"));
assignedClientRolesSelect.selectByVisibleText(client);
removeSelectedButton.click();
}
}

View file

@ -16,7 +16,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.keycloak.testsuite.ui.page.settings; package org.keycloak.testsuite.ui.page.settings.user;
import org.jboss.arquillian.graphene.findby.FindByJQuery; import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.keycloak.testsuite.ui.model.User; import org.keycloak.testsuite.ui.model.User;

View file

@ -3,7 +3,6 @@
* To change this template file, choose Tools | Templates * To change this template file, choose Tools | Templates
* and open the template in the editor. * and open the template in the editor.
*/ */
package org.keycloak.testsuite.ui.test.role; package org.keycloak.testsuite.ui.test.role;
import org.jboss.arquillian.graphene.findby.FindByJQuery; import org.jboss.arquillian.graphene.findby.FindByJQuery;
@ -17,40 +16,39 @@ import org.junit.Before;
import org.junit.Ignore; import org.junit.Ignore;
import org.keycloak.testsuite.ui.AbstractKeyCloakTest; import org.keycloak.testsuite.ui.AbstractKeyCloakTest;
import org.keycloak.testsuite.ui.fragment.FlashMessage; import org.keycloak.testsuite.ui.fragment.FlashMessage;
import org.keycloak.testsuite.ui.page.settings.UserPage; import org.keycloak.testsuite.ui.page.settings.user.UserPage;
import static org.openqa.selenium.By.id; import static org.openqa.selenium.By.id;
import org.openqa.selenium.support.ui.Select; import org.openqa.selenium.support.ui.Select;
/** /**
* *
* @author Petr Mensik * @author Petr Mensik
*/ */
public class AddNewRoleTest extends AbstractKeyCloakTest<RolesPage> { public class AddNewRoleTest extends AbstractKeyCloakTest<RolesPage> {
@Page @Page
private UserPage userPage; private UserPage userPage;
@FindByJQuery(".alert") @FindByJQuery(".alert")
private FlashMessage flashMessage; private FlashMessage flashMessage;
@Before @Before
public void beforeTestAddNewRole() { public void beforeTestAddNewRole() {
navigation.roles(); navigation.roles();
} }
@Test @Test
public void testAddNewRole() { public void testAddNewRole() {
Role role = new Role("role1"); Role role = new Role("role1");
page.addRole(role); page.addRole(role);
flashMessage.waitUntilPresent(); flashMessage.waitUntilPresent();
assertTrue(flashMessage.getText(), flashMessage.isSuccess()); assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.roles(); navigation.roles();
assertEquals("role1", page.findRole(role.getName()).getName()); assertEquals("role1", page.findRole(role.getName()).getName());
page.deleteRole(role); page.deleteRole(role);
} }
@Ignore @Ignore
@Test @Test
public void testAddNewRoleWithLongName() { public void testAddNewRoleWithLongName() {
String name = "hjewr89y1894yh98(*&*&$jhjkashd)*(&y8934h*&@#hjkahsdj"; String name = "hjewr89y1894yh98(*&*&$jhjkashd)*(&y8934h*&@#hjkahsdj";
@ -64,31 +62,31 @@ public class AddNewRoleTest extends AbstractKeyCloakTest<RolesPage> {
public void testAddExistingRole() { public void testAddExistingRole() {
Role role = new Role("role2"); Role role = new Role("role2");
page.addRole(role); page.addRole(role);
flashMessage.waitUntilPresent(); flashMessage.waitUntilPresent();
assertTrue(flashMessage.getText(), flashMessage.isSuccess()); assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.roles(); navigation.roles();
page.addRole(role); page.addRole(role);
flashMessage.waitUntilPresent(); flashMessage.waitUntilPresent();
assertTrue(flashMessage.getText(), flashMessage.isDanger()); assertTrue(flashMessage.getText(), flashMessage.isDanger());
navigation.roles(); navigation.roles();
page.deleteRole(role); page.deleteRole(role);
} }
@Test @Test
public void testRoleIsAvailableForUsers() { public void testRoleIsAvailableForUsers() {
Role role = new Role("User role"); Role role = new Role("User role");
page.addRole(role); page.addRole(role);
flashMessage.waitUntilPresent(); flashMessage.waitUntilPresent();
assertTrue(flashMessage.getText(), flashMessage.isSuccess()); assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.users(); navigation.users();
userPage.showAllUsers(); userPage.showAllUsers();
userPage.goToUser("admin"); userPage.goToUser("admin");
navigation.roleMappings(); navigation.roleMappings("Admin");
Select rolesSelect = new Select(driver.findElement(id("available"))); Select rolesSelect = new Select(driver.findElement(id("available")));
assertEquals("User role should be present in admin role mapping", assertEquals("User role should be present in admin role mapping",
role.getName(), rolesSelect.getOptions().get(0).getText()); role.getName(), rolesSelect.getOptions().get(0).getText());
navigation.roles(); navigation.roles();
page.deleteRole(role); page.deleteRole(role);
} }
} }

View file

@ -22,7 +22,7 @@ import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.junit.Test; import org.junit.Test;
import org.keycloak.testsuite.ui.fragment.FlashMessage; import org.keycloak.testsuite.ui.fragment.FlashMessage;
import org.keycloak.testsuite.ui.model.User; import org.keycloak.testsuite.ui.model.User;
import org.keycloak.testsuite.ui.page.settings.UserPage; import org.keycloak.testsuite.ui.page.settings.user.UserPage;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -100,13 +100,16 @@ public class AddNewUserTest extends AbstractKeyCloakTest<UserPage> {
@Test @Test
public void addDisabledUser() { public void addDisabledUser() {
page.addUser(TEST_USER1); User disabledUser = new User(TEST_USER1);
disabledUser.setUserEnabled(false);
disabledUser.setUserName("disabled_user");
page.addUser(disabledUser);
assertTrue(flashMessage.getText(), flashMessage.isSuccess()); assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.users(); navigation.users();
page.deleteUser(TEST_USER1.getUserName()); page.deleteUser(disabledUser.getUserName());
flashMessage.waitUntilPresent(); flashMessage.waitUntilPresent();
assertTrue(flashMessage.getText(), flashMessage.isSuccess()); assertTrue(flashMessage.getText(), flashMessage.isSuccess());
assertNull(page.findUser(TEST_USER1.getUserName())); assertNull(page.findUser(disabledUser.getUserName()));
} }

View file

@ -25,7 +25,7 @@ import org.junit.Test;
import org.keycloak.testsuite.ui.fragment.FlashMessage; import org.keycloak.testsuite.ui.fragment.FlashMessage;
import org.keycloak.testsuite.ui.model.User; import org.keycloak.testsuite.ui.model.User;
import org.keycloak.testsuite.ui.page.RegisterPage; import org.keycloak.testsuite.ui.page.RegisterPage;
import org.keycloak.testsuite.ui.page.settings.UserPage; import org.keycloak.testsuite.ui.page.settings.user.UserPage;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import org.junit.Before; import org.junit.Before;

View file

@ -0,0 +1,72 @@
package org.keycloak.testsuite.ui.test.user;
import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.keycloak.testsuite.ui.AbstractKeyCloakTest;
import org.keycloak.testsuite.ui.fragment.FlashMessage;
import org.keycloak.testsuite.ui.model.User;
import org.keycloak.testsuite.ui.page.settings.user.RoleMappingsPage;
import org.keycloak.testsuite.ui.page.settings.user.UserPage;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.openqa.selenium.By.linkText;
/**
* Created by fkiss.
*/
public class RoleMappingsTest extends AbstractKeyCloakTest<RoleMappingsPage> {
@Page
private UserPage userPage;
@FindByJQuery(".alert")
private FlashMessage flashMessage;
@Before
public void beforeAddNewUserTest() {
navigation.users();
}
@Test
public void addUserAndAssignRole() {
String testUsername = "tester1";
User testUser = new User(testUsername, "pass");
userPage.addUser(testUser);
flashMessage.waitUntilPresent();
assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.users();
userPage.findUser(testUsername);
driver.findElement(linkText(testUsername)).click();
navigation.roleMappings(testUsername);
page.addAvailableRole("create-realm");
assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.users();
userPage.deleteUser(testUsername);
}
@Ignore
@Test
public void addAndRemoveUserAndAssignRole() {
String testUsername = "tester2";
User testUser = new User(testUsername, "pass");
userPage.addUser(testUser);
flashMessage.waitUntilPresent();
assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.users();
userPage.findUser(testUsername);
driver.findElement(linkText(testUsername)).click();
navigation.roleMappings(testUsername);
page.addAvailableRole("create-realm");
assertTrue(flashMessage.getText(), flashMessage.isSuccess());
page.removeAssignedRole("create-realm");
assertTrue(flashMessage.getText(), flashMessage.isSuccess());
navigation.users();
userPage.deleteUser(testUsername);
}
}