/*
* This program is part of the OpenLMIS logistics management information system platform software.
* Copyright © 2013 VillageReach
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
* You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses. For additional information contact info@OpenLMIS.org.
*/
package org.openlmis.pageobjects.edi;
import org.openlmis.UiUtils.TestWebDriver;
import org.openlmis.pageobjects.Page;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.pagefactory.AjaxElementLocatorFactory;
import static com.thoughtworks.selenium.SeleneseTestBase.*;
import static org.openqa.selenium.support.How.ID;
import static org.openqa.selenium.support.How.XPATH;
public class ConfigureBudgetPage extends Page {
@FindBy(how = ID, using = "includeHeadersCheckbox")
private static WebElement includeHeaders = null;
@FindBy(how = ID, using = "facilityCodeIncludeCheckbox")
private static WebElement facilityCodeCheckBox = null;
@FindBy(how = ID, using = "programCodeIncludeCheckbox")
private static WebElement programCodeCheckBox = null;
@FindBy(how = ID, using = "periodStartDateIncludeCheckbox")
private static WebElement periodStartDateCheckBox = null;
@FindBy(how = ID, using = "allocatedBudgetIncludeCheckbox")
private static WebElement allocatedBudgetCheckBox = null;
@FindBy(how = ID, using = "notesIncludeCheckbox")
private static WebElement notesCheckBox = null;
@FindBy(how = ID, using = "facilityCodePosition")
private static WebElement facilityCodePosition = null;
@FindBy(how = ID, using = "programCodePosition")
private static WebElement programCodePosition = null;
@FindBy(how = ID, using = "periodStartDatePosition")
private static WebElement periodStartDatePosition = null;
@FindBy(how = ID, using = "allocatedBudgetPosition")
private static WebElement allocatedBudgetPosition = null;
@FindBy(how = ID, using = "notesPosition")
private static WebElement notesTextPosition = null;
@FindBy(how = ID, using = "saveErrorMsgDiv")
private static WebElement saveErrorMessageDiv = null;
@FindBy(how = ID, using = "saveSuccessMsgDiv")
private static WebElement successMessageDiv = null;
@FindBy(how = ID, using = "saveBudgetConfig")
private static WebElement saveButton = null;
@FindBy(how = ID, using = "cancelBudgetConfig")
private static WebElement cancelButton = null;
@FindBy(how = XPATH, using = "//div[@id='select2-drop']/div/input")
private static WebElement periodStartDateSelectBoxTextField = null;
@FindBy(how = XPATH, using = "//div[@id='select2-drop']/ul/li[1]/div")
private static WebElement periodStartDateSelectBoxSelectableElement = null;
@FindBy(how = XPATH, using = "//div[@id='s2id_autogen5']/a")
private static WebElement periodStartDateSelectBoxClickAbleLink = null;
@FindBy(how = XPATH, using = "//div[@id='s2id_autogen5']/a/span")
private static WebElement periodStartDateSelectBoxDefaultSelected = null;
public ConfigureBudgetPage(TestWebDriver driver) {
super(driver);
PageFactory.initElements(new AjaxElementLocatorFactory(TestWebDriver.getDriver(), 10), this);
testWebDriver.setImplicitWait(10);
testWebDriver.waitForElementToAppear(includeHeaders);
}
public String getPeriodStartDateFormat() {
testWebDriver.waitForElementToAppear(periodStartDateSelectBoxDefaultSelected);
return periodStartDateSelectBoxDefaultSelected.getText();
}
public void selectValueFromPeriodStartDateDropDown(String value) {
testWebDriver.waitForElementToAppear(periodStartDateSelectBoxClickAbleLink);
periodStartDateSelectBoxClickAbleLink.click();
testWebDriver.waitForElementToAppear(periodStartDateSelectBoxTextField);
sendKeys(periodStartDateSelectBoxTextField, value);
testWebDriver.waitForElementToAppear(periodStartDateSelectBoxSelectableElement);
periodStartDateSelectBoxSelectableElement.click();
}
public boolean isHeaderIncluded() {
testWebDriver.waitForElementToAppear(includeHeaders);
return includeHeaders.isSelected();
}
public void checkIncludeHeader() {
testWebDriver.waitForElementToAppear(includeHeaders);
if (!includeHeaders.isSelected())
includeHeaders.click();
}
public void checkNotesCheckBox() {
testWebDriver.waitForElementToAppear(notesCheckBox);
if (!notesCheckBox.isSelected())
notesCheckBox.click();
}
public String getAllocatedBudgetPosition() {
testWebDriver.waitForElementToAppear(allocatedBudgetPosition);
return testWebDriver.getAttribute(allocatedBudgetPosition, "value");
}
public void setAllocatedBudgetPosition(String value) {
testWebDriver.waitForElementToAppear(allocatedBudgetPosition);
sendKeys(allocatedBudgetPosition, value);
}
public void setFacilityCodePosition(String value) {
testWebDriver.waitForElementToAppear(facilityCodePosition);
sendKeys(facilityCodePosition, value);
}
public String getFacilityCodePosition() {
testWebDriver.waitForElementToAppear(facilityCodePosition);
return testWebDriver.getAttribute(facilityCodePosition, "value");
}
public String getNotesPosition() {
testWebDriver.waitForElementToAppear(notesTextPosition);
return testWebDriver.getAttribute(notesTextPosition, "value");
}
public void setNotesPosition(String value) {
testWebDriver.waitForElementToAppear(notesTextPosition);
sendKeys(notesTextPosition, value);
}
public String getProgramCodePosition() {
testWebDriver.waitForElementToAppear(programCodePosition);
return testWebDriver.getAttribute(programCodePosition, "value");
}
public void setProgramCodePosition(String value) {
testWebDriver.waitForElementToAppear(programCodePosition);
sendKeys(programCodePosition, value);
}
public String getPeriodStartDatePosition() {
testWebDriver.waitForElementToAppear(periodStartDatePosition);
return testWebDriver.getAttribute(periodStartDatePosition, "value");
}
public void setPeriodStartDatePosition(String value) {
testWebDriver.waitForElementToAppear(periodStartDatePosition);
sendKeys(periodStartDatePosition, value);
}
public void clickSaveButton() {
testWebDriver.waitForElementToAppear(saveButton);
saveButton.click();
}
public void clickCancelButton() {
testWebDriver.waitForElementToAppear(cancelButton);
cancelButton.click();
testWebDriver.sleep(2000);
}
public void verifyMessage(String message) {
testWebDriver.waitForElementToAppear(successMessageDiv);
assertEquals(message, successMessageDiv.getText());
}
public void verifyErrorMessage(String message) {
testWebDriver.waitForElementToAppear(saveErrorMessageDiv);
assertEquals(message, saveErrorMessageDiv.getText());
}
public void verifyDefaultIncludeCheckboxForAllDataFields() {
testWebDriver.waitForElementToAppear(facilityCodeCheckBox);
assertTrue("facilityCodeCheckBox should be checked", facilityCodeCheckBox.isSelected());
assertTrue("allocatedBudgetCheckBox should be checked", allocatedBudgetCheckBox.isSelected());
assertTrue("programCodeCheckBox should be checked", programCodeCheckBox.isSelected());
assertTrue("periodStartDateCheckBox should be checked", periodStartDateCheckBox.isSelected());
assertFalse("notesCheckBox should be checked", notesCheckBox.isSelected());
assertFalse("facilityCodeCheckBox should be disabled", facilityCodeCheckBox.isEnabled());
assertFalse("allocatedBudgetCheckBox should be disabled", allocatedBudgetCheckBox.isEnabled());
assertFalse("programCodeCheckBox should be disabled", programCodeCheckBox.isEnabled());
assertTrue("notesCheckBox should be enabled", notesCheckBox.isEnabled());
assertFalse("periodStartDateCheckBox should be enabled", periodStartDateCheckBox.isEnabled());
}
public void verifyDefaultPositionValues() {
assertEquals("1", facilityCodePosition.getAttribute("value"));
assertEquals("4", allocatedBudgetPosition.getAttribute("value"));
assertEquals("2", programCodePosition.getAttribute("value"));
assertEquals("3", periodStartDatePosition.getAttribute("value"));
assertEquals("5", notesTextPosition.getAttribute("value"));
}
public boolean isNotesChecked() {
testWebDriver.waitForElementToAppear(notesCheckBox);
return notesCheckBox.isSelected();
}
}