/*
* Copyright 2002-2007 the original author or authors.
*
* 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.internna.iwebmvc.core.validation;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import org.junit.Before;
import org.junit.Test;
import stubs.validation.CollectionBean;
import stubs.validation.DateBean;
import stubs.validation.InnerBean;
import stubs.validation.InnerBeanExtension;
import stubs.validation.NumberBean;
import stubs.validation.StringBean;
import static org.junit.Assert.*;
/**
*
* @author Jose Noheda
* @since 1.0
*/
public class ValidationVisitorTest {
private ValidationVisitor validationVisitor;
private StringBean stringBean;
private NumberBean numberBean;
private DateBean dateBean;
private InnerBean innerBean;
private CollectionBean collectionBean;
@Before
public void setUp() throws Exception {
stringBean = new StringBean();
numberBean = new NumberBean();
numberBean.setDoubleNumber(2);
dateBean = new DateBean();
innerBean = new InnerBean();
innerBean.setInnerBean(new InnerBeanExtension());
innerBean.setStringProperty("abcd");
validationVisitor = new ValidationVisitor();
collectionBean = new CollectionBean();
}
@Test
public void visitString() {
Collection<ValidationError> errors = validationVisitor.visit(stringBean);
assertTrue("Required error size", errors.size() == 1);
assertEquals("Required error content", ValidationVisitor.errorCodes[0], errors.iterator().next().getErrorCode());
stringBean.setOneString("no regexp");
errors = validationVisitor.visit(stringBean);
assertTrue("Regexp error size", errors.size() == 1);
assertEquals("Regexp error content", ValidationVisitor.errorCodes[1], errors.iterator().next().getErrorCode());
stringBean.setOneString("ok");
errors = validationVisitor.visit(stringBean);
assertTrue("MinLength error size", errors.size() == 1);
assertEquals("MinLength error content", ValidationVisitor.errorCodes[2], errors.iterator().next().getErrorCode());
stringBean.setOneString("okokokokokokokokok");
errors = validationVisitor.visit(stringBean);
assertTrue("MaxLength error size", errors.size() == 1);
assertEquals("MaxLength error content", ValidationVisitor.errorCodes[3], errors.iterator().next().getErrorCode());
stringBean.setOneString("no");
errors = validationVisitor.visit(stringBean);
assertTrue("Two errors", errors.size() == 2);
stringBean.setOneString("ok!");
errors = validationVisitor.visit(stringBean);
assertTrue("No errors", errors.size() == 0);
}
@Test
public void visitNumber() {
Collection<ValidationError> errors = validationVisitor.visit(numberBean);
assertTrue("Required error size", errors.size() == 1);
assertEquals("Required error content", ValidationVisitor.errorCodes[0], errors.iterator().next().getErrorCode());
numberBean.setFloatNumber(-1.0f);
errors = validationVisitor.visit(numberBean);
assertTrue("Required error min", errors.size() == 1);
assertEquals("Min Value error content", ValidationVisitor.errorCodes[2], errors.iterator().next().getErrorCode());
numberBean.setFloatNumber(2.0f);
numberBean.setDoubleNumber(60);
errors = validationVisitor.visit(numberBean);
assertTrue("Max number exceeded", errors.size() == 1);
assertEquals("Max Value error content", ValidationVisitor.errorCodes[3], errors.iterator().next().getErrorCode());
numberBean.setDoubleNumber(40);
numberBean.setIntegerNumber(-4);
errors = validationVisitor.visit(numberBean);
assertTrue("Required Integer error min", errors.size() == 1);
assertEquals("Integer Min Value error content", ValidationVisitor.errorCodes[2], errors.iterator().next().getErrorCode());
}
@Test
public void visitDate() {
Collection<ValidationError> errors = validationVisitor.visit(dateBean);
assertTrue("Required error size", errors.size() == 2);
assertEquals("Required error content", ValidationVisitor.errorCodes[0], errors.iterator().next().getErrorCode());
Calendar time = Calendar.getInstance();
time.add(Calendar.YEAR, -1);
dateBean.setPastDate(time.getTime());
errors = validationVisitor.visit(dateBean);
assertTrue("Past year recognized", errors.size() == 1);
time.setTime(new Date());
time.add(Calendar.DATE, -1);
dateBean.setYesterday(time.getTime());
errors = validationVisitor.visit(dateBean);
assertTrue("All times ok", errors.size() == 0);
}
@Test
public void visitBean() {
innerBean.getInnerBean().setStringProperty("hi");
Collection<ValidationError> errors = validationVisitor.visit(innerBean);
assertTrue("Required error size", errors.size() == 1);
ValidationError error = errors.iterator().next();
assertEquals("Inner string error", ValidationVisitor.errorCodes[1], error.getErrorCode());
assertEquals("Inner path established", "innerBean.stringProperty", errors.iterator().next().getPath());
innerBean.getInnerBean().setStringProperty("abcd");
errors = validationVisitor.visit(innerBean);
assertTrue("No inner errors", errors.size() == 0);
}
@Test
public void visitCollection() {
Collection<ValidationError> errors = validationVisitor.visit(collectionBean);
assertTrue("Required error size", errors.size() == 1);
assertEquals("Required error size code 0", errors.iterator().next().getErrorCode(), ValidationVisitor.errorCodes[0]);
collectionBean.setBeans(new ArrayList<InnerBean>());
errors = validationVisitor.visit(collectionBean);
assertTrue("Required a minimum size", errors.size() == 1);
assertEquals("Required a minimum size code 2", errors.iterator().next().getErrorCode(), ValidationVisitor.errorCodes[2]);
collectionBean.getBeans().add(innerBean);
errors = validationVisitor.visit(collectionBean);
assertTrue("Errors in inner bean", errors.size() == 1);
assertEquals("Correct collection path", "beans[0].innerBean.stringProperty", errors.iterator().next().getPath());
collectionBean.getBeans().iterator().next().getInnerBean().setStringProperty("abcd");
errors = validationVisitor.visit(collectionBean);
assertTrue("No errors in inner bean", errors.size() == 0);
collectionBean.getBeans().add(innerBean);
}
}