package org.keycloak.testsuite.console.page.roles;
import org.keycloak.representations.idm.RoleRepresentation;
import org.keycloak.testsuite.console.page.fragment.DataTable;
import org.openqa.selenium.WebElement;
import java.util.ArrayList;
import java.util.List;
import static org.openqa.selenium.By.tagName;
/**
*
* @author tkyjovsk
*/
public class RolesTable extends DataTable {
public static final String ADD_ROLE = "Add Role";
public static final String EDIT = "Edit";
public static final String DELETE = "Delete";
public List<RoleRepresentation> searchRoles(String searchPattern) {
search(searchPattern);
return getRolesFromTableRows();
}
public void addRole() {
clickHeaderLink(ADD_ROLE);
}
public void clickRole(String name) {
clickRowByLinkText(name);
}
public void editRole(String name) {
clickRowActionButton(getRowByLinkText(name), EDIT);
}
public void deleteRole(String name) {
clickRowActionButton(getRowByLinkText(name), DELETE);
}
public RoleRepresentation findRole(String name) {
List<RoleRepresentation> roles = searchRoles(name);
if (roles.isEmpty()) {
return null;
} else {
assert 1 == roles.size();
return roles.get(0);
}
}
public boolean containsRole(String roleName) {
for (RoleRepresentation r : getRolesFromTableRows()) {
if (roleName.equals(r.getName())) {
return true;
}
}
return false;
}
public List<RoleRepresentation> getRolesFromTableRows() {
List<RoleRepresentation> rows = new ArrayList<>();
for (WebElement row : rows()) {
RoleRepresentation role = getRoleFromRow(row);
if (role != null) {
rows.add(role);
}
}
return rows;
}
public RoleRepresentation getRoleFromRow(WebElement row) {
RoleRepresentation role = null;
List<WebElement> tds = row.findElements(tagName("td"));
if (!(tds.isEmpty() || tds.get(0).getText().isEmpty())) {
role = new RoleRepresentation();
role.setName(tds.get(0).getText());
role.setComposite(Boolean.valueOf(tds.get(1).getText()));
role.setDescription(tds.get(2).getText());
}
return role;
}
}