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 }