/*
* 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.dataTable;
import static org.junit.Assert.assertEquals;
import java.util.List;
import org.jboss.arquillian.graphene.Graphene;
import org.jboss.arquillian.graphene.page.Page;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.richfaces.showcase.dataTable.page.TableSortingPage;
import org.richfaces.showcase.repeat.AbstractDataIterationWithStates;
/**
* @author <a href="mailto:jhuska@redhat.com">Juraj Huska</a>
* @author <a href="mailto:jpapouse@redhat.com">Jan Papousek</a>
*/
public class ITestTableSorting extends AbstractDataIterationWithStates {
@Page
private TableSortingPage page;
private final StateWithCapitalAndTimeZone FIRST_STATE_SORTED_BY_CAPITAL_ASCENDING_ORDER = new StateWithCapitalAndTimeZone(
"New York", "Albany", "GMT-5");
private final StateWithCapitalAndTimeZone FIRST_STATE_SORTED_BY_CAPITAL_DESCENDING_ORDER = new StateWithCapitalAndTimeZone(
"New Jersey", "Trenton", "GMT-5");
private final StateWithCapitalAndTimeZone FIRST_STATE_SORTED_BY_STATE_ASCENDING_ORDER = new StateWithCapitalAndTimeZone(
"Alabama", "Montgomery", "GMT-6");
private final StateWithCapitalAndTimeZone FIRST_STATE_SORTED_BY_STATE_DESCENDING_ORDER = new StateWithCapitalAndTimeZone(
"Wyoming", "Cheyenne", "GMT-7");
private final StateWithCapitalAndTimeZone FIRST_STATE_SORTED_BY_TIME_ZONE_ASCENDING_ORDER = new StateWithCapitalAndTimeZone(
"Hawaii", "Honolulu", "GMT-10");
private final StateWithCapitalAndTimeZone FIRST_STATE_SORTED_BY_TIME_ZONE_DESCENDING_ORDER = new StateWithCapitalAndTimeZone(
"Connecticut", "Hartford", "GMT-5");
@Test
public void testSortByCapitalName() {
clickOnParticularSortAnchorCheckFirstRow(page.getSortByCapitalName(), FIRST_STATE_SORTED_BY_CAPITAL_ASCENDING_ORDER,
FIRST_STATE_SORTED_BY_CAPITAL_DESCENDING_ORDER, "The table should be ordered by capital name in ascending order",
"The table should be ordered by capital name in descending order");
}
@Test
public void testSortByStateName() {
clickOnParticularSortAnchorCheckFirstRow(page.getSortByStateName(), FIRST_STATE_SORTED_BY_STATE_ASCENDING_ORDER,
FIRST_STATE_SORTED_BY_STATE_DESCENDING_ORDER, "The table shoould be ordered by state name in ascending order",
"The table should be ordered by state name in descending order");
}
@Test
public void testSortByTimeZone() {
clickOnParticularSortAnchorCheckFirstRow(page.getSortByTimeZone(), FIRST_STATE_SORTED_BY_TIME_ZONE_ASCENDING_ORDER,
FIRST_STATE_SORTED_BY_TIME_ZONE_DESCENDING_ORDER, "The table sould be ordered by time zone in ascending order",
"The table should be ordered by time zone in descending order");
}
/**
* Sorts table and checks the first row according to expected first row
*
* @param sortBy
* @param ascendingState expected state
* @param descendingState expected state
* @param ascendingError
* @param descendingError
*/
private void clickOnParticularSortAnchorCheckFirstRow(WebElement sortBy, StateWithCapitalAndTimeZone ascendingState,
StateWithCapitalAndTimeZone descendingState, String ascendingError, String descendingError) {
Graphene.guardAjax(sortBy).click();
StateWithCapitalAndTimeZone actualState = initializeStateDataFromRow();
assertEquals(ascendingError, ascendingState, actualState);
Graphene.guardAjax(sortBy).click();
actualState = initializeStateDataFromRow();
assertEquals(descendingError, descendingState, actualState);
}
/**
* returns new StateWithCapitalAndTimeZone, which is initialized byt the data in the partilucal row
*
* @param row
* @return
*/
private StateWithCapitalAndTimeZone initializeStateDataFromRow() {
List<WebElement> tds = page.getFirstRow().findElements(By.tagName("td"));
String capitalName = null;
String stateName = null;
String timeZone = null;
int i = 0;
for (WebElement currentTd : tds) {
switch (i) {
case 1:
capitalName = currentTd.getText();
break;
case 2:
stateName = currentTd.getText();
break;
case 3:
timeZone = currentTd.getText();
break;
default:
break;
}
i++;
}
return new StateWithCapitalAndTimeZone(stateName, capitalName, timeZone);
}
}