////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2009-2013 Denim Group, Ltd.
//
// The contents of this file are subject to the Mozilla Public 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.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
// License for the specific language governing rights and limitations
// under the License.
//
// The Original Code is ThreadFix.
//
// The Initial Developer of the Original Code is Denim Group, Ltd.
// Portions created by Denim Group, Ltd. are Copyright (C)
// Denim Group, Ltd. All Rights Reserved.
//
// Contributor(s): Denim Group, Ltd.
//
////////////////////////////////////////////////////////////////////////
package com.denimgroup.threadfix.selenium.pages;
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;
public class UserIndexPage extends BasePage {
private WebElement addUserLink;
// private List<WebElement> deleteButtons = new ArrayList<WebElement>();
private List<WebElement> names = new ArrayList<WebElement>();
private List<WebElement> editLinks = new ArrayList<WebElement>();
public int getNumRows() {
return driver.findElementsByClassName("bodyRow").size();
}
public UserIndexPage(WebDriver webdriver) {
super(webdriver);
addUserLink = driver.findElementById("newUserModalLink");
for (int i = 1; i <= getNumRows(); i++) {
// deleteButtons.add(driver.findElementById("delete" + i));
names.add(driver.findElementById("name" + i));
editLinks.add(driver.findElementById("editUserModal" + i +"Link"));
//edit permissions buttons
}
}
private int getIndex(String roleName) {
int i = -1;
for (WebElement name : names) {
i++;
String text = name.getText().trim();
if (text.equals(roleName.trim())) {
return i;
}
}
return -1;
}
public UserIndexPage clickDeleteButton(String roleName) {
clickEditLink(roleName);
sleep(500);
driver.findElementById("delete"+(getIndex(roleName)+1)).click();
handleAlert();
return new UserIndexPage(driver);
}
public LoginPage clickDeleteButtonSameUser(String roleName) {
clickEditLink(roleName);
sleep(500);
driver.findElementById("delete"+(getIndex(roleName)+1)).click();
handleAlert();
return new LoginPage(driver);
}
public UserPermissionsPage clickEditPermissions(String name){
driver.findElementById("editPermissions"+(getIndex(name)+1)).click();
return new UserPermissionsPage(driver);
}
public UserIndexPage clickAddUserLink() {
addUserLink.click();
waitForElement(driver.findElementById("nameAndPasswordForm"));
return new UserIndexPage(driver);
}
public UserIndexPage enterName(String name,String oldName){
if(oldName == null){
driver.findElementById("nameInput").clear();
driver.findElementById("nameInput").sendKeys(name);
}else{
driver.findElementById("nameInput"+(getIndex(oldName)+1)).clear();
driver.findElementById("nameInput"+(getIndex(oldName)+1)).sendKeys(name);
}
return new UserIndexPage(driver);
}
public UserIndexPage enterPassword(String password,String oldName){
if(oldName == null){
driver.findElementById("passwordInput").clear();
driver.findElementById("passwordInput").sendKeys(password);
}else{
driver.findElementById("passwordInput"+(getIndex(oldName)+1)).clear();
driver.findElementById("passwordInput"+(getIndex(oldName)+1)).sendKeys(password);
}
return new UserIndexPage(driver);
}
public UserIndexPage enterConfirmPassword(String password,String oldName){
if(oldName == null){
driver.findElementById("passwordConfirmInput").clear();
driver.findElementById("passwordConfirmInput").sendKeys(password);
}else{
driver.findElementById("passwordConfirmInput"+(getIndex(oldName)+1)).clear();
driver.findElementById("passwordConfirmInput"+(getIndex(oldName)+1)).sendKeys(password);
}
return new UserIndexPage(driver);
}
public UserIndexPage clickLDAP(String oldName){
if(oldName == null){
driver.findElementById("newUserModal").findElement(By.id("isLdapUserCheckbox")).click();
}else{
driver.findElementById("isLdapUserCheckbox"+(getIndex(oldName)+1)).click();
}
return new UserIndexPage(driver);
}
public boolean isLDAPSelected(String oldName){
return driver.findElementById("isLdapUserCheckbox"+(getIndex(oldName)+1)).isSelected();
}
public UserIndexPage clickGlobalAccess(String oldName){
if(oldName == null){
driver.findElementById("hasGlobalGroupAccessCheckbox" + (getIndex(oldName)+1)).click();
}else{
driver.findElementById("hasGlobalGroupAccessCheckbox" + (getIndex(oldName)+1)).click();
}
return new UserIndexPage(driver);
}
public UserIndexPage chooseRoleForGlobalAccess(String role,String oldName){
if(oldName == null){
new Select(driver.findElementById("roleSelect")).selectByVisibleText(role);
}else{
new Select(driver.findElementById("roleSelect"+(getIndex(oldName)+1))).selectByVisibleText(role);
}
return new UserIndexPage(driver);
}
public UserIndexPage clickAddNewUserBtn(){
driver.findElementsById("addUserButton").get(getNumRows()).click();
sleep(1000);
// waitForInvisibleElement(driver.findElementById("newUserModal"));
return new UserIndexPage(driver);
}
public UserIndexPage clickAddNewUserBtnInvalid(){
sleep(500);
driver.findElementsById("addUserButton").get(getNumRows()).click();
sleep(500);
return new UserIndexPage(driver);
}
public UserIndexPage clickUpdateUserBtn(String name){
driver.findElementsById("addUserButton").get(getIndex(name)).click();
// waitForInvisibleElement(driver.findElementById("editUserModal"+(getIndex(name)+1)));
sleep(1000);
return new UserIndexPage(driver);
}
public UserIndexPage clickUpdateUserBtnInvalid(String name){
sleep(500);
driver.findElementsById("addUserButton").get(getIndex(name)).click();
sleep(500);
return new UserIndexPage(driver);
}
public String getGlobalAccessRole(String name){
return new Select(driver.findElementById("roleSelect"+(getIndex(name)+1))).getAllSelectedOptions().get(0).getText().trim();
}
public boolean isUserNamePresent(String userName) {
return getIndex(userName) != -1;
}
public UserIndexPage clickEditLink(String roleName) {
editLinks.get(getIndex(roleName)).click();
return new UserIndexPage(driver);
}
public boolean isSuccessDisplayed(String name){
return driver.findElementByClassName("alert-success").getText().contains(name);
}
public String getNameError(){
return driver.findElementById("name.errors").getText().trim();
}
public String getPasswordError(){
return driver.findElementById("password.errors").getText().trim();
}
public UserIndexPage clickCancel(String name){
driver.findElementsByClassName("modal-footer").get(getIndex(name)).findElement(By.className("btn")).click();
sleep(1000);
return new UserIndexPage(driver);
}
public boolean isGlobalAccessErrorPresent(){
return driver.findElementById("hasGlobalGroupAccessErrors").getText().contains("This would leave users unable to access the user management portion of ThreadFix.");
}
public boolean isRoleSelected(String oldName,String role){
sleep(1000);
if(oldName == null){
return new Select(driver.findElementById("roleSelect")).getFirstSelectedOption().getText().contains(role);
}else{
return new Select(driver.findElementById("roleSelect"+(getIndex(oldName)+1))).getFirstSelectedOption().getText().contains(role);
}
}
public boolean isGlobalAccessSelected(String oldName){
return driver.findElementById("hasGlobalGroupAccessCheckbox" + (getIndex(oldName)+1)).isSelected();
}
}