org.openlmis.pageobjects.EPIUsePage.java Source code

Java tutorial

Introduction

Here is the source code for org.openlmis.pageobjects.EPIUsePage.java

Source

/*
 * 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;

import org.openlmis.UiUtils.TestWebDriver;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

import java.util.List;
import java.util.Map;

import static com.thoughtworks.selenium.SeleneseTestBase.*;
import static java.lang.String.valueOf;
import static org.openqa.selenium.support.How.ID;

public class EPIUsePage extends DistributionTab {

    @FindBy(how = ID, using = "epiUsePageHeader")
    private static WebElement epiUsePageHeader = null;

    @FindBy(how = ID, using = "epiUseTabLabel")
    private static WebElement epiUseTab = null;

    @FindBy(how = ID, using = "epiUseTabIcon")
    public static WebElement overallEPIUseIcon = null;

    @FindBy(how = ID, using = "epiUseApplyNrAll")
    private static WebElement applyNRToAllFieldsCheckbox = null;

    @FindBy(how = ID, using = "button_OK")
    private static WebElement okButton = null;

    @FindBy(how = ID, using = "button_Cancel")
    private static WebElement cancelButton = null;

    @FindBy(how = ID, using = "stockAtFirstOfMonth0")
    private static WebElement NRForStockFirstOfMonth0 = null;

    @FindBy(how = ID, using = "expirationDate0")
    private static WebElement NRForExpirationDate0 = null;

    @FindBy(how = ID, using = "stockAtEndOfMonth0")
    private static WebElement NRForStockEndOfMonth0 = null;

    @FindBy(how = ID, using = "received0")
    private static WebElement NRForReceived0 = null;

    @FindBy(how = ID, using = "distributed0")
    private static WebElement NRForDistributed0 = null;

    @FindBy(how = ID, using = "loss0")
    private static WebElement NRForLoss0 = null;

    @FindBy(how = ID, using = "stockAtFirstOfMonthInput0")
    private static WebElement textBoxStockAtFirstOfMonth0 = null;

    @FindBy(how = ID, using = "receivedInput0")
    private static WebElement textBoxReceived0 = null;

    @FindBy(how = ID, using = "distributedInput0")
    private static WebElement textBoxDistributed0 = null;

    @FindBy(how = ID, using = "lossInput0")
    private static WebElement textBoxLoss0 = null;

    @FindBy(how = ID, using = "stockAtEndOfMonthInput0")
    private static WebElement textBoxStockAtEndOfMonth0 = null;

    @FindBy(how = ID, using = "expirationDateInput0")
    private static WebElement textBoxExpirationDate0 = null;

    @FindBy(how = ID, using = "noLineItems")
    private static WebElement noLineItems = null;

    public EPIUsePage(TestWebDriver driver) {
        super(driver);
    }

    @Override
    public void verifyIndicator(String color) {
        verifyOverallIndicator(overallEPIUseIcon, color);
    }

    @Override
    public void enterValues(List<Map<String, String>> data) {
        Map<String, String> map = data.get(0);
        enterValueInDistributed(map.get("distributed"), 1);
        enterValueInExpirationDate(map.get("expirationDate"), 1);
        enterValueInLoss(map.get("loss"), 1);
        enterValueInReceived(map.get("received"), 1);
        enterValueInStockAtFirstOfMonth(map.get("firstOfMonth"), 1);
        enterValueInStockAtEndOfMonth(map.get("endOfMonth"), 1);
    }

    @Override
    public void navigate() {
        testWebDriver.waitForElementToAppear(epiUseTab);
        epiUseTab.click();
        removeFocusFromElement();
    }

    public void enterData(Integer stockAtFirstOfMonth, Integer receivedValue, Integer distributedValue,
            Integer loss, Integer stockAtEndOfMonth, String expirationDate, int rowNumber) {
        enterValueInStockAtFirstOfMonth(stockAtFirstOfMonth.toString(), rowNumber);
        enterValueInReceived(receivedValue.toString(), rowNumber);
        enterValueInDistributed(distributedValue.toString(), rowNumber);
        enterValueInLoss(valueOf(loss), rowNumber);
        enterValueInStockAtEndOfMonth(stockAtEndOfMonth.toString(), rowNumber);
        enterValueInExpirationDate(expirationDate, rowNumber);
    }

    @Override
    public void verifyAllFieldsDisabled() {
        assertFalse("stockAtFirstOfMonth field enabled.", textBoxStockAtFirstOfMonth0.isEnabled());
        assertFalse("received field enabled.", textBoxReceived0.isEnabled());
        assertFalse("distributed field enabled.", textBoxDistributed0.isEnabled());
        assertFalse("loss field enabled.", textBoxLoss0.isEnabled());
        assertFalse("stockAtEndOfMonth Field enabled.", textBoxStockAtEndOfMonth0.isEnabled());
        assertFalse("expirationDate Field enabled.", textBoxExpirationDate0.isEnabled());

        assertFalse("stockAtFirstOfMonth field NR enabled.", NRForStockFirstOfMonth0.isEnabled());
        assertFalse("received field NR enabled.", NRForReceived0.isEnabled());
        assertFalse("distributed field NR enabled.", NRForDistributed0.isEnabled());
        assertFalse("loss field NR enabled.", NRForLoss0.isEnabled());
        assertFalse("stockAtEndOfMonth Field NR enabled.", NRForStockEndOfMonth0.isEnabled());
        assertFalse("expirationDate Field NR enabled.", NRForExpirationDate0.isEnabled());

        assertFalse("applyNRToAllFieldsCheckbox NR enabled.", applyNRToAllFieldsCheckbox.isEnabled());
    }

    public void enterValueInStockAtFirstOfMonth(String value, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtFirstOfMonth = testWebDriver.getElementByName("stockAtFirstOfMonth" + rowNumber);
        sendKeys(stockAtFirstOfMonth, value);
        stockAtFirstOfMonth.sendKeys(Keys.TAB);
    }

    public void enterValueInReceived(String value, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement received = testWebDriver.getElementByName("received" + rowNumber);
        sendKeys(received, value);
        received.sendKeys(Keys.TAB);
    }

    public void enterValueInDistributed(String value, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement distributed = testWebDriver.getElementByName("distributed" + rowNumber);
        sendKeys(distributed, value);
        distributed.sendKeys(Keys.TAB);
    }

    public void enterValueInLoss(String value, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement loss = testWebDriver.getElementByName("loss" + rowNumber);
        sendKeys(loss, value);
        loss.sendKeys(Keys.TAB);
    }

    public void enterValueInStockAtEndOfMonth(String value, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtEndOfMonth = testWebDriver.getElementByName("stockAtEndOfMonth" + rowNumber);
        sendKeys(stockAtEndOfMonth, value);
        stockAtEndOfMonth.sendKeys(Keys.TAB);
    }

    public void enterValueInExpirationDate(String value, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement expirationDate = testWebDriver.getElementByName("expirationDate" + rowNumber);
        sendKeys(expirationDate, value);
        expirationDate.sendKeys(Keys.TAB);
    }

    public void checkUnCheckStockAtFirstOfMonthNotRecorded(int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtFirstOfMonthNotRecordedCheckBox = testWebDriver
                .getElementById("stockAtFirstOfMonth" + rowNumber);
        stockAtFirstOfMonthNotRecordedCheckBox.click();
        removeFocusFromElement();
    }

    public void checkUnCheckReceivedNotRecorded(int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement receivedNotRecordedCheckBox = testWebDriver.getElementById("received" + rowNumber);
        receivedNotRecordedCheckBox.click();
        removeFocusFromElement();
    }

    public void checkUnCheckDistributedNotRecorded(int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement distributedNotRecordedCheckBox = testWebDriver.getElementById("distributed" + rowNumber);
        distributedNotRecordedCheckBox.click();
        removeFocusFromElement();
    }

    public void checkUnCheckLossNotRecorded(int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement lossNotRecordedCheckBox = testWebDriver.getElementById("loss" + rowNumber);
        lossNotRecordedCheckBox.click();
        removeFocusFromElement();
    }

    public void checkApplyNRToAllFields(boolean confirm) {
        applyNRToAllFieldsCheckbox.click();
        if (confirm)
            okButton.click();
        else
            cancelButton.click();
    }

    public void checkApplyNRToStockAtFirstOfMonth0() {
        NRForStockFirstOfMonth0.click();
        removeFocusFromElement();
    }

    public void checkApplyNRToDistributed0() {
        NRForDistributed0.click();
        removeFocusFromElement();
    }

    public void checkApplyNRToLoss0() {
        NRForLoss0.click();
        removeFocusFromElement();
    }

    public void checkApplyNRToReceived0() {
        NRForReceived0.click();
        removeFocusFromElement();
    }

    public void checkUnCheckStockAtEndOfMonthNotRecorded(int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtEndOfMonthNotRecordedCheckBox = testWebDriver
                .getElementById("stockAtEndOfMonth" + rowNumber);
        stockAtEndOfMonthNotRecordedCheckBox.click();
        removeFocusFromElement();
    }

    public void checkUnCheckExpirationDateNotRecorded(int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement expirationDateNotRecordedCheckBox = testWebDriver.getElementById("expirationDate" + rowNumber);
        expirationDateNotRecordedCheckBox.click();
        removeFocusFromElement();
    }

    public void verifyProductGroup(String productGroup, int rowNumber) {
        WebElement productGroupLbl = testWebDriver
                .getElementByXpath(".//*[@id='epiUseTable']/form/table/tbody/tr[" + rowNumber + "]/td[1]/span");
        testWebDriver.waitForElementToAppear(productGroupLbl);
        assertEquals(productGroup, productGroupLbl.getText());
    }

    public void verifyStockAtFirstOfMonth(String stockAtFirstOfMonth, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtFirstOfMonthTxt = testWebDriver.getElementByName("stockAtFirstOfMonth" + rowNumber);
        assertEquals(stockAtFirstOfMonth, stockAtFirstOfMonthTxt.getAttribute("value"));
    }

    public void verifyReceived(String received, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement receivedTxt = testWebDriver.getElementByName("received" + rowNumber);
        assertEquals(received, receivedTxt.getAttribute("value"));
    }

    public void verifyDistributed(String distributed, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement distributedTxt = testWebDriver.getElementByName("distributed" + rowNumber);
        assertEquals(distributed, distributedTxt.getAttribute("value"));
    }

    public void verifyLoss(String loss, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement lossTxt = testWebDriver.getElementByName("loss" + rowNumber);
        assertEquals(loss, lossTxt.getAttribute("value"));
    }

    public void verifyStockAtEndOfMonth(String stockAtEndOfMonth, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtEndOfMonthTxt = testWebDriver.getElementByName("stockAtEndOfMonth" + rowNumber);
        assertEquals(stockAtEndOfMonth, stockAtEndOfMonthTxt.getAttribute("value"));
    }

    public void verifyExpirationDate(String expirationDate, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement expirationDateTxt = testWebDriver.getElementByName("expirationDate" + rowNumber);
        assertEquals(expirationDate, expirationDateTxt.getAttribute("value"));
    }

    public void verifyStockAtFirstOfMonthStatus(boolean status, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtFirstOfMonthTxt = testWebDriver.getElementByName("stockAtFirstOfMonth" + rowNumber);
        if (status)
            assertTrue("Stock At First Of Month Disabled.", stockAtFirstOfMonthTxt.isEnabled());
        else
            assertFalse("Stock At First Of Month Enabled.", stockAtFirstOfMonthTxt.isEnabled());
    }

    public void verifyReceivedStatus(boolean status, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement receivedTxt = testWebDriver.getElementByName("received" + rowNumber);
        if (status)
            assertTrue("Received Disabled.", receivedTxt.isEnabled());
        else
            assertFalse("Received Enabled.", receivedTxt.isEnabled());
    }

    public void verifyDistributedStatus(boolean status, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement distributedTxt = testWebDriver.getElementByName("distributed" + rowNumber);
        if (status)
            assertTrue("Distributed Disabled.", distributedTxt.isEnabled());
        else
            assertFalse("Distributed Enabled.", distributedTxt.isEnabled());
    }

    public void verifyLossStatus(boolean status, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement lossTxt = testWebDriver.getElementByName("loss" + rowNumber);
        if (status)
            assertTrue("Loss Disabled.", lossTxt.isEnabled());
        else
            assertFalse("Loss Enabled.", lossTxt.isEnabled());
    }

    public void verifyStockAtEndOfMonthStatus(boolean status, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement stockAtEndOfMonthTxt = testWebDriver.getElementByName("stockAtEndOfMonth" + rowNumber);
        if (status)
            assertTrue("Stock At End Of Month Disabled.", stockAtEndOfMonthTxt.isEnabled());
        else
            assertFalse("Stock At End Of Month Enabled.", stockAtEndOfMonthTxt.isEnabled());
    }

    public void verifyExpirationDateStatus(boolean status, int rowNumber) {
        rowNumber = rowNumber - 1;
        WebElement expirationDateTxt = testWebDriver.getElementByName("expirationDate" + rowNumber);
        if (status)
            assertTrue("Expiration Date Disabled.", expirationDateTxt.isEnabled());
        else
            assertFalse("Expiration Date Enabled.", expirationDateTxt.isEnabled());
    }

    public void verifyTotal(String total, int rowNumber) {
        WebElement totalLbl = testWebDriver
                .getElementByXpath(".//*[@id='epiUseTable']/form/table/tbody/tr[" + rowNumber + "]/td[4]/span");
        assertEquals(total, totalLbl.getText());
    }

    public String getNoProductsAddedMessage() {
        if (noLineItems.getSize().getHeight() == 0 && noLineItems.getSize().getWidth() == 0) {
            return null;
        }
        return noLineItems.getText();
    }

    public String getProductGroup(int rowNumber) {
        WebElement productGroupLbl = testWebDriver
                .getElementByXpath(".//*[@id='epiUseTable']/form/table/tbody/tr[" + rowNumber + "]/td[1]/span");
        testWebDriver.waitForElementToAppear(productGroupLbl);
        return productGroupLbl.getText();
    }

    @Override
    public void verifyData(List<Map<String, String>> data) {
        for (Map<String, String> epiData : data) {
            verifyDistributed(epiData.get("distributed"), 1);
            verifyLoss(epiData.get("loss"), 1);
            verifyExpirationDate(epiData.get("expirationDate"), 1);
            verifyReceived(epiData.get("received"), 1);
            verifyStockAtEndOfMonth(epiData.get("endOfMonth"), 1);
            verifyStockAtFirstOfMonth(epiData.get("firstOfMonth"), 1);
            verifyTotal(epiData.get("total"), 1);
        }
    }

    @Override
    public void removeFocusFromElement() {
        testWebDriver.waitForElementToAppear(epiUsePageHeader);
        epiUsePageHeader.click();
    }
}