Skip to content

Commit

Permalink
#313 Add integration test for o:validateBean
Browse files Browse the repository at this point in the history
  • Loading branch information
Bauke Scholtz committed Sep 23, 2016
1 parent 62b44da commit be8c314
Show file tree
Hide file tree
Showing 12 changed files with 619 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/test/java/org/omnifaces/test/OmniFacesIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import static org.jboss.arquillian.graphene.Graphene.waitGui;
import static org.jboss.shrinkwrap.api.ShrinkWrap.create;
import static org.omnifaces.test.OmniFacesIT.FacesConfig.withMessageBundle;

import java.io.File;
import java.net.URL;
Expand Down Expand Up @@ -101,6 +102,11 @@ public ArchiveBuilder withFacesConfig(FacesConfig facesConfig) {
}

archive.addAsWebInfResource("WEB-INF/faces-config.xml/" + facesConfig.name() + ".xml", "faces-config.xml");

if (facesConfig == withMessageBundle) {
archive.addAsResource("messages.properties");
}

facesConfigSet = true;
return this;
}
Expand Down Expand Up @@ -144,7 +150,8 @@ public WebArchive createDeployment() {
public static enum FacesConfig {
basic,
withFullAjaxExceptionHandler,
withCombinedResourceHandler;
withCombinedResourceHandler,
withMessageBundle;
}

public static enum WebXml {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
/*
* Copyright 2016 OmniFaces
*
* 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.
*/
package org.omnifaces.test.taghandler.validatebean;

import static org.jboss.arquillian.graphene.Graphene.guardAjax;
import static org.jboss.arquillian.graphene.Graphene.waitGui;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.omnifaces.test.OmniFacesIT.ArchiveBuilder.buildWebArchive;
import static org.omnifaces.test.OmniFacesIT.FacesConfig.withMessageBundle;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.omnifaces.test.OmniFacesIT;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;

public class ValidateBeanIT extends OmniFacesIT {

@FindBy(id="messages")
private WebElement messages;

@FindBy(id="validateByCommand:input")
private WebElement input;

@FindBy(id="validateByCommand:validateDefaultByCommand")
private WebElement validateDefaultByCommand;

@FindBy(id="validateByCommand:validateGroupByCommand")
private WebElement validateGroupByCommand;

@FindBy(id="validateByCommand:validateDefaultAndGroupByCommand")
private WebElement validateDefaultAndGroupByCommand;

@FindBy(id="validateByCommand:validateDisabledByCommand")
private WebElement validateDisabledByCommand;

@FindBy(id="validateByInput:validateDefaultByInput")
private WebElement validateDefaultByInput;

@FindBy(id="validateByInput:validateGroupByInput")
private WebElement validateGroupByInput;

@FindBy(id="validateByInput:validateDefaultAndGroupByInput")
private WebElement validateDefaultAndGroupByInput;

@FindBy(id="validateByInput:validateDisabledByInput")
private WebElement validateDisabledByInput;

@FindBy(id="validateClassLevelDefault:number1")
private WebElement validateClassLevelDefaultNumber1;

@FindBy(id="validateClassLevelDefault:number2")
private WebElement validateClassLevelDefaultNumber2;

@FindBy(id="validateClassLevelDefault:command")
private WebElement validateClassLevelDefaultCommand;

@FindBy(id="validateClassLevelActual:number1")
private WebElement validateClassLevelActualNumber1;

@FindBy(id="validateClassLevelActual:number2")
private WebElement validateClassLevelActualNumber2;

@FindBy(id="validateClassLevelActual:command")
private WebElement validateClassLevelActualCommand;

@FindBy(id="validateClassLevelByCopier:number1")
private WebElement validateClassLevelByCopierNumber1;

@FindBy(id="validateClassLevelByCopier:number2")
private WebElement validateClassLevelByCopierNumber2;

@FindBy(id="validateClassLevelByCopier:command")
private WebElement validateClassLevelByCopierCommand;

@Deployment(testable=false)
public static WebArchive createDeployment() {
return buildWebArchive(ValidateBeanIT.class)
.withFacesConfig(withMessageBundle)
.createDeployment();
}

@Test
public void validateByCommand() {
input.sendKeys("x");
guardAjax(validateDefaultByCommand).click();
assertEquals("default", messages.getText());

input.clear();
input.sendKeys("xx");
guardAjax(validateDefaultByCommand).click();
assertEquals("actionSuccess", messages.getText());

input.clear();
input.sendKeys("x");
guardAjax(validateGroupByCommand).click();
assertEquals("group", messages.getText());

input.clear();
input.sendKeys("xx");
guardAjax(validateGroupByCommand).click();
assertEquals("actionSuccess", messages.getText());

input.clear();
input.sendKeys("x");
guardAjax(validateDefaultAndGroupByCommand).click();
String message = messages.getText();
assertTrue(message.contains("default") && message.contains("group")); // It's unordered.

input.clear();
input.sendKeys("xx");
guardAjax(validateDefaultAndGroupByCommand).click();
assertEquals("actionSuccess", messages.getText());

input.clear();
input.sendKeys("x");
guardAjax(validateDisabledByCommand).click();
assertEquals("actionSuccess", messages.getText());

input.clear();
input.sendKeys("xx");
guardAjax(validateDisabledByCommand).click();
assertEquals("actionSuccess", messages.getText());
}

@Test
public void validateByInput() {
validateDefaultByInput.sendKeys("x");
triggerOnchange(validateDefaultByInput);
assertEquals("default", messages.getText());

validateDefaultByInput.clear();
validateDefaultByInput.sendKeys("xx");
triggerOnchange(validateDefaultByInput);
assertEquals("actionSuccess", messages.getText());

validateGroupByInput.sendKeys("x");
triggerOnchange(validateGroupByInput);
assertEquals("group", messages.getText());

validateGroupByInput.clear();
validateGroupByInput.sendKeys("xx");
triggerOnchange(validateGroupByInput);
assertEquals("actionSuccess", messages.getText());

validateDefaultAndGroupByInput.sendKeys("x");
triggerOnchange(validateDefaultAndGroupByInput);
String message = messages.getText();
assertTrue(message.contains("default") && message.contains("group")); // It's unordered.

validateDefaultAndGroupByInput.clear();
validateDefaultAndGroupByInput.sendKeys("xx");
triggerOnchange(validateDefaultAndGroupByInput);
assertEquals("actionSuccess", messages.getText());

validateDisabledByInput.sendKeys("x");
triggerOnchange(validateDisabledByInput);
assertEquals("actionSuccess", messages.getText());

validateDisabledByInput.clear();
validateDisabledByInput.sendKeys("xx");
triggerOnchange(validateDisabledByInput);
assertEquals("actionSuccess", messages.getText());
}

private void triggerOnchange(WebElement element) {
((JavascriptExecutor) browser).executeScript(""
+ "document.getElementById('messages').innerHTML='';"
+ "document.getElementById('" + element.getAttribute("id") + "').onchange();"
);
waitGui(browser).until().element(messages).text().not().equalTo("");
}

@Test
public void validateClassLevelCopy() {
validateClassLevelDefaultNumber1.sendKeys("2");
validateClassLevelDefaultNumber2.sendKeys("1");
guardAjax(validateClassLevelDefaultCommand).click();
assertEquals("invalidEntity", messages.getText());

validateClassLevelDefaultNumber2.sendKeys("0");
guardAjax(validateClassLevelDefaultCommand).click();
assertEquals("actionSuccess", messages.getText());
}

@Test
public void validateClassLevelActual() {
validateClassLevelActualNumber1.sendKeys("2");
validateClassLevelActualNumber2.sendKeys("1");
guardAjax(validateClassLevelActualCommand).click();
assertEquals("invalidEntity actionValidationFailed", messages.getText());

validateClassLevelActualNumber2.sendKeys("0");
guardAjax(validateClassLevelActualCommand).click();
assertEquals("actionSuccess", messages.getText());
}

@Test
public void validateClassLevelByCopier() {
validateClassLevelByCopierNumber1.sendKeys("2");
validateClassLevelByCopierNumber2.sendKeys("1");
guardAjax(validateClassLevelByCopierCommand).click();
assertEquals("invalidEntity", messages.getText());

validateClassLevelByCopierNumber2.sendKeys("0");
guardAjax(validateClassLevelByCopierCommand).click();
assertEquals("actionSuccess", messages.getText());
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/*
* Copyright 2016 OmniFaces
*
* 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.
*/
package org.omnifaces.test.taghandler.validatebean;

import static org.omnifaces.util.Faces.isValidationFailed;
import static org.omnifaces.util.Messages.addGlobalInfo;
import static org.omnifaces.util.Messages.addGlobalWarn;

import javax.annotation.PostConstruct;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;

@Named
@RequestScoped
public class ValidateBeanITClassLevelBean {

private ValidateBeanITEntity entity;

@PostConstruct
public void init() {
entity = new ValidateBeanITEntity();
}

public void action() {
if (isValidationFailed()) {
addGlobalWarn(" actionValidationFailed");
}
else {
addGlobalInfo("actionSuccess");
}
}

public ValidateBeanITEntity getEntity() {
return entity;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright 2016 OmniFaces
*
* 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.
*/
package org.omnifaces.test.taghandler.validatebean;
import static org.omnifaces.util.Faces.isValidationFailed;
import static org.omnifaces.util.Messages.addGlobalInfo;
import static org.omnifaces.util.Messages.addGlobalWarn;

import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Named
@RequestScoped
public class ValidateBeanITDefaultBean {

@Pattern(regexp=".{2,}", message="default")
@Size(min=2, groups=ValidateBeanITValidationGroup.class, message="group")
private String input;

public void action() {
if (isValidationFailed()) {
addGlobalWarn("actionValidationFailed");
}
else {
addGlobalInfo("actionSuccess");
}
}

public String getInput() {
return input;
}

public void setInput(String input) {
this.input = input;
}

}
Loading

0 comments on commit be8c314

Please sign in to comment.