1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.datadictionary.validation.constraint;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21 import org.junit.Assert;
22 import org.junit.Before;
23 import org.junit.Ignore;
24 import org.junit.Test;
25 import org.kuali.rice.krad.datadictionary.AttributeDefinition;
26 import org.kuali.rice.krad.datadictionary.BusinessObjectEntry;
27 import org.kuali.rice.krad.datadictionary.validation.Account;
28 import org.kuali.rice.krad.datadictionary.validation.AttributeValueReader;
29 import org.kuali.rice.krad.datadictionary.validation.DictionaryObjectAttributeValueReader;
30 import org.kuali.rice.krad.datadictionary.validation.ErrorLevel;
31 import org.kuali.rice.krad.datadictionary.validation.processor.ValidCharactersConstraintProcessor;
32 import org.kuali.rice.krad.datadictionary.validation.result.ConstraintValidationResult;
33 import org.kuali.rice.krad.datadictionary.validation.result.DictionaryValidationResult;
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 public class FixedPointPatternConstraintTest {
56
57 private AttributeDefinition totalBalanceDefinition;
58 private AttributeDefinition debitBalanceDefinition;
59 private AttributeDefinition creditBalanceDefinition;
60
61 private BusinessObjectEntry addressEntry;
62 private DictionaryValidationResult dictionaryValidationResult;
63
64 private ValidCharactersConstraintProcessor processor;
65
66 private Account iciciAccount = new Account("11111111","ICICI","5000.00","15000","-10000");
67 private Account citibankAccount = new Account("22222222","Citi Bank","15000.70","14999.70","1.");
68 private Account wellsFargoAccount = new Account("33333333","Wells Fargo","",".25","-.25");
69 private Account morganAccount = new Account("44444444","J P Morgan","-1000.00","1000.00","-2000.00");
70
71 private FixedPointPatternConstraint totalBalanceFixedPointPatternConstraint;
72 private FixedPointPatternConstraint debitBalanceFixedPointPatternConstraint;
73 private FixedPointPatternConstraint creditBalanceFixedPointPatternConstraint;
74 private FixedPointPatternConstraint creditBalanceFixedPointPatternConstraint1;
75 private FixedPointPatternConstraint creditBalanceFixedPointPatternConstraint2;
76
77 @Before
78 public void setUp() throws Exception {
79
80 processor = new ValidCharactersConstraintProcessor();
81
82 dictionaryValidationResult = new DictionaryValidationResult();
83 dictionaryValidationResult.setErrorLevel(ErrorLevel.NOCONSTRAINT);
84
85 addressEntry = new BusinessObjectEntry();
86
87 List<AttributeDefinition> attributes = new ArrayList<AttributeDefinition>();
88
89 totalBalanceFixedPointPatternConstraint = new FixedPointPatternConstraint();
90 totalBalanceFixedPointPatternConstraint.setPrecision(6);
91 totalBalanceFixedPointPatternConstraint.setScale(2);
92
93 totalBalanceDefinition = new AttributeDefinition();
94 totalBalanceDefinition.setName("totalBalance");
95 totalBalanceDefinition.setValidCharactersConstraint(totalBalanceFixedPointPatternConstraint);
96 attributes.add(totalBalanceDefinition);
97
98 debitBalanceFixedPointPatternConstraint = new FixedPointPatternConstraint();
99 debitBalanceFixedPointPatternConstraint.setPrecision(6);
100 debitBalanceFixedPointPatternConstraint.setScale(2);
101 debitBalanceFixedPointPatternConstraint.setAllowNegative(true);
102
103 debitBalanceDefinition = new AttributeDefinition();
104 debitBalanceDefinition.setName("debitBalance");
105 debitBalanceDefinition.setValidCharactersConstraint(debitBalanceFixedPointPatternConstraint);
106 attributes.add(debitBalanceDefinition);
107
108 creditBalanceFixedPointPatternConstraint = new FixedPointPatternConstraint();
109 creditBalanceFixedPointPatternConstraint.setPrecision(0);
110 creditBalanceFixedPointPatternConstraint.setScale(0);
111
112 creditBalanceDefinition = new AttributeDefinition();
113 creditBalanceDefinition.setName("creditBalance");
114 creditBalanceDefinition.setValidCharactersConstraint(creditBalanceFixedPointPatternConstraint);
115 attributes.add(creditBalanceDefinition);
116
117 creditBalanceFixedPointPatternConstraint1 = new FixedPointPatternConstraint();
118 creditBalanceFixedPointPatternConstraint1.setPrecision(2);
119 creditBalanceFixedPointPatternConstraint1.setScale(3);
120
121 creditBalanceFixedPointPatternConstraint2 = new FixedPointPatternConstraint();
122 creditBalanceFixedPointPatternConstraint2.setPrecision(-2);
123 creditBalanceFixedPointPatternConstraint2.setScale(-3);
124
125 addressEntry.setAttributes(attributes);
126 }
127
128 @Test
129 public void testValueEmpty() {
130 ConstraintValidationResult result = process(wellsFargoAccount, "totalBalance", totalBalanceFixedPointPatternConstraint);
131 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
132 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
133 Assert.assertEquals(ErrorLevel.INAPPLICABLE, result.getStatus());
134 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
135 }
136
137 @Test
138 public void testValueValidPositiveNumber() {
139 ConstraintValidationResult result = process(iciciAccount, "totalBalance", totalBalanceFixedPointPatternConstraint);
140 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
141 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
142 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
143 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
144 }
145
146 @Ignore
147 @Test
148 public void testValueInvalidPositiveNumber() {
149 ConstraintValidationResult result = process(citibankAccount, "totalBalance", totalBalanceFixedPointPatternConstraint);
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 @Ignore
157 @Test
158 public void testValueInvalidNegativeNumber() {
159 ConstraintValidationResult result = process(morganAccount, "totalBalance", totalBalanceFixedPointPatternConstraint);
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 testValueValidNegativeNumber() {
168 ConstraintValidationResult result = process(morganAccount, "debitBalance", debitBalanceFixedPointPatternConstraint);
169 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
170 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
171 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
172 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
173 }
174
175 @Ignore
176 @Test
177 public void testValueInvalidNegativeNumber1() {
178 ConstraintValidationResult result = process(iciciAccount, "debitBalance", debitBalanceFixedPointPatternConstraint);
179 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
180 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
181 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
182 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
183 }
184
185 @Ignore
186 @Test
187 public void testValueInvalidPositiveNumber1() {
188 ConstraintValidationResult result = process(citibankAccount, "debitBalance", debitBalanceFixedPointPatternConstraint);
189 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
190 Assert.assertEquals(1, dictionaryValidationResult.getNumberOfErrors());
191 Assert.assertEquals(ErrorLevel.ERROR, result.getStatus());
192 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
193 }
194
195 @Test
196 public void testValueValidNegativeNumber1() {
197 ConstraintValidationResult result = process(wellsFargoAccount, "debitBalance", debitBalanceFixedPointPatternConstraint);
198 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
199 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
200 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
201 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
202 }
203
204 @Test(expected=java.util.regex.PatternSyntaxException.class)
205 public void testZeroPrecisionAndScale() {
206 ConstraintValidationResult result = process(wellsFargoAccount, "creditBalance", creditBalanceFixedPointPatternConstraint);
207 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
208 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
209 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
210 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
211 }
212
213 @Test(expected=java.util.regex.PatternSyntaxException.class)
214 public void testPrecisionLessThanScale() {
215 ConstraintValidationResult result = process(wellsFargoAccount, "creditBalance", creditBalanceFixedPointPatternConstraint1);
216 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
217 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
218 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
219 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
220 }
221
222 @Test(expected=java.util.regex.PatternSyntaxException.class)
223 public void testNegativePrecisionAndScale() {
224 ConstraintValidationResult result = process(wellsFargoAccount, "creditBalance", creditBalanceFixedPointPatternConstraint2);
225 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfWarnings());
226 Assert.assertEquals(0, dictionaryValidationResult.getNumberOfErrors());
227 Assert.assertEquals(ErrorLevel.OK, result.getStatus());
228 Assert.assertEquals(new ValidCharactersConstraintProcessor().getName(), result.getConstraintName());
229 }
230
231 private ConstraintValidationResult process(Object object, String attributeName, ValidCharactersConstraint constraint) {
232 AttributeValueReader attributeValueReader = new DictionaryObjectAttributeValueReader(object, "org.kuali.rice.kns.datadictionary.validation.MockAddress", addressEntry);
233 attributeValueReader.setAttributeName(attributeName);
234
235 Object value = attributeValueReader.getValue();
236 return processor.process(dictionaryValidationResult, value, constraint, attributeValueReader).getFirstConstraintValidationResult();
237 }
238 }