package org.mifos.test.acceptance.framework.loan;
import com.thoughtworks.selenium.Selenium;
import org.mifos.test.acceptance.framework.AbstractPage;
import org.testng.Assert;
public class ViewOriginalSchedulePage extends AbstractPage {
String originalScheduleTable = "//table[@id='originalInstallments']/tbody";
public ViewOriginalSchedulePage(Selenium selenium) {
super(selenium);
}
public void verifyPage() {
this.verifyPage("ViewOriginalSchedule");
}
public double[][] getInstallments(double delta) {
int installmentCount = getInstallmentCount();
double[][] installments = new double[installmentCount][4];
for (int i = 0; i < installmentCount; ++i) {
installments[i][0] = Double.valueOf(getCellValue(i + 2, 3).replace(",", ""));
installments[i][1] = Double.valueOf(getCellValue(i + 2, 4).replace(",", ""));
installments[i][2] = Double.valueOf(getCellValue(i + 2, 5).replace(",", ""));
installments[i][3] = Double.valueOf(getCellValue(i + 2, 6).replace(",", ""));
Assert.assertEquals(installments[i][0] + installments[i][1] + installments[i][2], installments[i][3], delta);
}
return installments;
}
public ViewOriginalSchedulePage verifyScheduleTable(String[][] tableOnOriginalInstallment) {
verifyPage();
for (int rowIndex = 0; rowIndex < tableOnOriginalInstallment.length; rowIndex++) {
String[] rowValues = tableOnOriginalInstallment[rowIndex];
int row = rowIndex + 1;
for (int columnIndex = 0; columnIndex < rowValues.length; columnIndex++) {
String cellValue = rowValues[columnIndex];
int column = columnIndex + 1;
if (!"".equals(cellValue)) {
String actualCellValue = getCellValue(row, column);
Assert.assertEquals(actualCellValue, cellValue, "In Schedule Table for row " + row + " and column " + column + " expected value is " + cellValue + " but the actual value is " + actualCellValue);
}
}
}
return this;
}
public ViewRepaymentSchedulePage returnToRepaymentSchedule() {
selenium.click("returnToRepaymentScheduleButton");
waitForPageToLoad();
verifyPage("LoanRepayment");
return new ViewRepaymentSchedulePage(selenium);
}
public LoanAccountPage returnToLoanAccountDetail() {
selenium.click("returnToRepaymentScheduleButton");
waitForPageToLoad();
selenium.click("returnToAccountDetailsbutton");
waitForPageToLoad();
verifyPage("LoanAccountDetail");
return new LoanAccountPage(selenium);
}
private int getInstallmentCount() {
return selenium.getXpathCount(originalScheduleTable + "//tr").intValue() - 1;
}
private String getCellValue(int row, int col) {
return selenium.getText(originalScheduleTable + "//tr[" + row + "]/td[" + col + "]");
}
}