001    /**
002     * Copyright 2005-2014 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.util.ArrayList;
019    import java.util.List;
020    
021    import org.junit.Assert;
022    import org.junit.Before;
023    import org.junit.Ignore;
024    import org.junit.Test;
025    import org.kuali.rice.krad.datadictionary.AttributeDefinition;
026    import org.kuali.rice.krad.datadictionary.BusinessObjectEntry;
027    import org.kuali.rice.krad.datadictionary.validation.Address;
028    import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader;
029    import org.kuali.rice.krad.datadictionary.validation.DictionaryObjectAttributeValueReader;
030    import org.kuali.rice.krad.datadictionary.validation.ErrorLevel;
031    import org.kuali.rice.krad.datadictionary.validation.constraint.AlphaPatternConstraint;
032    import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint;
033    import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor;
034    import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult;
035    import org.kuali.rice.krad.datadictionary.validation.result.DictionaryValidationResult;
036    
037    
038    /**
039     * Things this test should check:
040     *
041     * 1. value with all valid characters.(success) {@link #testValueAllValidChars()}
042     * 2. value with invalid characters. (failure) {@link #testValueNotValidChars()}
043     * 3. value with all valid characters. Allowing white space.(success) {@link #testValueAllValidCharsAllowWhitespace()}
044     * 4. value with invalid characters Allowing white space. (failure) {@link #testValueNotValidCharsAllowWhitespace()}
045     * 5. value with invalid characters(Special Characters) Allowing white space. (failure) {@link #testValueWithSpecialCharsAllowWhitespace()}
046     *
047     * @author Kuali Rice Team (rice.collab@kuali.org)
048     */
049    public class AlphaPatternConstraintTest {
050    
051            private AttributeDefinition street1Definition;
052            private AttributeDefinition cityDefinition;
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 AlphaPatternConstraint street1AlphaPatternConstraint;
064            private AlphaPatternConstraint cityAlphaPatternConstraint;
065    
066            @Before
067            public void setUp() throws Exception {
068    
069                    processor = new ValidCharactersConstraintProcessor();
070    
071                    dictionaryValidationResult = new DictionaryValidationResult();
072                    dictionaryValidationResult.setErrorLevel(ErrorLevel.NOCONSTRAINT);
073    
074                    addressEntry = new BusinessObjectEntry();
075    
076                    List<AttributeDefinition> attributes = new ArrayList<AttributeDefinition>();
077    
078                    cityAlphaPatternConstraint = new AlphaPatternConstraint();
079            cityAlphaPatternConstraint.setMessageKey("validate.dummykey");
080            cityAlphaPatternConstraint.setValidationMessageParams( new ArrayList<String>());
081    
082                    cityDefinition = new AttributeDefinition();
083                    cityDefinition.setName("city");
084                    cityDefinition.setValidCharactersConstraint(cityAlphaPatternConstraint);
085                    attributes.add(cityDefinition);
086    
087                    street1AlphaPatternConstraint = new AlphaPatternConstraint();
088            street1AlphaPatternConstraint.setMessageKey("validate.dummykey");
089            street1AlphaPatternConstraint.setValidationMessageParams( new ArrayList<String>());
090                    street1AlphaPatternConstraint.setAllowWhitespace(true);
091    
092                    street1Definition = new AttributeDefinition();
093                    street1Definition.setName("street1");
094                    street1Definition.setValidCharactersConstraint(street1AlphaPatternConstraint);
095                    attributes.add(street1Definition);
096    
097                    addressEntry.setAttributes(attributes);
098            }
099    
100            @Test
101            public void testValueAllValidChars() {
102                    ConstraintValidationResult result = process(washingtonDCAddress, "city", cityAlphaPatternConstraint);
103                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
104                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
105                    Assert.assertEquals(ErrorLevel.OK, result.getStatus());
106                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
107            }
108    
109            @Test
110            public void testValueNotValidChars() {
111                    ConstraintValidationResult result = process(newYorkNYAddress, "city", cityAlphaPatternConstraint);
112                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
113                    Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
114                    Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
115                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
116            }
117    
118            @Test
119            public void testValueAllValidCharsAllowWhitespace() {
120                    ConstraintValidationResult result = process(newYorkNYAddress, "street1", street1AlphaPatternConstraint);
121                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
122                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
123                    Assert.assertEquals(ErrorLevel.OK, result.getStatus());
124                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
125            }
126    
127            @Test
128            public void testValueNotValidCharsAllowWhitespace() {
129                    ConstraintValidationResult result = process(washingtonDCAddress, "street1", street1AlphaPatternConstraint);
130                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
131                    Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
132                    Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
133                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
134            }
135    
136            @Test
137            public void testValueWithSpecialCharsAllowWhitespace() {
138                    ConstraintValidationResult result = process(sydneyAUSAddress, "street1", street1AlphaPatternConstraint);
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            private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) {
146                    AttributeValueReader attributeValueReader = new DictionaryObjectAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", addressEntry);
147                    attributeValueReader.setAttributeName(attributeName);
148    
149                    Object value = attributeValueReader.getValue();
150                    return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult();
151            }
152    }