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