package net.bootsfaces.it.component;
import static org.jboss.arquillian.graphene.Graphene.guardAjax;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.graphene.GrapheneElement;
import org.jboss.arquillian.graphene.findby.FindByJQuery;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.junit.InSequence;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.support.FindBy;
import net.bootsfaces.component.InputTextSessionBean;
import net.bootsfaces.component.validators.RequiredInputTextValidator;
import net.bootsfaces.it.IntegrationTestsBase;
/**
* Simple test which validates the rendered information for b:inputText tag.
* It opens the inputTextIT.xhtml file and assert that the rendered information is
* correct.
*
* @author yersan
*/
//@RunWith(Arquillian.class)
public class InputTextITCase extends IntegrationTestsBase {
@Deployment(testable = false)
public static WebArchive createDeployment() {
WebArchive deployment = createBaseDeployment()
.addClass(InputTextSessionBean.class)
.addClass(RequiredInputTextValidator.class)
.addAsWebResource("inputText.xhtml");
System.out.println(deployment.toString(true));
return deployment;
}
@Before
public void setup() throws IOException {
browser.get(context + "/faces/inputText.xhtml");
}
@FindBy(id = "input_txt_1")
private GrapheneElement input_txt_1;
@FindBy(id = "txt_1")
private GrapheneElement txt_1;
@FindBy(id = "input_txt_2")
private GrapheneElement input_txt_2;
@FindBy(id = "txt_2")
private GrapheneElement txt_2;
@FindBy(id = "input_txt_3")
private GrapheneElement input_txt_3;
@FindBy(id = "txt_3")
private GrapheneElement txt_3;
@FindBy(id = "input_txt_4")
private GrapheneElement input_txt_4;
@FindBy(id = "txt_4")
private GrapheneElement txt_4;
@FindBy(id = "input_txt_5")
private GrapheneElement input_txt_5;
@FindBy(id = "txt_5")
private GrapheneElement txt_5;
@FindBy(id = "cmd")
private GrapheneElement cmd;
@FindBy(id = "cmd2")
private GrapheneElement cmd2;
@FindBy(id = "msg")
private GrapheneElement msg;
@FindByJQuery("#msg li")
private GrapheneElement facesMessage;
@FindBy(id = "txt_1_label")
private GrapheneElement txt_1_label;
// @Test
@InSequence(1)
public void testInputTextRender() {
String pageTitle = browser.getTitle();
//assert page title
assertEquals("InputText IT", pageTitle);
assertTrue("input_txt_1 rendered failed. onchange does nt exist.", input_txt_1.getAttribute("onchange").equals("var dummy = 0;"));
assertTrue("input_txt_1 rendered failed. onselect does nt exist.", input_txt_1.getAttribute("onselect").equals("var dummy = 0;"));
}
// @Test
@InSequence(10)
public void testInputTextValidator() {
//assert that there is no message
assertFalse(facesMessage.isPresent());
input_txt_2.clear();
//submit
guardAjax(cmd).click();
//assert that there is message
assertTrue(facesMessage.getText().contains(RequiredInputTextValidator.VALUE_REQUIRED_MSG));
input_txt_2.sendKeys("DUMMY");
}
// @Test
@InSequence(20)
public void testInputTextBinding() {
//binding value was set in backed bean, must be checked
assertTrue("input_txt_3 binding failed", input_txt_3.getAttribute("value").contains("VALUE BINDING"));
}
// @Test
@InSequence(30)
public void testInputTextValuechangeListener() {
input_txt_1.clear();
//change listener count is 0 ?
assertTrue(txt_1_label.getText().contains("0"));
input_txt_1.sendKeys("CHANGED VALUE");
//submit
guardAjax(cmd).click();
//change listener count is 1 ?
assertTrue(txt_1_label.getText().contains("1"));
}
// @Test
@InSequence(40)
public void testImmediate() {
input_txt_4.clear();
input_txt_5.clear();
//submit
guardAjax(cmd2).click();
//there is message input required text for txt 4
//there is no message input required text for txt 5
assertTrue(facesMessage.getText().contains(txt_4.getAttribute("id")) && !facesMessage.getText().contains(txt_5.getAttribute("id")));
input_txt_4.sendKeys("avoid required for txt 4");
//submit
guardAjax(cmd2).click();
//there is no message input required text for txt 4
//there is is message input required text for txt 5
assertTrue(!facesMessage.getText().contains(txt_4.getAttribute("id")) && facesMessage.getText().contains(txt_5.getAttribute("id")));
}
}