/*
* 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.search;
import org.mifos.test.acceptance.framework.MifosPage;
import org.mifos.test.acceptance.framework.center.CenterViewDetailsPage;
import org.mifos.test.acceptance.framework.client.ClientViewDetailsPage;
import org.mifos.test.acceptance.framework.group.GroupViewDetailsPage;
import org.mifos.test.acceptance.framework.loan.LoanAccountPage;
import org.mifos.test.acceptance.framework.savings.SavingsAccountDetailPage;
import org.testng.Assert;
import com.thoughtworks.selenium.Selenium;
/**
* This was initially created to represent search results reached from the search box on the home page. There may be
* other incompatible search results pages.
*/
public class SearchResultsPage extends MifosPage {
public SearchResultsPage() {
super();
}
public SearchResultsPage(Selenium selenium) {
super(selenium);
verifyPage("MainSearchResults");
}
public SearchResultsPage verifyPage() {
verifyPage("MainSearchResults");
return this;
}
public void verifySearchResults(int searchCount) {
verifySearchResults(searchCount, "");
}
public void verifySearchResults(int searchCount, String searchResultID) {
int count = countSearchResults();
Assert.assertEquals(count, searchCount);
if(!"".equals(searchResultID)) {
Assert.assertTrue(selenium.isTextPresent(searchResultID));
}
}
/**
* A search result link must be explicitly clicked to land on the "view group details" page.
* @param locator Selenium locator indicating search result leading to "view group details" page.
*/
public GroupViewDetailsPage navigateToGroupViewDetailsPage(String locator) {
selenium.click(locator);
waitForPageToLoad();
return new GroupViewDetailsPage(selenium);
}
public CenterViewDetailsPage navigateToCenterViewDetailsPage(String locator) {
selenium.click(locator);
waitForPageToLoad();
return new CenterViewDetailsPage(selenium);
}
public ClientViewDetailsPage navigateToClientViewDetailsPage(String locator) {
selenium.click(locator);
waitForPageToLoad();
return new ClientViewDetailsPage(selenium);
}
public LoanAccountPage navigateToLoanAccountDetailPage(String loanId){
String xpath = "//a[contains(@href,'globalAccountNum=<loanId>')]";
selenium.click(xpath.replace("<loanId>", loanId));
waitForPageToLoad();
return new LoanAccountPage(selenium);
}
public SavingsAccountDetailPage navigateToSavingsAccountDetailPage(String savingsId){
String xpath = "//a[contains(@href,'globalAccountNum=<savingsId>')]";
selenium.click(xpath.replace("<savingsId>", savingsId));
waitForPageToLoad();
return new SavingsAccountDetailPage(selenium);
}
public int countSearchResults() {
// Get search result data table informations,
// which should look like "1 to 10 of 40 results"
String heading = null;
int resultCount;
try {
String jsScript = "selenium.browserbot.getCurrentWindow().jQuery('#mainCustomerSearchResultDataTable_info').length > 0";
selenium.waitForCondition(jsScript, "3000"); // wait for jquery dataTable full load
heading = selenium.getText("//div[@id='mainCustomerSearchResultDataTable_info']" );
String[] numbers = heading.replaceAll("\\D+", " ").split(" ");
resultCount = Integer.parseInt(numbers[numbers.length-1]);
} catch (Exception e) {
// failed to retrieve result
resultCount = -1;
}
return resultCount;
}
}