001    /**
002     * Copyright 2005-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/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    
019    
020    import java.io.IOException;
021    import java.io.InputStream;
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.validation.AttributeValueReader;
029    import org.kuali.rice.krad.datadictionary.validation.ErrorLevel;
030    import org.kuali.rice.krad.datadictionary.validation.SingleAttributeValueReader;
031    import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint;
032    import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor;
033    import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult;
034    import org.kuali.rice.krad.datadictionary.validation.result.DictionaryValidationResult;
035    
036    
037    /**
038     * Things this test should check:
039     * 
040     * 1. empty value check. (failure) {@link #testValueInvalidYearEmpty()}
041     * 2. value with valid year. (success) {@link #testValueValidYear()}
042     * 3. value with valid year. (success) {@link #testValueValidYear1()}
043     * 4. value with valid year. (success) {@link #testValueValidYear2()}
044     * 5. value with invalid year. (failure) {@link testValueInvalidYear()}
045     * 6. value with invalid year. (failure) {@link testValueInvalidYear1()}
046     * 7. value with invalid year. (failure) {@link testValueInvalidYear2()}
047     * 8. value with invalid year. (failure) {@link testValueInvalidYear3()}  
048     * 
049     * @author Kuali Rice Team (rice.collab@kuali.org) 
050     */
051    public class YearPatternConstraintTest {
052            
053            private final String PATTERN_CONSTRAINT = "validationPatternRegex.year";
054    
055            private AttributeDefinition yearDefinition;
056            
057            private DictionaryValidationResult dictionaryValidationResult;
058            
059            private ValidCharactersConstraintProcessor processor;
060            
061            private String validYear;
062            private String validYear1;
063            private String validYear2;
064            private String invalidYearEmpty;
065            private String invalidYear;
066            private String invalidYear1;
067            private String invalidYear2;
068            private String invalidYear3;
069                    
070            private ConfigurationBasedRegexPatternConstraint yearPatternConstraint;         
071            
072            @Before
073            public void setUp() throws Exception {          
074                    
075                    String regex = getProperty(PATTERN_CONSTRAINT);
076                    
077                    processor = new ValidCharactersConstraintProcessor();
078                    
079                    dictionaryValidationResult = new DictionaryValidationResult();
080                    dictionaryValidationResult.setErrorLevel(ErrorLevel.NOCONSTRAINT);
081                    
082                    validYear = "1901";
083                    validYear1 = "2050";
084                    validYear2 = "1837";                                    
085                    invalidYearEmpty = "";
086                    invalidYear = "00";
087                    invalidYear1 = "337";
088                    invalidYear2 = "2300";
089                    invalidYear3 = "99999";
090                                            
091                    yearPatternConstraint = new ConfigurationBasedRegexPatternConstraint();
092                    yearPatternConstraint.setValue(regex);
093    
094                    yearDefinition = new AttributeDefinition();
095                    yearDefinition.setName("year");
096                    yearDefinition.setValidCharactersConstraint(yearPatternConstraint);                                                                                             
097            }
098            
099            @Test
100            public void testValueInvalidYearEmpty() {
101                    ConstraintValidationResult result = process(invalidYearEmpty, "year", yearPatternConstraint);
102                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
103                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
104                    Assert.assertEquals(ErrorLevel.INAPPLICABLE, result.getStatus());
105                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
106            }
107            
108            @Test
109            public void testValueValidYear() {
110                    ConstraintValidationResult result = process(validYear, "year", yearPatternConstraint);
111                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
112                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
113                    Assert.assertEquals(ErrorLevel.OK, result.getStatus());
114                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
115            }
116            
117            @Test
118            public void testValueValidYear1() {
119                    ConstraintValidationResult result = process(validYear1, "Myear", yearPatternConstraint);
120                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
121                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
122                    Assert.assertEquals(ErrorLevel.OK, result.getStatus());
123                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
124            }
125            
126            @Test
127            public void testValueValidYear2() {
128                    ConstraintValidationResult result = process(validYear2, "year", yearPatternConstraint);
129                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
130                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
131                    Assert.assertEquals(ErrorLevel.OK, result.getStatus());
132                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
133            }                               
134            
135            @Test
136            public void testValueInvalidYear() {
137                    ConstraintValidationResult result = process(invalidYear, "year", yearPatternConstraint);
138                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
139                    Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
140                    Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
141                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
142            }
143            
144            @Test
145            public void testValueInvalidYear1() {
146                    ConstraintValidationResult result = process(invalidYear1, "year", yearPatternConstraint);
147                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
148                    Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
149                    Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
150                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
151            }
152            
153            @Test
154            public void testValueInvalidYear2() {
155                    ConstraintValidationResult result = process(invalidYear2, "year", yearPatternConstraint);
156                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
157                    Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
158                    Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
159                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
160            }
161            
162            @Test
163            public void testValueInvalidYear3() {
164                    ConstraintValidationResult result = process(invalidYear3, "year", yearPatternConstraint);
165                    Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
166                    Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
167                    Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
168                    Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
169            }               
170            
171            private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) {
172                    AttributeValueReader attributeValueReader = new SingleAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", attributeName,  yearDefinition);         
173                    Object value = attributeValueReader.getValue();
174                    return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult();
175            }
176            
177            private String getProperty(String key) {
178                    String value = null;
179                    String filePath = "org/kuali/rice/krad/ApplicationResources.properties";
180                    Properties properties = new Properties();
181                    try {                   
182                            InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath);
183                            properties.load(in);
184                            value = properties.getProperty(key);                    
185                    } catch (IOException e) {               
186                    }
187                    return value;   
188            }
189    }