001 /** 002 * Copyright 2005-2012 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.krad.datadictionary.validation.constraint; 017 018 import java.io.IOException; 019 import java.io.InputStream; 020 import java.util.ArrayList; 021 import java.util.List; 022 import java.util.Properties; 023 024 import org.junit.Assert; 025 import org.junit.Before; 026 import org.junit.Test; 027 import org.kuali.rice.krad.datadictionary.AttributeDefinition; 028 import org.kuali.rice.krad.datadictionary.BusinessObjectEntry; 029 import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader; 030 import org.kuali.rice.krad.datadictionary.validation.DictionaryObjectAttributeValueReader; 031 import org.kuali.rice.krad.datadictionary.validation.Employee; 032 import org.kuali.rice.krad.datadictionary.validation.ErrorLevel; 033 import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint; 034 import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor; 035 import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult; 036 import org.kuali.rice.krad.datadictionary.validation.result.DictionaryValidationResult; 037 038 039 /** 040 * Things this test should check: 041 * 042 * 1. empty value check. (failure) {@link #testValueInvalidPhoneNumberEmpty()} 043 * 2. value with valid phone number. (success) {@link #testValueValidPhoneNumber()} 044 * 3. value with invalid phone number. (failure) {@link testValueInvalidPhoneNumber()} 045 * 4. value with invalid phone number. (failure) {@link testValueInvalidPhoneNumber1()} 046 * 5. value with invalid phone number. (failure) {@link testValueInvalidPhoneNumber2()} 047 * 6. value with invalid phone number. (failure) {@link testValueInvalidPhoneNumber3()} 048 * 7. value with invalid phone number. (failure) {@link testValueInvalidPhoneNumber4()} 049 * 8. value with invalid phone number. (failure) {@link testValueInvalidPhoneNumber5()} 050 * 9. value with invalid phone number. (failure) {@link testValueInvalidPhoneNumber6()} 051 * 052 * 053 * @author Kuali Rice Team (rice.collab@kuali.org) 054 */ 055 public class PhoneNumberPatternConstraintTest { 056 057 private final String PATTERN_CONSTRAINT = "validationPatternRegex.phoneNumber"; 058 059 private AttributeDefinition contactPhoneDefinition; 060 061 private BusinessObjectEntry addressEntry; 062 private DictionaryValidationResult dictionaryValidationResult; 063 064 private ValidCharactersConstraintProcessor processor; 065 066 private Employee validPhoneEmployee = new Employee(); 067 private Employee invalidPhoneEmployeeEmpty = new Employee(); 068 private Employee invalidPhoneEmployee = new Employee(); 069 private Employee invalidPhoneEmployee1 = new Employee(); 070 private Employee invalidPhoneEmployee2 = new Employee(); 071 private Employee invalidPhoneEmployee3 = new Employee(); 072 private Employee invalidPhoneEmployee4 = new Employee(); 073 private Employee invalidPhoneEmployee5 = new Employee(); 074 private Employee invalidPhoneEmployee6 = new Employee(); 075 076 private ConfigurationBasedRegexPatternConstraint contactPhoneNumberPatternConstraint; 077 078 @Before 079 public void setUp() throws Exception { 080 081 String regex = getProperty(PATTERN_CONSTRAINT); 082 083 processor = new ValidCharactersConstraintProcessor(); 084 085 dictionaryValidationResult = new DictionaryValidationResult(); 086 dictionaryValidationResult.setErrorLevel(ErrorLevel.NOCONSTRAINT); 087 088 addressEntry = new BusinessObjectEntry(); 089 090 List<AttributeDefinition> attributes = new ArrayList<AttributeDefinition>(); 091 092 validPhoneEmployee.setContactPhone("056-012-1200"); 093 invalidPhoneEmployeeEmpty.setContactPhone(""); 094 invalidPhoneEmployee.setContactPhone("09712248474"); 095 invalidPhoneEmployee1.setContactPhone("+19712248474"); 096 invalidPhoneEmployee2.setContactPhone("+1-972-232-3333"); 097 invalidPhoneEmployee3.setContactPhone("+1-(972)-23334444"); 098 invalidPhoneEmployee4.setContactPhone("+1-(972)-1223444 xtn.222"); 099 invalidPhoneEmployee5.setContactPhone("+1 056 012 1200"); 100 invalidPhoneEmployee6.setContactPhone("056\\-012\\-1200"); 101 102 contactPhoneNumberPatternConstraint = new ConfigurationBasedRegexPatternConstraint(); 103 contactPhoneNumberPatternConstraint.setValue(regex); 104 105 contactPhoneDefinition = new AttributeDefinition(); 106 contactPhoneDefinition.setName("contactPhone"); 107 contactPhoneDefinition.setValidCharactersConstraint(contactPhoneNumberPatternConstraint); 108 attributes.add(contactPhoneDefinition); 109 110 addressEntry.setAttributes(attributes); 111 } 112 113 @Test 114 public void testValueInvalidPhoneNumberEmpty() { 115 ConstraintValidationResult result = process(invalidPhoneEmployeeEmpty, "contactPhone", contactPhoneNumberPatternConstraint); 116 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 117 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors()); 118 Assert.assertEquals(ErrorLevel.INAPPLICABLE, result.getStatus()); 119 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 120 } 121 122 @Test 123 public void testValueValidPhoneNumber() { 124 ConstraintValidationResult result = process(validPhoneEmployee, "contactPhone", contactPhoneNumberPatternConstraint); 125 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 126 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors()); 127 Assert.assertEquals(ErrorLevel.OK, result.getStatus()); 128 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 129 } 130 131 132 @Test 133 public void testValueInvalidPhoneNumber() { 134 ConstraintValidationResult result = process(invalidPhoneEmployee, "contactPhone", contactPhoneNumberPatternConstraint); 135 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 136 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 137 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 138 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 139 } 140 141 @Test 142 public void testValueInvalidPhoneNumber1() { 143 ConstraintValidationResult result = process(invalidPhoneEmployee1, "contactPhone", contactPhoneNumberPatternConstraint); 144 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 145 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 146 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 147 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 148 } 149 150 @Test 151 public void testValueInvalidPhoneNumber2() { 152 ConstraintValidationResult result = process(invalidPhoneEmployee2, "contactPhone", contactPhoneNumberPatternConstraint); 153 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 154 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 155 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 156 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 157 } 158 159 @Test 160 public void testValueInvalidPhoneNumber3() { 161 ConstraintValidationResult result = process(invalidPhoneEmployee3, "contactPhone", contactPhoneNumberPatternConstraint); 162 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 163 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 164 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 165 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 166 } 167 168 @Test 169 public void testValueInvalidPhoneNumber4() { 170 ConstraintValidationResult result = process(invalidPhoneEmployee4, "contactPhone", contactPhoneNumberPatternConstraint); 171 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 172 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 173 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 174 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 175 } 176 177 @Test 178 public void testValueInvalidPhoneNumber5() { 179 ConstraintValidationResult result = process(invalidPhoneEmployee5, "contactPhone", contactPhoneNumberPatternConstraint); 180 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 181 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 182 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 183 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 184 } 185 186 @Test 187 public void testValueInvalidPhoneNumber6() { 188 ConstraintValidationResult result = process(invalidPhoneEmployee6, "contactPhone", contactPhoneNumberPatternConstraint); 189 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 190 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 191 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 192 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 193 } 194 195 private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) { 196 AttributeValueReader attributeValueReader = new DictionaryObjectAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", addressEntry); 197 attributeValueReader.setAttributeName(attributeName); 198 199 Object value = attributeValueReader.getValue(); 200 return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult(); 201 } 202 203 private String getProperty(String key) { 204 String value = null; 205 String filePath = "org/kuali/rice/krad/ApplicationResources.properties"; 206 Properties properties = new Properties(); 207 try { 208 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath); 209 properties.load(in); 210 value = properties.getProperty(key); 211 } catch (IOException e) { 212 } 213 return value; 214 } 215 }