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
019
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.core.api.CoreConstants;
028 import org.kuali.rice.core.api.config.property.Config;
029 import org.kuali.rice.core.api.config.property.ConfigContext;
030 import org.kuali.rice.core.framework.config.property.SimpleConfig;
031 import org.kuali.rice.core.framework.config.property.SimpleConfig;
032 import org.kuali.rice.krad.datadictionary.AttributeDefinition;
033 import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader;
034 import org.kuali.rice.krad.datadictionary.validation.ErrorLevel;
035 import org.kuali.rice.krad.datadictionary.validation.SingleAttributeValueReader;
036 import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint;
037 import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor;
038 import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult;
039 import org.kuali.rice.krad.datadictionary.validation.result.DictionaryValidationResult;
040
041
042 /**
043 * Things this test should check:
044 *
045 * 1. empty value check. (failure) {@link #testValueInvalidDateEmpty()}
046 * 2. value with valid date. (success) {@link #testValueValidDate()}
047 * 3. value with valid date. (success) {@link #testValueValidDate1()}
048 * 4. value with invalid date. (failure) {@link testValueInvalidDate()}
049 * 5. value with invalid date. (failure) {@link testValueInvalidDate1()}
050 * 6. value with invalid date. (failure) {@link testValueInvalidDate2()}
051 * 7. value with invalid date. (failure) {@link testValueInvalidDate3()}
052 *
053 * @author Kuali Rice Team (rice.collab@kuali.org)
054 */
055 public class DatePatternConstraintTest {
056
057 private AttributeDefinition dateDefinition;
058
059 private DictionaryValidationResult dictionaryValidationResult;
060
061 private ValidCharactersConstraintProcessor processor;
062
063 private String validDate;
064 private String validDate1;
065 private String invalidDateEmpty;
066 private String invalidDate;
067 private String invalidDate1;
068 private String invalidDate2;
069 private String invalidDate3;
070
071 private DatePatternConstraint datePatternConstraint;
072
073 @Before
074 public void setUp() throws Exception {
075
076 String formats = "MM/dd/yy;MM/dd/yyyy;MM-dd-yy;MM-dd-yyyy";
077
078 Properties props = new Properties();
079 props.put(CoreConstants.STRING_TO_DATE_FORMATS, formats);
080 Config config = new SimpleConfig(props);
081
082 ConfigContext.init(config);
083 ConfigContext.getCurrentContextConfig().putProperty(CoreConstants.STRING_TO_DATE_FORMATS, formats);
084
085 processor = new ValidCharactersConstraintProcessor();
086
087 dictionaryValidationResult = new DictionaryValidationResult();
088 dictionaryValidationResult.setErrorLevel(ErrorLevel.NOCONSTRAINT);
089
090 validDate = "07-28-2011";
091 validDate1 = "12-31-83";
092 invalidDateEmpty = "";
093 invalidDate = "31-12-2010";
094 invalidDate1 = "31-12-2010 12:30:45.456";
095 invalidDate2 = "2011-07-28 IST";
096 invalidDate3 = "12/31/2011";
097
098 List<String> allowedFormats = new ArrayList<String>();
099 allowedFormats.add("MM-dd-yy");
100 allowedFormats.add("MM-dd-yyyy");
101
102 datePatternConstraint = new DatePatternConstraint();
103 datePatternConstraint.setAllowedFormats(allowedFormats);
104
105 dateDefinition = new AttributeDefinition();
106 dateDefinition.setName("date");
107 dateDefinition.setValidCharactersConstraint(datePatternConstraint);
108 }
109
110 @Test
111 public void testValueInvalidDateEmpty() {
112 ConstraintValidationResult result = process(invalidDateEmpty, "date", datePatternConstraint);
113 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
114 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
115 Assert.assertEquals(ErrorLevel.INAPPLICABLE, result.getStatus());
116 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
117 }
118
119 @Test
120 public void testValueValidDate() {
121 ConstraintValidationResult result = process(validDate, "date", datePatternConstraint);
122 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
123 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
124 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
125 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
126 }
127
128 @Test
129 public void testValueValidDate1() {
130 ConstraintValidationResult result = process(validDate1, "Mdate", datePatternConstraint);
131 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
132 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
133 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
134 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
135 }
136
137 @Test
138 public void testValueInvalidDate() {
139 ConstraintValidationResult result = process(invalidDate, "date", datePatternConstraint);
140 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
141 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
142 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
143 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
144 }
145
146 @Test
147 public void testValueInvalidDate1() {
148 ConstraintValidationResult result = process(invalidDate1, "date", datePatternConstraint);
149 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
150 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
151 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
152 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
153 }
154
155 @Test
156 public void testValueInvalidDate2() {
157 ConstraintValidationResult result = process(invalidDate2, "date", datePatternConstraint);
158 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
159 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
160 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
161 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
162 }
163
164 @Test
165 public void testValueInvalidDate3() {
166 ConstraintValidationResult result = process(invalidDate3, "date", datePatternConstraint);
167 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
168 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
169 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
170 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
171 }
172
173 private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) {
174 AttributeValueReader attributeValueReader = new SingleAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", attributeName, dateDefinition);
175 Object value = attributeValueReader.getValue();
176 return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult();
177 }
178 }