/*
* JBoss, Home of Professional Open Source
*
* Copyright 2013 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.keycloak.testsuite.console.page.users;
import org.jboss.arquillian.drone.api.annotation.Drone;
import org.keycloak.representations.idm.UserRepresentation;
import org.keycloak.testsuite.console.page.AdminConsoleRealm;
import org.keycloak.testsuite.console.page.fragment.DataTable;
import org.keycloak.testsuite.util.URLUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import java.util.ArrayList;
import java.util.List;
import static org.keycloak.testsuite.util.WaitUtils.waitForPageToLoad;
import static org.openqa.selenium.By.*;
/**
*
* @author Filip Kiss
* @author tkyjovsk
*/
public class Users extends AdminConsoleRealm {
@Override
public String getUriFragment() {
return super.getUriFragment() + "/users";
}
public static final String VIEW_ALL_USERS = "View all users";
public static final String UNLOCK_USERS = "Unlock users";
public static final String ADD_USER = "Add user";
public static final String EDIT = "Edit";
public static final String IMPERSONATE = "Impersonate";
public static final String DELETE = "Delete";
@FindBy(xpath = "//div[./h1[text()='Users']]/table")
private UsersTable table;
public UsersTable table() {
return table;
}
public class UsersTable extends DataTable {
@Drone
private WebDriver driver;
public List<UserRepresentation> searchUsers(String searchPattern) {
search(searchPattern);
return getUsersFromTableRows();
}
public void viewAllUsers() {
clickHeaderButton(VIEW_ALL_USERS);
}
public void unlockUsers() {
clickHeaderButton(UNLOCK_USERS);
}
public void clickUser(String username) {
URLUtils.navigateToUri(driver, getRowByUsername(username).findElement(By.xpath("./td[position()=1]/a")).getAttribute("href"), true);
waitForPageToLoad(driver);
}
public void editUser(String username) {
clickRowActionButton(getRowByUsername(username), EDIT);
waitForPageToLoad(driver);
}
public void impersonateUser(String username) {
clickRowActionButton(getRowByUsername(username), IMPERSONATE);
waitForPageToLoad(driver);
}
public void deleteUser(String username) {
clickRowActionButton(getRowByUsername(username), DELETE);
modalDialog.confirmDeletion();
}
public void addUser() {
clickHeaderLink(ADD_USER);
}
public UserRepresentation findUser(String searchPattern) {
List<UserRepresentation> users = searchUsers(searchPattern);
if (users.isEmpty()) {
return null;
} else {
assert 1 == users.size();
return users.get(0);
}
}
public UserRepresentation getUserFromTableRow(WebElement row) {
UserRepresentation user = null;
List<WebElement> tds = row.findElements(tagName("td"));
if (!(tds.isEmpty() || tds.get(0).getText().isEmpty())) {
user = new UserRepresentation();
user.setUsername(tds.get(0).getText());
user.setLastName(tds.get(1).getText());
user.setFirstName(tds.get(2).getText());
user.setEmail(tds.get(3).getText());
}
return user;
}
public List<UserRepresentation> getUsersFromTableRows() {
List<UserRepresentation> users = new ArrayList<>();
List<WebElement> rows = rows();
// if (rows.size() > 1) {
for (WebElement rowElement : rows) {
if (rowElement.isDisplayed()) {
UserRepresentation user = getUserFromTableRow(rowElement);
if (user != null) {
users.add(user);
}
}
}
// }
return users;
}
protected WebElement getRowByUsername(String userName) {
return body().findElement(
By.xpath(".//tr[./td[position()=2 and text()='" + userName + "']]")
);
}
}
}