////////////////////////////////////////////////////////////////////////
//
// 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.WebDriver;
import org.openqa.selenium.WebElement;
public class ApiKeysIndexPage extends BasePage {
private List<WebElement> notes = new ArrayList<WebElement>();
//private List<WebElement> restrictedBoxes = new ArrayList<WebElement>();
private WebElement createNewKeyLink;
public ApiKeysIndexPage(WebDriver webdriver) {
super(webdriver);
createNewKeyLink = driver.findElementByLinkText("Create New Key");
for (int i = 1; i <= getNumRows(); i++) {
notes.add(driver.findElementById("note" + i));
}
}
public int getNumRows() {
List<WebElement> bodyRows = driver.findElementsByClassName("bodyRow");
if (bodyRows != null && bodyRows.size() == 1 && bodyRows.get(0).getText().contains("No keys found.")) {
return 0;
}
return driver.findElementsByClassName("bodyRow").size();
}
public int getIndex(String roleName) {
int i = -1;
for (WebElement note : notes) {
i++;
String text = note.getText().trim();
if (text.equals(roleName.trim())) {
return i;
}
}
return -1;
}
public String getKeyText(String note) {
return driver.findElementById("key"+getIndex(note)).getText();
}
public ApiKeysIndexPage clickEdit(String note) {
driver.findElementById("editKey"+(getIndex(note)+1)).click();
waitForElement(driver.findElementsByClassName("modal").get(getIndex(note)));
return new ApiKeysIndexPage(driver);
}
public ApiKeysIndexPage clickNewLink() {
createNewKeyLink.click();
waitForElement(driver.findElementById("newKeyModalDiv"));
return new ApiKeysIndexPage(driver);
}
public ApiKeysIndexPage clickDelete(String note) {
clickEdit(note);
driver.findElementsById("deleteButton").get(getIndex(note)).click();
handleAlert();
return new ApiKeysIndexPage(driver);
}
public ApiKeysIndexPage clickSubmitButton(String oldNote){
int oldCnt = getNumRows();
int timer = 0;
if(oldNote == null){
driver.findElementById("submitKeyModalCreate").click();
while(getNumRows()!=(oldCnt+1)){
if(timer >= 10){
break;
}
timer++;
sleep(100);
}
}else{
driver.findElementsById("submitKeyModal").get(getIndex(oldNote)).click();
sleep(1000);
}
return new ApiKeysIndexPage(driver);
}
public ApiKeysIndexPage setNote(String newNote,String oldNote){
if(oldNote==null){
driver.findElementsById("note").get(getNumRows()).clear();
driver.findElementsById("note").get(getNumRows()).sendKeys(newNote);
}else{
driver.findElementsById("note").get(getIndex(oldNote)).clear();
driver.findElementsById("note").get(getIndex(oldNote)).sendKeys(newNote);
}
return this;
}
public ApiKeysIndexPage setRestricted(String oldNote){
if(oldNote==null){
driver.findElementById("isRestrictedKey"+(getNumRows()+1)).click();
}else{
driver.findElementById("isRestrictedKey"+(getIndex(oldNote)+1)).click();
}
return new ApiKeysIndexPage(driver);
}
public ApiKeysIndexPage waitModalDisappear(){
waitForInvisibleElement(driver.findElementById("newKeyModalDiv"));
return new ApiKeysIndexPage(driver);
}
public boolean isCreateValidationPresent(){
return driver.findElementByClassName("alert-success").getText().contains("API key was successfully created.");
}
public boolean isEditValidationPresent(){
return driver.findElementByClassName("alert-success").getText().contains("API key was successfully edited.");
}
public boolean isDeleteValidationPresent(){
return driver.findElementByClassName("alert-success").getText().contains("API key was successfully deleted.");
}
public boolean isNotePresent(String note){
return getIndex(note) != -1;
}
public boolean isRestricted(String note){
return driver.findElementById("restricted"+(getIndex(note)+1)).getText().trim().contains("true");
}
public boolean isCorrectLength(String note){
return notes.get(getIndex(note)).getText().trim().length()<=255;
}
}