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 */ 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.ArrayList; 023 import java.util.Properties; 024 025 import org.junit.Assert; 026 import org.junit.Before; 027 import org.junit.Test; 028 import org.kuali.rice.krad.datadictionary.AttributeDefinition; 029 import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader; 030 import org.kuali.rice.krad.datadictionary.validation.ErrorLevel; 031 import org.kuali.rice.krad.datadictionary.validation.SingleAttributeValueReader; 032 import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint; 033 import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor; 034 import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult; 035 import 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 #testValueInvalidJavaClassEmpty()} 042 * 2. value with valid java class. (success) {@link #testValueValidJavaClass()} 043 * 3. value with valid java class. (success) {@link #testValueValidJavaClass1()} 044 * 4. value with valid java class. (success) {@link #testValueValidJavaClass2()} 045 * 5. value with invalid java class. (failure) {@link #testValueInvalidJavaClass()} 046 * 6. value with invalid java class. (failure) {@link #testValueInvalidJavaClass1()} 047 * 7. value with invalid java class. (failure) {@link #testValueInvalidJavaClass2()} 048 * 8. value with invalid java class. (failure) {@link #testValueInvalidJavaClass3()} 049 * 050 * @author Kuali Rice Team (rice.collab@kuali.org) 051 */ 052 public class JavaClassPatternConstraintTest { 053 054 private final String PATTERN_CONSTRAINT = "validationPatternRegex.javaClass"; 055 056 private AttributeDefinition javaClassDefinition; 057 058 private DictionaryValidationResult dictionaryValidationResult; 059 060 private ValidCharactersConstraintProcessor processor; 061 062 private String validJavaClass; 063 private String validJavaClass1; 064 private String validJavaClass2; 065 private String invalidJavaClassEmpty; 066 private String invalidJavaClass; 067 private String invalidJavaClass1; 068 private String invalidJavaClass2; 069 private String invalidJavaClass3; 070 071 private ConfigurationBasedRegexPatternConstraint javaClassPatternConstraint; 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 validJavaClass = Integer.class.getName(); 084 validJavaClass1 = "org.kuali.rice.krad.datadictionary.validation.constraint.JavaClassPattternConstraintTest"; 085 validJavaClass2 = "String"; 086 invalidJavaClassEmpty = ""; 087 invalidJavaClass = "123.mypackage.com"; 088 invalidJavaClass1 = "mypackage.com."; 089 invalidJavaClass2 = "123 mypackage"; 090 invalidJavaClass3 = "something.mypackage:com"; 091 092 javaClassPatternConstraint = new ConfigurationBasedRegexPatternConstraint(); 093 javaClassPatternConstraint.setMessageKey("validate.dummykey"); 094 javaClassPatternConstraint.setValidationMessageParams( new ArrayList<String>()); 095 javaClassPatternConstraint.setValue(regex); 096 097 javaClassDefinition = new AttributeDefinition(); 098 javaClassDefinition.setName("javaClass"); 099 javaClassDefinition.setValidCharactersConstraint(javaClassPatternConstraint); 100 } 101 102 @Test 103 public void testValueInvalidJavaClassEmpty() { 104 ConstraintValidationResult result = process(invalidJavaClassEmpty, "javaClass", javaClassPatternConstraint); 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 testValueValidJavaClass() { 113 ConstraintValidationResult result = process(validJavaClass, "javaClass", javaClassPatternConstraint); 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 testValueValidJavaClass1() { 122 ConstraintValidationResult result = process(validJavaClass1, "javaClass", javaClassPatternConstraint); 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 testValueValidJavaClass2() { 131 ConstraintValidationResult result = process(validJavaClass2, "javaClass", javaClassPatternConstraint); 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 testValueInvalidJavaClass() { 140 ConstraintValidationResult result = process(invalidJavaClass, "javaClass", javaClassPatternConstraint); 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 testValueInvalidJavaClass1() { 149 ConstraintValidationResult result = process(invalidJavaClass1, "javaClass", javaClassPatternConstraint); 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 testValueInvalidJavaClass2() { 158 ConstraintValidationResult result = process(invalidJavaClass2, "javaClass", javaClassPatternConstraint); 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 testValueInvalidJavaClass3() { 167 ConstraintValidationResult result = process(invalidJavaClass3, "javaClass", javaClassPatternConstraint); 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, javaClassDefinition); 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 }