/*******************************************************************************
* 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.message.page;
import org.jboss.arquillian.graphene.Graphene;
import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
/**
* @author <a href="mailto:jpapouse@redhat.com">Jan Papousek</a>
*/
public class AbstractMessagePage {
protected static final int MINIMUM_OF_NAME = 3;
protected static final int MINIMUM_OF_JOB = 3;
protected static final int MINIMUM_OF_ADDRESS = 10;
protected static final int MINIMUM_OF_ZIP = 4;
protected static final int MAXIMUM_OF_JOB = 50;
protected static final int MAXIMUM_OF_ZIP = 9;
public static final String NAME_ERROR_VALUE_REQUIRED = "Name: Validation Error: Value is required.";
public static final String JOB_ERROR__VALUE_REQUIRED = "Job: Validation Error: Value is required.";
public static final String ADDRESS_ERROR__VALUE_REQUIRED = "Address: Validation Error: Value is required.";
public static final String ZIP_ERROR__VALUE_REQUIRED = "Zip: Validation Error: Value is required.";
public static final String NAME_ERROR_LESS_THAN_MINIMUM = "Name: Validation Error: Length is less than allowable minimum of '"
+ MINIMUM_OF_NAME + "'";
public static final String JOB_ERROR_LESS_THAN_MINIMUM = "Job: Validation Error: Length is less than allowable minimum of '"
+ MINIMUM_OF_JOB + "'";
public static final String ADDRESS_ERROR_LESS_THAN_MINIMUM = "Address: Validation Error: Length is less than allowable minimum of '"
+ MINIMUM_OF_ADDRESS + "'";
public static final String ZIP_ERROR_LESS_THAN_MINIMUM = "Zip: Validation Error: Length is less than allowable minimum of '"
+ MINIMUM_OF_ZIP + "'";
public static final String JOB_ERROR_GREATER_THAN_MAXIMUM = "Job: Validation Error: Length is greater than allowable maximum of '"
+ MAXIMUM_OF_JOB + "'";
public static final String ZIP_ERROR_GREATER_THAN_MAXIMUM = "Zip: Validation Error: Length is greater than allowable maximum of '"
+ MAXIMUM_OF_ZIP + "'";
public static final String JOB_ERROR_NOT_BETWEEN = "Job: Validation Error: Specified attribute is not between the expected values of 3 and 50.";
public static final String ZIP_ERROR_NOT_BETWEEN = "Zip: Validation Error: Specified attribute is not between the expected values of 4 and 9.";
@FindByJQuery("input[id$=name]")
private WebElement nameInput;
@FindByJQuery("input[id$=job]")
private WebElement jobInput;
@FindByJQuery("input[id$=address]")
private WebElement addressInput;
@FindByJQuery("input[id$=zip]")
private WebElement zipInput;
@FindBy(css = "input[type=submit]")
protected WebElement ajaxValidateButton;
public void fillLongerJob() {
fillInputWithStringOfLength(jobInput, MAXIMUM_OF_JOB + 1);
}
public void fillLongerZip() {
fillInputWithStringOfLength(zipInput, MAXIMUM_OF_ZIP + 1);
}
public void fillShorterValues() {
fillInputWithStringOfLength(nameInput, MINIMUM_OF_NAME - 1);
fillInputWithStringOfLength(jobInput, MINIMUM_OF_JOB - 1);
fillInputWithStringOfLength(addressInput, MINIMUM_OF_ADDRESS - 1);
fillInputWithStringOfLength(zipInput, MINIMUM_OF_ZIP - 1);
}
public void fillShorterValueName() {
fillInputWithStringOfLength(nameInput, MINIMUM_OF_NAME - 1);
}
public void fillShorterValueJob() {
fillInputWithStringOfLength(jobInput, MINIMUM_OF_NAME - 1);
}
public void fillShorterValueAddress() {
fillInputWithStringOfLength(addressInput, MINIMUM_OF_NAME - 1);
}
public void fillShorterValueZip() {
fillInputWithStringOfLength(zipInput, MINIMUM_OF_NAME - 1);
}
public void fillCorrectValues() {
fillInputWithStringOfLength(nameInput, MINIMUM_OF_NAME);
fillInputWithStringOfLength(jobInput, MINIMUM_OF_JOB);
fillInputWithStringOfLength(addressInput, MINIMUM_OF_ADDRESS);
fillInputWithStringOfLength(zipInput, MINIMUM_OF_ZIP);
}
public void eraseAll() {
for (WebElement input : allInputs()) {
input.click();
input.clear();
}
}
protected void fillInputWithStringOfLength(WebElement input, int length) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < length; i++) {
builder.append("x");
}
input.click();
input.clear();
input.sendKeys(builder.toString());
}
public void validate() {
Graphene.guardAjax(ajaxValidateButton).click();
}
public void blur() {
nameInput.click();
jobInput.click();
}
protected WebElement[] allInputs() {
return new WebElement[] { nameInput, jobInput, addressInput, zipInput };
}
}