/* * Copyright (c) 2005-2011 Grameen Foundation USA * All rights reserved. * * Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. * * See also http://www.apache.org/licenses/LICENSE-2.0.html for an * explanation of the license and how it is applied. */ package org.mifos.test.acceptance.framework.client; import static java.lang.String.format; import java.util.LinkedHashMap; import java.util.Map; import org.mifos.test.acceptance.framework.ClientsAndAccountsHomepage; import org.mifos.test.acceptance.framework.MifosPage; import org.mifos.test.acceptance.framework.customer.CustomerChangeStatusPage; import org.mifos.test.acceptance.framework.loan.AttachSurveyPage; import org.mifos.test.acceptance.framework.loan.ClosedAccountsPage; import org.mifos.test.acceptance.framework.loan.LoanAccountPage; import org.mifos.test.acceptance.framework.loan.PerformanceHistoryAtributes; import org.mifos.test.acceptance.framework.questionnaire.QuestionGroupResponsePage; import org.mifos.test.acceptance.framework.questionnaire.QuestionnairePage; import org.mifos.test.acceptance.framework.questionnaire.ViewQuestionResponseDetailPage; import org.mifos.test.acceptance.util.StringUtil; import org.testng.Assert; import com.thoughtworks.selenium.Selenium; public class ClientViewDetailsPage extends MifosPage { public static final String QUESTION_GROUP_DATE_JS = "window.document.getElementById('label.%s').innerHTML.trim()"; public static final String QUESTION_GROUP_NAME_JS = "window.document.getElementById('questionGroupInstances').getElementsByTagName('a')[%d].innerHTML.trim()"; public static final String QUESTION_GROUP_ID_JS = "window.document.getElementById('questionGroupInstances').getElementsByTagName('a')[%d].id"; public ClientViewDetailsPage(Selenium selenium) { super(selenium); verifyPage("ViewClientDetails"); } public String getGlobalCustNum() { return selenium.getText("viewClientDetails.text.globalcustnum"); } public String getHeading() { return selenium.getText("viewClientDetails.heading"); } public String getStatus() { return selenium.getText("viewClientDetails.text.status"); } public String getDateOfBirth() { return selenium.getText("viewClientDetails.text.dateOfBirth"); } public String getSpouseFatherName() { return selenium.getText("viewClientDetails.text.spouseFatherName"); } public String getPovertyStatus() { return selenium.getText("viewClientDetails.text.povertyStatus"); } public String getHandicapped() { return selenium.getText("viewClientDetails.text.handicapped"); } public String getNotes() { return selenium.getText("viewClientDetails.text.notes"); } public String getLastLoanAmount() { return selenium.getText("viewClientDetails.text.lastloanamount"); } public void verifyHeading(String heading) { Assert.assertEquals(getHeading(), heading); } public String getMeetingSchedule(){ return selenium.getText("viewClientDetails.text.meetingSchedule"); } public String getGroupMembership(){ return selenium.getText("viewClientDetails.text.groupMembership"); } public void verifyMeetingSchedule(String meetingShedule){ Assert.assertEquals(getMeetingSchedule(),meetingShedule); } public void verifyGroupMembership(String groupName){ Assert.assertEquals(getGroupMembership(), groupName); } public void verifyName(String fullName) { Assert.assertTrue(getHeading().contains(fullName)); } public void verifyStatus(String status) { Assert.assertEquals(getStatus(), status); } public void verifyDateOfBirth(String dd, String mm, String yyyy) { String dateOfBirth = getDateOfBirth(); Assert.assertTrue(dateOfBirth.contains(dd)); Assert.assertTrue(dateOfBirth.contains(mm)); Assert.assertTrue(dateOfBirth.contains(yyyy)); } public void verifySpouseFather(String spouseFatherName) { Assert.assertEquals(getSpouseFatherName(), spouseFatherName); } public void verifyPovertyStatus(String povertyStatus) { Assert.assertEquals(getPovertyStatus(), povertyStatus); } public void verifyHandicapped(String handicapped) { Assert.assertEquals(getHandicapped(), handicapped); } public void verifyNotes(String notes) { Assert.assertTrue(getNotes().contains(notes)); } public ClientsAndAccountsHomepage navigateToClientsAndAccountsHomepage() { selenium.click("header.link.clientsAndAccounts"); waitForPageToLoad(); return new ClientsAndAccountsHomepage(selenium); } public CustomerChangeStatusPage navigateToCustomerChangeStatusPage() { selenium.click("viewClientDetails.link.editStatus"); waitForPageToLoad(); return new CustomerChangeStatusPage(selenium); } public ClientEditMFIPage navigateToEditMFIPage() { selenium.click("viewClientDetails.link.editMfiInformation"); waitForPageToLoad(); return new ClientEditMFIPage(selenium); } public ClientNotesPage navigateToNotesPage() { selenium.click("viewClientDetails.link.notesLink"); waitForPageToLoad(); return new ClientNotesPage(selenium); } public void verifyTextOnPage(String text) { Assert.assertTrue(selenium.isTextPresent(text)); } public void verifyLoanDoesntExist(String loanID) { Assert.assertFalse(selenium.isTextPresent(loanID)); } public ClientViewChangeLogPage navigateToClientViewChangeLog() { selenium.click("viewClientDetails.link.viewChangeLog"); waitForPageToLoad(); return new ClientViewChangeLogPage(selenium); } public ClientNotesPage navigateToAllNotesPage() { selenium.click("viewClientDetails.link.seeAllNotes"); waitForPageToLoad(); return new ClientNotesPage(selenium); } public ClosedAccountsPage navigateToClosedAccountsPage() { selenium.click("viewClientDetails.link.viewAllClosedAccounts"); waitForPageToLoad(); return new ClosedAccountsPage(selenium); } public ClientEditFamilyPage editFamilyInformation() { selenium.click("viewClientDetails.link.editFamilyInformation"); waitForPageToLoad(); return new ClientEditFamilyPage(selenium); } public ClientEditPersonalInfoPage editPersonalInformation(){ selenium.click("viewClientDetails.link.editPersonalInformation"); waitForPageToLoad(); return new ClientEditPersonalInfoPage(selenium); } public AttachSurveyPage navigateToAttachSurveyPage() { selenium.click("viewClientDetails.link.attachSurvey"); waitForPageToLoad(); return new AttachSurveyPage(selenium); } public GroupSearchClientTransferPage navigateToEditRemoveGroupMembership(){ selenium.click("viewClientDetails.link.editRemoveGroupMembership"); waitForPageToLoad(); return new GroupSearchClientTransferPage(selenium); } public Map<Integer, QuestionGroup> getQuestionGroupInstances() { int rows = Integer.valueOf(selenium.getEval("window.document.getElementById('questionGroupInstances').getElementsByTagName('a').length")); Map<Integer, QuestionGroup> instances = new LinkedHashMap<Integer, QuestionGroup>(); for (int i = 0; i < rows - 1; i++) { String instanceId = selenium.getEval(format(QUESTION_GROUP_ID_JS, i)); instances.put(new Integer(instanceId), new QuestionGroup(selenium.getEval(format(QUESTION_GROUP_NAME_JS, i)), //NOPMD selenium.getEval(format(QUESTION_GROUP_DATE_JS, instanceId)))); } return instances; } public QuestionGroupResponsePage navigateToQuestionGroupResponsePage(int instanceId) { selenium.click("id=" + instanceId); waitForPageToLoad(); return new QuestionGroupResponsePage(selenium); } public QuestionnairePage getQuestionnairePage(String questionGroupTitle) { AttachSurveyPage attachSurveyPage = navigateToAttachSurveyPage(); QuestionnairePage questionnairePage = attachSurveyPage.selectSurvey(questionGroupTitle); questionnairePage.verifyPage(); return questionnairePage; } public ViewQuestionResponseDetailPage navigateToViewAdditionalInformationPage() { selenium.click("viewClientDetails.link.questionGroups"); waitForPageToLoad(); return new ViewQuestionResponseDetailPage(selenium); } public ViewClientChargesDetail navigateToViewClientChargesDetail(){ selenium.click("viewClientDetails.link.viewDetails"); waitForPageToLoad(); return new ViewClientChargesDetail(selenium); } public EditMeetingPage navigateToEditMeetingSchedule() { selenium.click("viewClientDetails.link.editMeetingScheduleAddGroup"); waitForPageToLoad(); return new EditMeetingPage(selenium); } public LoanAccountPage navigateToOnlyLoanAccount() { selenium.click("viewClientDetails.link.viewLoanAccount"); waitForPageToLoad(); return new LoanAccountPage(selenium); } public void verifyMeetingsAttended(int meetings) { Assert.assertTrue(selenium.isTextPresent("Meetings Attended: "+meetings)); } public void verifyMeetingsMissed(int meetings) { Assert.assertTrue(selenium.isTextPresent("Meetings Missed: "+meetings)); } public void verifyLoanCycle(Integer loanCycle) { Assert.assertEquals(selenium.getText("viewClientDetails.text.loancycle"), loanCycle.toString()); } public void verifyLastLoanAmount(String lastLoanAmount) { Assert.assertEquals(getLastLoanAmount(), lastLoanAmount); } public void verifynoOfActiveLoan(Integer count) { Assert.assertEquals(selenium.getText("viewClientDetails.text.noactiveloans"), count.toString()); } public void verifyDelinquentPortfolio(Double delinquentPortfolioValue) { Assert.assertEquals(selenium.getText("viewClientDetails.text.delinquentportfolio"), StringUtil.formatNumber(delinquentPortfolioValue.toString())); } public void verifyLoanCyclePerProduct(String product, Integer count) { Assert.assertEquals(selenium.getText("viewClientDetails.text."+product),count.toString()); } public void verifyPerformanceHistory(PerformanceHistoryAtributes performanceHistoryAtributes){ verifyLoanCycle(performanceHistoryAtributes.getLoanCycle()); verifyLastLoanAmount(performanceHistoryAtributes.getAmountOfLastLoan()); verifynoOfActiveLoan(performanceHistoryAtributes.getNoOfActiveLoan()); if(performanceHistoryAtributes.getDelinquentPortfolio()!=null){ verifyDelinquentPortfolio(performanceHistoryAtributes.getDelinquentPortfolio()); } Map<String,Integer> loanCyclePerProduct = performanceHistoryAtributes.getLoanCyclePerProduct(); for (String product : loanCyclePerProduct.keySet()) { verifyLoanCyclePerProduct(product, loanCyclePerProduct.get(product)); } } public String getAmountDue(){ return selenium.getText("viewClientDetails.text.amountDue"); } public void verifyAmountDue(String amountDue){ Assert.assertEquals(getAmountDue(), amountDue); } public ViewQuestionResponseDetailPage navigateToViewQuestionResponseDetailPage(String questionGroupName) { selenium.click("link="+questionGroupName); waitForPageToLoad(); return new ViewQuestionResponseDetailPage(selenium); } /** * Gets cancellation reason from webpage. * @return String from Client Details page with cancellation reason */ public String getCancellationReason(){ return selenium.getText("viewClientDetails.text.cancellationReason"); } /** * Assert that actual cancellation reason is equal to expected reason * @param string expected cancellation reason */ public void verifyCancellationReason(String string) { Assert.assertEquals(getCancellationReason(), string); } /** * Asserts that image with given id is visible on page * @param idOfImage id of element containing image */ public void verifyElementExistence(String imageSource){ Assert.assertTrue(selenium.isElementPresent(imageSource)); } /** * Assert that number of blackflag images is equal to expected number. * @param expectedNumber expected number of blackflag images */ public void verifyNumberOfBlackflags(int expectedNumber){ Assert.assertEquals(selenium.getXpathCount("//span[contains(@id,'viewClientDetails.img.blackFlag')]"),expectedNumber); } }