001/** 002 * Copyright 2005-2016 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.util.ArrayList; 021import java.util.List; 022import java.util.Properties; 023 024import org.junit.Assert; 025import org.junit.Before; 026import org.junit.Test; 027import org.kuali.rice.core.api.CoreConstants; 028import org.kuali.rice.core.api.config.property.Config; 029import org.kuali.rice.core.api.config.property.ConfigContext; 030import org.kuali.rice.core.framework.config.property.SimpleConfig; 031import org.kuali.rice.core.framework.config.property.SimpleConfig; 032import org.kuali.rice.krad.datadictionary.AttributeDefinition; 033import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader; 034import org.kuali.rice.krad.datadictionary.validation.ErrorLevel; 035import org.kuali.rice.krad.datadictionary.validation.SingleAttributeValueReader; 036import org.kuali.rice.krad.datadictionary.validation.constraint.ValidCharactersConstraint; 037import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor; 038import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult; 039import 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 */ 055public 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.setMessageKey("validate.dummykey"); 104 datePatternConstraint.setValidationMessageParams( new ArrayList<String>()); 105 datePatternConstraint.setAllowedFormats(allowedFormats); 106 107 dateDefinition = new AttributeDefinition(); 108 dateDefinition.setName("date"); 109 dateDefinition.setValidCharactersConstraint(datePatternConstraint); 110 } 111 112 @Test 113 public void testValueInvalidDateEmpty() { 114 ConstraintValidationResult result = process(invalidDateEmpty, "date", datePatternConstraint); 115 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 116 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors()); 117 Assert.assertEquals(ErrorLevel.INAPPLICABLE, result.getStatus()); 118 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 119 } 120 121 @Test 122 public void testValueValidDate() { 123 ConstraintValidationResult result = process(validDate, "date", datePatternConstraint); 124 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 125 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors()); 126 Assert.assertEquals(ErrorLevel.OK, result.getStatus()); 127 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 128 } 129 130 @Test 131 public void testValueValidDate1() { 132 ConstraintValidationResult result = process(validDate1, "Mdate", datePatternConstraint); 133 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 134 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors()); 135 Assert.assertEquals(ErrorLevel.OK, result.getStatus()); 136 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 137 } 138 139 @Test 140 public void testValueInvalidDate() { 141 ConstraintValidationResult result = process(invalidDate, "date", datePatternConstraint); 142 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 143 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 144 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 145 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 146 } 147 148 @Test 149 public void testValueInvalidDate1() { 150 ConstraintValidationResult result = process(invalidDate1, "date", datePatternConstraint); 151 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 152 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 153 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 154 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 155 } 156 157 @Test 158 public void testValueInvalidDate2() { 159 ConstraintValidationResult result = process(invalidDate2, "date", datePatternConstraint); 160 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 161 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 162 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 163 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 164 } 165 166 @Test 167 public void testValueInvalidDate3() { 168 ConstraintValidationResult result = process(invalidDate3, "date", datePatternConstraint); 169 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings()); 170 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors()); 171 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus()); 172 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName()); 173 } 174 175 private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) { 176 AttributeValueReader attributeValueReader = new SingleAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", attributeName, dateDefinition); 177 Object value = attributeValueReader.getValue(); 178 return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult(); 179 } 180}