1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.service;
17
18 import org.junit.Test;
19 import org.kuali.rice.core.api.CoreApiServiceLocator;
20 import org.kuali.rice.core.api.datetime.DateTimeService;
21 import org.kuali.rice.krad.bo.InactivatableFromTo;
22 import org.kuali.rice.krad.bo.TravelAccountUseRate;
23 import org.kuali.rice.krad.test.KRADTestCase;
24 import org.kuali.rice.krad.util.KRADPropertyConstants;
25 import org.kuali.rice.test.BaselineTestCase;
26 import org.kuali.rice.test.data.PerTestUnitTestData;
27 import org.kuali.rice.test.data.UnitTestData;
28 import org.kuali.rice.test.data.UnitTestFile;
29 import org.kuali.rice.test.data.UnitTestSql;
30
31 import java.sql.Date;
32 import java.sql.Timestamp;
33 import java.util.ArrayList;
34 import java.util.Collection;
35 import java.util.HashMap;
36 import java.util.List;
37 import java.util.Map;
38
39 import static org.junit.Assert.assertEquals;
40 import static org.junit.Assert.assertTrue;
41
42
43
44
45
46
47
48
49
50 @PerTestUnitTestData(
51 value = @UnitTestData(
52 order = {UnitTestData.Type.SQL_STATEMENTS, UnitTestData.Type.SQL_FILES},
53 sqlStatements = {
54 @UnitTestSql("delete from trv_acct_use_rt_t")
55 },
56 sqlFiles = {
57 @UnitTestFile(filename = "classpath:testAccountUseRate.sql", delimiter = ";")
58 }
59 ),
60 tearDown = @UnitTestData(
61 sqlStatements = {
62 @UnitTestSql("delete from trv_acct_use_rt_t")
63 }
64 )
65 )
66 @BaselineTestCase.BaselineMode(BaselineTestCase.Mode.CLEAR_DB)
67 public class InactivateableFromToServiceTest extends KRADTestCase {
68
69 protected <T> Collection<T> findCollectionBySearchUnbounded(Class<T> clazz, Map<String, String> formProps) {
70 return KRADServiceLocatorWeb.getLookupService().findCollectionBySearchUnbounded(clazz, formProps);
71 }
72
73 protected InactivateableFromToService getInactivateableFromToService() {
74 return KRADServiceLocator.getInactivateableFromToService();
75 }
76
77
78
79
80
81
82 @Test
83 public void testFindMatchingActive() throws Exception {
84 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
85
86 Map fieldValues = new HashMap();
87 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2010");
88 fieldValues.put("number", "a2");
89
90 List<InactivatableFromTo> results = inactivateableFromToService.findMatchingActive(TravelAccountUseRate.class,
91 fieldValues);
92 assertEquals(2, results.size());
93
94 TravelAccountUseRate useRate = (TravelAccountUseRate) results.get(0);
95 assertTrue("Incorrect active records returned, do not match expected ids",
96 "2".equals(useRate.getId()) || "3".equals(useRate.getId()));
97
98 useRate = (TravelAccountUseRate) results.get(1);
99 assertTrue("Incorrect active records returned, do not match expected ids",
100 "2".equals(useRate.getId()) || "3".equals(useRate.getId()));
101
102 fieldValues = new HashMap();
103 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2010");
104 fieldValues.put("number", "a1");
105
106 results = inactivateableFromToService.findMatchingActive(TravelAccountUseRate.class, fieldValues);
107 assertEquals(1, results.size());
108
109 useRate = (TravelAccountUseRate) results.get(0);
110 assertTrue("Incorrect active record returned, does not match expected id", "1".equals(useRate.getId()));
111
112 fieldValues = new HashMap();
113 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "01/01/2010 01:31 PM");
114 fieldValues.put("number", "b1");
115
116 results = inactivateableFromToService.findMatchingActive(TravelAccountUseRate.class, fieldValues);
117 assertEquals(1, results.size());
118
119 useRate = (TravelAccountUseRate) results.get(0);
120 assertTrue("Incorrect active record returned, does not match expected id", "9".equals(useRate.getId()));
121 }
122
123
124
125
126 @Test
127 public void testFindMatchingActive_inactive() throws Exception {
128 Map fieldValues = new HashMap();
129 fieldValues.put(KRADPropertyConstants.ACTIVE, "N");
130 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2010");
131 fieldValues.put("number", "a2");
132
133 List<? extends InactivatableFromTo> results = (List<? extends InactivatableFromTo>) findCollectionBySearchUnbounded(TravelAccountUseRate.class,
134 fieldValues);
135 assertEquals(1, results.size());
136
137 TravelAccountUseRate useRate = (TravelAccountUseRate) results.get(0);
138 assertTrue("Incorrect inactive record returned, does not match expected id",
139 "4".equals(useRate.getId()));
140
141 fieldValues = new HashMap();
142 fieldValues.put(KRADPropertyConstants.ACTIVE, "N");
143 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "07/01/2010");
144 fieldValues.put("number", "a3");
145
146 results = (List<? extends InactivatableFromTo>) findCollectionBySearchUnbounded(TravelAccountUseRate.class, fieldValues);
147 assertEquals(1, results.size());
148
149 useRate = (TravelAccountUseRate) results.get(0);
150 assertTrue("Incorrect inactive record returned, does not match expected id", "5".equals(useRate.getId()));
151 }
152
153
154
155
156
157
158 @Test
159 public void testFindMatchingActive_nullBeginDate() throws Exception {
160 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
161
162 Map fieldValues = new HashMap();
163 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2010");
164 fieldValues.put("number", "a4");
165
166 List<? extends InactivatableFromTo> results = inactivateableFromToService.findMatchingActive(TravelAccountUseRate.class,
167 fieldValues);
168 assertEquals(1, results.size());
169
170 TravelAccountUseRate useRate = (TravelAccountUseRate) results.get(0);
171 assertTrue("Incorrect inactive record returned, does not match expected id", "6".equals(useRate.getId()));
172
173 fieldValues = new HashMap();
174 fieldValues.put(KRADPropertyConstants.ACTIVE, "N");
175 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2010");
176 fieldValues.put("number", "a4");
177
178 results = (List<? extends InactivatableFromTo>) findCollectionBySearchUnbounded(TravelAccountUseRate.class, fieldValues);
179 assertEquals(0, results.size());
180 }
181
182
183
184
185
186
187 @Test
188 public void testFindMatchingActive_nullEndDate() throws Exception {
189 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
190
191 Map fieldValues = new HashMap();
192 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2030");
193 fieldValues.put("number", "a5");
194
195 List<InactivatableFromTo> results = inactivateableFromToService.findMatchingActive(TravelAccountUseRate.class,
196 fieldValues);
197 assertEquals(1, results.size());
198
199 TravelAccountUseRate useRate = (TravelAccountUseRate) results.get(0);
200 assertTrue("Incorrect active record returned, does not match expected id", "7".equals(useRate.getId()));
201 }
202
203
204
205
206
207
208 @Test
209 public void testFindMatchingActive_nullBeginEndDate() throws Exception {
210 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
211
212 Map fieldValues = new HashMap();
213 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2010");
214 fieldValues.put("number", "a6");
215
216 List<InactivatableFromTo> results = inactivateableFromToService.findMatchingActive(TravelAccountUseRate.class,
217 fieldValues);
218 assertEquals(1, results.size());
219
220 TravelAccountUseRate useRate = (TravelAccountUseRate) results.get(0);
221 assertTrue("Incorrect active record returned, does not match expected id", "8".equals(useRate.getId()));
222 }
223
224
225
226
227
228
229 @Test
230 public void testFilterOutNonActive() throws Exception {
231 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
232
233 List<InactivatableFromTo> filterList = new ArrayList<InactivatableFromTo>();
234 filterList.add(constructUseRate("1", "a1", "01/01/2010", "01/01/2011"));
235 filterList.add(constructUseRate("2", "a1", "01/01/2012", "01/01/2013"));
236 filterList.add(constructUseRate("3", "a2", "01/01/2009", "01/01/2010"));
237 filterList.add(constructUseRate("4", "a3", "01/01/2010", "05/16/2010"));
238 filterList.add(constructUseRate("5", "a4", null, "01/01/2011"));
239
240 Date activeAsOfDate = CoreApiServiceLocator.getDateTimeService().convertToSqlDate("06/01/2010");
241 List<InactivatableFromTo> accessibleList = inactivateableFromToService.filterOutNonActive(filterList,
242 activeAsOfDate);
243 assertEquals(2, accessibleList.size());
244
245 TravelAccountUseRate useRate = (TravelAccountUseRate) accessibleList.get(0);
246 assertTrue("Incorrect active records returned, do not match expected ids", "1".equals(useRate.getId()) || "5".equals(useRate.getId()));
247
248 useRate = (TravelAccountUseRate) accessibleList.get(1);
249 assertTrue("Incorrect active records returned, do not match expected ids", "1".equals(useRate.getId()) || "5".equals(useRate.getId()));
250 }
251
252
253
254
255
256
257 @Test
258 public void testFindMatchingCurrent() throws Exception {
259 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
260
261 Map fieldValues = new HashMap();
262 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "06/01/2010");
263 fieldValues.put("number", "a2");
264
265 List<InactivatableFromTo> results = inactivateableFromToService.findMatchingCurrent(TravelAccountUseRate.class,
266 fieldValues);
267 assertEquals(1, results.size());
268
269
270 TravelAccountUseRate result = (TravelAccountUseRate)results.get(0);
271 assertEquals("Incorrect current record returned, does not match expected id", "3", result.getId());
272
273 fieldValues = new HashMap();
274 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "02/01/2010");
275 fieldValues.put("number", "a2");
276
277 results = inactivateableFromToService.findMatchingCurrent(TravelAccountUseRate.class,
278 fieldValues);
279 assertEquals(1, results.size());
280
281
282 result = (TravelAccountUseRate) results.get(0);
283 assertEquals("Incorrect current record returned, does not match expected id", "2", result.getId());
284 }
285
286
287
288
289
290
291 @Test
292 public void testFindMatchingNonCurrent() throws Exception {
293 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
294
295 Map fieldValues = new HashMap();
296 fieldValues.put(KRADPropertyConstants.ACTIVE_AS_OF_DATE, "04/01/2010");
297 fieldValues.put("number", "a2");
298
299 List<InactivatableFromTo> results = inactivateableFromToService.findMatchingActive(TravelAccountUseRate.class,
300 fieldValues);
301 assertEquals(2, results.size());
302
303 TravelAccountUseRate useRate = (TravelAccountUseRate) results.get(0);
304 assertTrue("Incorrect active records returned, do not match expected ids",
305 "2".equals(useRate.getId()) || "3".equals(useRate.getId()));
306
307 useRate = (TravelAccountUseRate) results.get(1);
308 assertTrue("Incorrect active records returned, do not match expected ids",
309 "2".equals(useRate.getId()) || "3".equals(useRate.getId()));
310
311 List<InactivatableFromTo> nonCurrent = inactivateableFromToService.filterOutNonCurrent(results, CoreApiServiceLocator.getDateTimeService().convertToSqlDate("04/01/2010"));
312
313
314 fieldValues.put(KRADPropertyConstants.ACTIVE, "true");
315 fieldValues.put(KRADPropertyConstants.CURRENT, "true");
316 Collection<TravelAccountUseRate> nonCurrentLookup = findCollectionBySearchUnbounded(TravelAccountUseRate.class, fieldValues);
317
318 assertEquals(nonCurrent.size(), nonCurrentLookup.size());
319 List<TravelAccountUseRate> nonCurrentLookupList = new ArrayList<TravelAccountUseRate>(nonCurrentLookup);
320 for (int i = 0; i < nonCurrent.size(); i++) {
321 TravelAccountUseRate expected = (TravelAccountUseRate) nonCurrent.get(i);
322 TravelAccountUseRate actual = nonCurrentLookupList.get(i);
323
324 assertEquals(expected.getId(), actual.getId());
325 assertEquals(expected.getRate(), actual.getRate());
326 assertEquals(expected.getActiveFromDate(), actual.getActiveFromDate());
327 assertEquals(expected.getActiveToDate(), actual.getActiveToDate());
328 }
329 }
330
331
332
333
334
335
336 @Test
337 public void testFilterOutNonCurrent() throws Exception {
338 InactivateableFromToService inactivateableFromToService = getInactivateableFromToService();
339
340 List<InactivatableFromTo> filterList = new ArrayList<InactivatableFromTo>();
341 filterList.add(constructUseRate("1", "a1", "01/01/2010", "01/01/2011"));
342 filterList.add(constructUseRate("2", "a1", "01/16/2010", "01/01/2011"));
343 filterList.add(constructUseRate("3", "a1", "01/01/2012", "01/01/2013"));
344 filterList.add(constructUseRate("4", "a2", "01/01/2009", "01/01/2010"));
345 filterList.add(constructUseRate("5", "a3", "01/01/2010", "05/16/2011"));
346 filterList.add(constructUseRate("6", "a3", "06/01/2010", "05/16/2011"));
347
348 Date activeAsOfDate = CoreApiServiceLocator.getDateTimeService().convertToSqlDate("06/10/2010");
349 List<InactivatableFromTo> accessibleList = inactivateableFromToService.filterOutNonCurrent(filterList,
350 activeAsOfDate);
351 assertEquals(2, accessibleList.size());
352
353 TravelAccountUseRate useRate = (TravelAccountUseRate) accessibleList.get(0);
354 assertTrue("Incorrect curren records returned, do not match expected ids",
355 "2".equals(useRate.getId()) || "6".equals(useRate.getId()));
356
357 useRate = (TravelAccountUseRate) accessibleList.get(1);
358 assertTrue("Incorrect curren records returned, do not match expected ids",
359 "2".equals(useRate.getId()) || "6".equals(useRate.getId()));
360 }
361
362 protected TravelAccountUseRate constructUseRate(String id, String number, String fromDate, String toDate)
363 throws Exception {
364 TravelAccountUseRate useRate = new TravelAccountUseRate();
365
366 DateTimeService dateTimeService = CoreApiServiceLocator.getDateTimeService();
367 useRate.setId(id);
368 useRate.setNumber(number);
369 if (fromDate != null) {
370 useRate.setActiveFromDate(new Timestamp(dateTimeService.convertToSqlDate(fromDate).getTime()));
371 }
372 if (toDate != null) {
373 useRate.setActiveToDate(new Timestamp(dateTimeService.convertToSqlDate(toDate).getTime()));
374 }
375
376 return useRate;
377 }
378 }