/*
* JBoss, Home of Professional Open Source
* Copyright 2010-2014, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.showcase.dataScroller;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import org.jboss.arquillian.graphene.Graphene;
import org.jboss.arquillian.graphene.findby.ByJQuery;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.Test;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import org.richfaces.showcase.dataScroller.page.SimpleScrollingPage;
import org.richfaces.showcase.dataTable.AbstractDataIterationWithCars;
/**
* @author <a href="mailto:jhuska@redhat.com">Juraj Huska</a>
*/
public class ITestSimpleScrolling extends AbstractDataIterationWithCars {
@Page
private SimpleScrollingPage page;
@Test
public void testFirstPageButton() {
// starting from the first page
// click on the last page
Graphene.guardAjax(page.getLastPageButton()).click();
Car carBeforeClick = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
// click on the first page
Graphene.guardAjax(page.getFirstPageButton()).click();
Car carAfterClick = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
// check
assertFalse("The data from table should be different, " + "when clicking on the on the the first page button",
carBeforeClick.equals(carAfterClick));
assertTrue("The first page button should be disabled", isElementPresent(page.getFirstPageButtonDis()));
assertTrue("The fast previous page button should be disabled", isElementPresent(page.getFastPrevButtonDis()));
assertTrue("The previous button should be disabled", isElementPresent(page.getPreviousButtonDis()));
}
@Test
public void testLastPageButton() {
// starting from the last page
Graphene.guardAjax(page.getLastPageButton()).click();
// click on the first page
Graphene.guardAjax(page.getFirstPageButton()).click();
Car carBeforeClick = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
// click on the last page
Graphene.guardAjax(page.getLastPageButton()).click();
Car carAfterClick = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
// check
assertFalse("The data from table should be different, " + "when clicking on the on the the last page button",
carBeforeClick.equals(carAfterClick));
assertTrue("The last page button should be disabled", isElementPresent(page.getLastPageButtonDis()));
assertTrue("The fast next page button should be disabled", isElementPresent(page.getFastNextButtonDis()));
assertTrue("The next button should be disabled", isElementPresent(page.getNextButtonDis()));
}
@Test
public void testPreviousAndNextPageButton() {
testFastAndNormalButtons(page.getNextButton(), page.getPreviousButton(), false, 1);
}
// in this demo the fasts button have the same functionality as the next/previous buttons
@Test
public void testPreviousAndNextPageButtonFast() {
testFastAndNormalButtons(page.getFastNextButton(), page.getFastPrevButton(), true, 3);
}
@Test
public void testNumberOfPagesButtons() {
try {
page.getFirstPageButtonDis().isDisplayed();
} catch (NoSuchElementException ignored) {
Graphene.guardAjax(page.getFirstPageButton()).click();
}
checkNumberOfPagesButtons(3);
checkNumberOfPagesButtons(5);
checkNumberOfPagesButtons(6);
checkNumberOfPagesButtons(4);
}
/**
* Checking the buttons which have number of pages
*/
private void checkNumberOfPagesButtons(int numberOfPage) {
WebElement checkingButton = webDriver.findElement(ByJQuery.selector("a[class*='"
+ page.CLASS_OF_INACTIVE_BUTTON_WITH_NUMBER + "']:contains('" + numberOfPage + "'):first"));
Car carBeforeClicking = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
Graphene.guardAjax(checkingButton).click();
Car carAfterClicking = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
assertFalse("The data should be different on the different pages!", carBeforeClicking.equals(carAfterClicking));
int actualCurrentNumberOfPage = page.getNumberOfCurrentPage();
assertEquals("We should be on the " + numberOfPage + ". page", numberOfPage, actualCurrentNumberOfPage);
}
/**
* Tests fast and normal buttons
*
* @param nextButton
* @param previousButton
* @param fast indicated whether it is fast step button or not
* @param step indicated how many pages are switched at a time
*/
private void testFastAndNormalButtons(WebElement nextButton, WebElement previousButton, boolean fast, int step) {
// starting on the first page
int numberOfPageAtBeginning = page.getNumberOfCurrentPage();
Car carBeforeClick = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
// click on the next button
Graphene.guardAjax(nextButton).click();
Car carAfterClick = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
// check
// -- car
assertNotEquals("The data from table should be different, " + "when clicking on the on the " + (fast ? "fast " : "")
+ "next button", carBeforeClick, carAfterClick);
// -- page
int numberOfPageAfterClickOnNext = page.getNumberOfCurrentPage();
assertEquals("Previous button or " + (fast ? "fast " : "") + " previous button does not work",
numberOfPageAfterClickOnNext, numberOfPageAtBeginning + step);
// click on the previous button
Graphene.guardAjax(previousButton).click();
// check
// -- car
carAfterClick = retrieveCarFromRow(page.getFirstRowOfTable(), 0, 4);
assertEquals("The data from table should be the same as in the beginning, " + "when clicking on the on "
+ (fast ? "fast " : "") + " the previous", carAfterClick, carBeforeClick);
// -- page
int currentNumberOfPage = page.getNumberOfCurrentPage();
assertEquals("The " + (fast ? "fast " : "") + " previous button does not work", numberOfPageAtBeginning,
currentNumberOfPage);
}
}