001 /** 002 * Copyright 2005-2013 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 import java.util.ArrayList; 019 import java.util.List; 020 021 import org.junit.Assert; 022 import org.junit.Before; 023 import org.junit.Test; 024 import org.kuali.rice.krad.datadictionary.AttributeDefinition; 025 import org.kuali.rice.krad.datadictionary.BusinessObjectEntry; 026 import org.kuali.rice.krad.datadictionary.validation.Address; 027 import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader; 028 import org.kuali.rice.krad.datadictionary.validation.DictionaryObjectAttributeValueReader; 029 import org.kuali.rice.krad.datadictionary.validation.ErrorLevel; 030 import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint; 031 import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor; 032 import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult; 033 import org.kuali.rice.krad.datadictionary.validation.result.DictionaryValidationResult; 034 035 036 /** 037 * Things this test should check: 038 * 039 * 1. value with all valid characters. (success) {@link #testValueAllValidChars()} 040 * 2. value with invalid characters. (failure) {@link #testValueNotValidChars()} 041 * 3. value with all valid characters. (success) {@link #test2ValueAllValidChars()} 042 * 4. value with invalid characters. (failure) {@link #test2ValueNotValidChars()} 043 * 044 * @author Kuali Rice Team (rice.collab@kuali.org) 045 */ 046 public class CharsetPatternConstraintTest { 047 048 private AttributeDefinition countryDefinition; 049 private AttributeDefinition postalCodeDefinition; 050 051 private BusinessObjectEntry addressEntry; 052 private DictionaryValidationResult dictionaryValidationResult; 053 054 private ValidCharactersConstraintProcessor processor; 055 056 private Address washingtonDCAddress = new Address("893 Presidential Ave", "(A_123) Suite 800.", "Washington", "DC", "NHW123A", "United States of America", null); 057 private Address newYorkNYAddress = new Address("Presidential Street", "(A-123) Suite 800", "New York", "NY", "ZH 3456", "USA", null); 058 private Address sydneyAUSAddress = new Address("Presidential Street-Ave.", "Suite_800.", "Sydney", "ZZ", "(ZH-5656)", "USA", null); 059 060 private CharsetPatternConstraint countryCharsetPatternConstraint; 061 private CharsetPatternConstraint postalCodeCharsetPatternConstraint; 062 063 @Before 064 public void setUp() throws Exception { 065 066 processor = new ValidCharactersConstraintProcessor(); 067 068 dictionaryValidationResult = new DictionaryValidationResult(); 069 dictionaryValidationResult.setErrorLevel(ErrorLevel.NOCONSTRAINT); 070 071 addressEntry = new BusinessObjectEntry(); 072 073 List<AttributeDefinition> attributes = new ArrayList<AttributeDefinition>(); 074 075 countryCharsetPatternConstraint = new CharsetPatternConstraint(); 076 countryCharsetPatternConstraint.setMessageKey("validate.dummykey"); 077 countryCharsetPatternConstraint.setValidationMessageParams( new ArrayList<String>()); 078 countryCharsetPatternConstraint.setValidChars("USA"); 079 080 countryDefinition = new AttributeDefinition(); 081 countryDefinition.setName("country"); 082 countryDefinition.setValidCharactersConstraint(countryCharsetPatternConstraint); 083 attributes.add(countryDefinition); 084 085 086 postalCodeCharsetPatternConstraint = new CharsetPatternConstraint(); 087 countryCharsetPatternConstraint.setMessageKey("validate.dummykey"); 088 countryCharsetPatternConstraint.setValidationMessageParams( new ArrayList<String>()); 089 postalCodeCharsetPatternConstraint.setValidChars("(ZH-123456)"); 090 091 postalCodeDefinition = new AttributeDefinition(); 092 postalCodeDefinition.setName("postalCode"); 093 postalCodeDefinition.setValidCharactersConstraint(postalCodeCharsetPatternConstraint); 094 attributes.add(postalCodeDefinition); 095 096 addressEntry.setAttributes(attributes); 097 } 098 099 @Test 100 public void testValueAllValidChars() { 101 ConstraintValidationResult result = process(newYorkNYAddress, "country", countryCharsetPatternConstraint); 102 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 103 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors()); 104 Assert.assertEquals(ErrorLevel.OK, result.getStatus()); 105 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 106 } 107 108 @Test 109 public void testValueNotValidChars() { 110 ConstraintValidationResult result = process(washingtonDCAddress, "country", countryCharsetPatternConstraint); 111 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 112 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 113 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 114 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 115 } 116 117 @Test 118 public void test2ValueAllValidChars() { 119 ConstraintValidationResult result = process(sydneyAUSAddress, "postalCode", postalCodeCharsetPatternConstraint); 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 test2ValueNotValidChars() { 128 ConstraintValidationResult result = process(washingtonDCAddress, "postalCode", postalCodeCharsetPatternConstraint); 129 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 130 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 131 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 132 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 133 } 134 135 private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) { 136 AttributeValueReader attributeValueReader = new DictionaryObjectAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", addressEntry); 137 attributeValueReader.setAttributeName(attributeName); 138 139 Object value = attributeValueReader.getValue(); 140 return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult(); 141 } 142 }