001 /*
002 * Copyright 2011 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/ecl1.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.util.ArrayList;
019 import java.util.List;
020
021 import org.junit.Assert;
022 import org.junit.Before;
023 import org.junit.Test;
024 import org.kuali.rice.krad.datadictionary.AttributeDefinition;
025 import org.kuali.rice.krad.datadictionary.BusinessObjectEntry;
026 import org.kuali.rice.krad.datadictionary.validation.Address;
027 import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader;
028 import org.kuali.rice.krad.datadictionary.validation.DictionaryObjectAttributeValueReader;
029 import org.kuali.rice.krad.datadictionary.validation.ErrorLevel;
030 import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint;
031 import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor;
032 import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult;
033 import org.kuali.rice.krad.datadictionary.validation.result.DictionaryValidationResult;
034
035
036 /**
037 * Things this test should check:
038 *
039 * 1. value with all valid characters. (success) {@link #testValueAllValidChars()}
040 * 2. value with invalid characters. (failure) {@link #testValueNotValidChars()}
041 * 3. value with all valid characters. Allowing white space.(success) {@link #testValueAllValidCharsAllowWhitespace()}
042 * 4. value with invalid characters. Allowing white space. (failure) {@link #testValueNotValidCharsAllowWhitespace()}
043 * 5. value with all valid characters. Allowing white space, period, underscore and parenthesis. (success) {@link #testValueAllValidCharsAllowWhitespaceAndPeriodAndUnderscoreAndParenthesis()}
044 * 6. value with invalid characters. Allowing white space, period, underscore and parenthesis. (failure) {@link #testValueNotValidCharsAllowWhitespaceAndPeriodAndUnderscoreAndParenthesis()}
045 *
046 * @author Kuali Rice Team (rice.collab@kuali.org)
047 */
048 public class AlphaNumericPatternConstraintTest {
049
050 private AttributeDefinition street1Definition;
051 private AttributeDefinition street2Definition;
052 private AttributeDefinition postalCodeDefinition;
053
054 private BusinessObjectEntry addressEntry;
055 private DictionaryValidationResult dictionaryValidationResult;
056
057 private ValidCharactersConstraintProcessor processor;
058
059 private Address washingtonDCAddress = new Address("893 Presidential Ave", "(A_123) Suite 800.", "Washington", "DC", "NHW123A", "USA", null);
060 private Address newYorkNYAddress = new Address("Presidential Street", "(A-123) Suite 800", "New York", "NY", "ZH 3456", "USA", null);
061 private Address sydneyAUSAddress = new Address("Presidential Street-Ave.", "Suite_800.", "Sydney", "ZZ", "ZH-5656", "USA", null);
062
063 private AlphaNumericPatternConstraint street1AlphaNumericPatternConstraint;
064 private AlphaNumericPatternConstraint street2AlphaNumericPatternConstraint;
065 private AlphaNumericPatternConstraint postalCodeAlphaNumericPatternConstraint;
066
067 @Before
068 public void setUp() throws Exception {
069
070 processor = new ValidCharactersConstraintProcessor();
071
072 dictionaryValidationResult = new DictionaryValidationResult();
073 dictionaryValidationResult.setErrorLevel(ErrorLevel.NOCONSTRAINT);
074
075 addressEntry = new BusinessObjectEntry();
076
077 List<AttributeDefinition> attributes = new ArrayList<AttributeDefinition>();
078
079 street1AlphaNumericPatternConstraint = new AlphaNumericPatternConstraint();
080 street1AlphaNumericPatternConstraint.setAllowWhitespace(true);
081
082 street1Definition = new AttributeDefinition();
083 street1Definition.setName("street1");
084 street1Definition.setValidCharactersConstraint(street1AlphaNumericPatternConstraint);
085 attributes.add(street1Definition);
086
087
088 street2AlphaNumericPatternConstraint = new AlphaNumericPatternConstraint();
089 street2AlphaNumericPatternConstraint.setAllowWhitespace(true);
090 street2AlphaNumericPatternConstraint.setAllowParenthesis(true);
091 street2AlphaNumericPatternConstraint.setAllowPeriod(true);
092 street2AlphaNumericPatternConstraint.setAllowUnderscore(true);
093
094 street2Definition = new AttributeDefinition();
095 street2Definition.setName("street2");
096 street2Definition.setValidCharactersConstraint(street2AlphaNumericPatternConstraint);
097 attributes.add(street2Definition);
098
099 postalCodeAlphaNumericPatternConstraint = new AlphaNumericPatternConstraint();
100
101 postalCodeDefinition = new AttributeDefinition();
102 postalCodeDefinition.setName("postalCode");
103 postalCodeDefinition.setValidCharactersConstraint(postalCodeAlphaNumericPatternConstraint);
104 attributes.add(postalCodeDefinition);
105
106 addressEntry.setAttributes(attributes);
107 }
108
109 @Test
110 public void testValueAllValidChars() {
111 ConstraintValidationResult result = process(washingtonDCAddress, "postalCode", postalCodeAlphaNumericPatternConstraint);
112 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
113 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
114 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
115 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
116 }
117
118 @Test
119 public void testValueNotValidChars() {
120 ConstraintValidationResult result = process(newYorkNYAddress, "postalCode", postalCodeAlphaNumericPatternConstraint);
121 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
122 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
123 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
124 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
125 }
126
127 @Test
128 public void testValueAllValidCharsAllowWhitespace() {
129 ConstraintValidationResult result = process(newYorkNYAddress, "street1", street1AlphaNumericPatternConstraint);
130 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
131 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
132 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
133 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
134 }
135
136 @Test
137 public void testValueNotValidCharsAllowWhitespace() {
138 ConstraintValidationResult result = process(sydneyAUSAddress, "street1", street1AlphaNumericPatternConstraint);
139 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
140 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
141 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
142 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
143 }
144
145 @Test
146 public void testValueAllValidCharsAllowWhitespaceAndPeriodAndUnderscoreAndParenthesis() {
147 ConstraintValidationResult result = process(washingtonDCAddress, "street2", street2AlphaNumericPatternConstraint);
148 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
149 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
150 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
151 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
152 }
153
154 @Test
155 public void testValueNotValidCharsAllowWhitespaceAndPeriodAndUnderscoreAndParenthesis() {
156 ConstraintValidationResult result = process(newYorkNYAddress, "street2", street2AlphaNumericPatternConstraint);
157 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
158 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
159 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
160 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
161 }
162
163 private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) {
164 AttributeValueReader attributeValueReader = new DictionaryObjectAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", addressEntry);
165 attributeValueReader.setAttributeName(attributeName);
166
167 Object value = attributeValueReader.getValue();
168 return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult();
169 }
170 }