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}