package egovframework.rte.ptl.mvc.validation; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.Date; import org.junit.Test; import org.springframework.beans.MutablePropertyValues; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockMultipartHttpServletRequest; import org.springframework.validation.BindException; import org.springframework.validation.DataBinder; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import org.springframework.web.bind.ServletRequestDataBinder; /** * * 시스템명 : 실행환경시스템 * 서브시스템명 : 화면처리 * 요구사항ID : REQ-RTE-112 * 요구사항명 : 폼 값 검증 * 설명 : 입력값에 대한 Validation 기능을 제공해야 하며, 해당 기능을 사용자가 지정가능한 구조로 개발하여야 함. * * @author Ham Cheol */ public class FormValidationTest { @Test public void testValidation() throws BindException { Employee employee = new Employee(); DataBinder binder = new DataBinder(employee); MutablePropertyValues pvs = new MutablePropertyValues(); pvs.addPropertyValue("empId", "AA1000"); pvs.addPropertyValue("empName", "Nobody"); pvs.addPropertyValue("empAge", 10); binder.bind(pvs); Validator validator = new EmployeeValidator(); Errors errors = binder.getBindingResult(); validator.validate(employee, errors); assertFalse(errors.hasFieldErrors("empId")); assertFalse(errors.hasFieldErrors("empName")); assertTrue(errors.hasFieldErrors("empAge")); } @Test public void testValidationWithServletRequest() { Employee employee = new Employee(); MockHttpServletRequest request = new MockMultipartHttpServletRequest(); ServletRequestDataBinder binder = new ServletRequestDataBinder(employee, "employee"); request.addParameter("empId", "AA1001"); request.addParameter("empName", "But You"); request.addParameter("empAge", "12"); binder.bind(request); Validator validator = new EmployeeValidator(); Errors errors = binder.getBindingResult(); validator.validate(employee, errors); assertFalse(errors.hasFieldErrors("empId")); assertFalse(errors.hasFieldErrors("empName")); assertTrue(errors.hasFieldErrors("empAge")); } private class Employee { private String empId; private String empName; private int empAge; private Date birthDate; public String getEmpId() { return empId; } @SuppressWarnings("unused") public void setEmpId(String empId) { this.empId = empId; } public String getEmpName() { return empName; } @SuppressWarnings("unused") public void setEmpName(String empName) { this.empName = empName; } public int getEmpAge() { return empAge; } @SuppressWarnings("unused") public void setEmpAge(int empAge) { this.empAge = empAge; } @SuppressWarnings("unused") public Date getBirthDate() { return birthDate; } @SuppressWarnings("unused") public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } } private class EmployeeValidator implements Validator { public boolean supports(Class<?> clazz) { return clazz.isAssignableFrom(Employee.class); } public void validate(Object target, Errors errors) { Employee employee = (Employee) target; if (employee.getEmpId() == null) { errors.rejectValue("empId", "employee's id is required"); } if (employee.getEmpName() == null || employee.getEmpName().length() < 2) { errors.rejectValue("empName", "employee's name is required"); } if (!(employee.getEmpAge() > 18 && employee.getEmpAge() < 65)) { errors.rejectValue("empAge", "employee's age must be between 18 and 65."); } } } }