001 /**
002 * Copyright 2004-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.kpme.tklm.leave.payout;
017
018 import static org.junit.Assert.assertEquals;
019 import static org.junit.Assert.assertNull;
020 import static org.junit.Assert.assertTrue;
021
022 import java.math.BigDecimal;
023
024 import org.joda.time.LocalDate;
025 import org.junit.After;
026 import org.junit.Before;
027 import org.junit.Test;
028 import org.kuali.kpme.core.IntegrationTest;
029 import org.kuali.kpme.core.calendar.entry.CalendarEntry;
030 import org.kuali.kpme.core.util.TKUtils;
031 import org.kuali.kpme.tklm.TKLMIntegrationTestCase;
032 import org.kuali.kpme.tklm.leave.block.LeaveBlock;
033 import org.kuali.kpme.tklm.leave.calendar.LeaveCalendarDocument;
034 import org.kuali.kpme.tklm.leave.service.LmServiceLocator;
035 import org.kuali.kpme.tklm.leave.summary.LeaveSummary;
036 import org.kuali.kpme.tklm.leave.summary.LeaveSummaryRow;
037 import org.kuali.kpme.tklm.time.timesheet.TimesheetDocument;
038 import org.kuali.rice.krad.util.ObjectUtils;
039
040 @IntegrationTest
041 public class LeavePayoutServiceTest extends TKLMIntegrationTestCase {
042
043 /**
044 * Leave Calendar Document Test data
045 */
046 private final String USER_ID = "testUser1";
047
048 private LeaveCalendarDocument janLCD;
049 private CalendarEntry janEntry;
050 private LeaveCalendarDocument decLCD;
051 private CalendarEntry decEntry;
052
053 private LocalDate janStart;
054 private LocalDate decStart;
055
056 private final String JAN_ID = "5001";
057 private final String DEC_ID = "5000";
058
059 /**
060 * Timesheet Document Test Data;
061 */
062
063 private final String TS_USER_ID = "testUser2";
064
065 private TimesheetDocument endJanTSD;
066 private CalendarEntry endJanTSDEntry;
067 private TimesheetDocument midJanTSD;
068 private CalendarEntry midJanTSDEntry;
069 private TimesheetDocument endDecTSD;
070 private CalendarEntry endDecTSDEntry;
071 private TimesheetDocument midDecTSD;
072 private CalendarEntry midDecTSDEntry;
073
074 private final String TSD_MID_DEC_PERIOD_ID = "5000";
075 private final String TSD_END_DEC_PERIOD_ID = "5001";
076 private final String TSD_MID_JAN_PERIOD_ID = "5002";
077 private final String TSD_END_JAN_PERIOD_ID = "5003";
078
079 /**
080 * Common data
081 */
082
083 private final String OD_XFER = "5000";
084 private final String YE_XFER = "5001";
085 private final String LA_XFER = "5002";
086 private final String OD_XFER_MAC = "5003";
087 private final String YE_XFER_MAC = "5004";
088 private final String LA_XFER_MAC = "5005";
089 private final String OD_LOSE = "5006";
090 private final String YE_LOSE = "5007";
091 private final String LA_LOSE = "5008";
092 private final String OD_LOSE_MAC = "5009";
093 private final String YE_LOSE_MAC = "5010";
094 private final String LA_LOSE_MAC = "5011";
095 private final String YE_XFER_EO = "5012";
096 private final LocalDate LM_FROM = TKUtils.formatDateString("11/01/2012");
097 private final LocalDate LM_TO = TKUtils.formatDateString("02/01/2013");
098 private final LocalDate TK_FROM = TKUtils.formatDateString("11/01/2011");
099 private final LocalDate TK_TO = TKUtils.formatDateString("02/01/2012");
100
101 @Before
102 public void setUp() throws Exception {
103 super.setUp();
104 LmServiceLocator.getAccrualService().runAccrual(USER_ID,LM_FROM.toDateTimeAtStartOfDay(),LM_TO.toDateTimeAtStartOfDay(),true,USER_ID);
105 janLCD = LmServiceLocator.getLeaveCalendarService().getLeaveCalendarDocument(JAN_ID);
106 janEntry = janLCD.getCalendarEntry();
107 janStart = janEntry.getBeginPeriodFullDateTime().toLocalDate();
108 decLCD = LmServiceLocator.getLeaveCalendarService().getLeaveCalendarDocument(DEC_ID);
109 decEntry = decLCD.getCalendarEntry();
110 decStart = decEntry.getBeginPeriodFullDateTime().toLocalDate();
111 }
112
113 @After
114 public void tearDown() throws Exception {
115 super.tearDown();
116 }
117
118 /*****************************
119 * Use-case specific testing *
120 ****************************/
121
122 //
123 // ACTION_AT_MAX_BALANCE = TRANSFER
124 //
125
126 @Test
127 public void testInitializePayoutNullAccrualRule() throws Exception {
128 LeavePayout lp = new LeavePayout();
129
130 LocalDate effectiveDate = decStart.plusDays(3);
131 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, null, BigDecimal.ZERO, effectiveDate);
132 assertNull(lp);
133 }
134
135 @Test
136 public void testInitializePayoutNullLeaveSummary() throws Exception {
137 LeavePayout lp = new LeavePayout();
138
139 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, OD_XFER, null, LocalDate.now());
140 assertNull(lp);
141 }
142
143 @Test
144 public void testInitializePayoutNullAccrualRuleNullLeaveSummary() {
145 LeavePayout lp = new LeavePayout();
146 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, null, null, LocalDate.now());
147 assertNull(lp);
148 }
149
150 @Test
151 public void testInitializePayoutOnDemand() throws Exception {
152 LeavePayout lp = new LeavePayout();
153 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, decEntry);
154 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(OD_XFER);
155 LocalDate effectiveDate = decStart.plusDays(3);
156 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, OD_XFER, aRow.getAccruedBalance(), effectiveDate);
157 assertEquals("payoutOnDemand payout amount", (new BigDecimal(1)).longValue(), lp.getPayoutAmount().longValue());
158 assertEquals("payoutOnDemand forfeited amount",(new BigDecimal(0)).longValue(), lp.getForfeitedAmount().longValue());
159 ////assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(0.5)).longValue(), lp.getAmountPayoutred().longValue());
160 }
161
162 @Test
163 public void testInitializePayoutOnDemandWithForfeiture() throws Exception {
164 LeavePayout lp = new LeavePayout();
165 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
166 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(OD_XFER);
167 LocalDate effectiveDate = janStart.plusDays(3);
168 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, OD_XFER, aRow.getAccruedBalance(), effectiveDate);
169 assertEquals("payoutOnDemand payout amount", (new BigDecimal(10)).longValue(), lp.getPayoutAmount().longValue());
170 assertEquals("payoutOnDemand forfeited amount", (new BigDecimal(7)).longValue(), lp.getForfeitedAmount().longValue());
171 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(5)).longValue(), lp.getAmountPayoutred().longValue());
172 }
173
174 @Test
175 public void testInitializePayoutOnYearEnd() throws Exception {
176 LeavePayout lp = new LeavePayout();
177 LmServiceLocator.getLeaveBlockService().deleteLeaveBlocksForDocumentId(DEC_ID);
178 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
179 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(YE_XFER);
180 LocalDate effectiveDate = janStart.plusDays(3);
181 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_XFER, aRow.getAccruedBalance(), effectiveDate);
182 assertEquals("payoutOnDemand payout amount", (new BigDecimal(1)).longValue(), lp.getPayoutAmount().longValue());
183 assertEquals("payoutOnDemand forfeited amount",(new BigDecimal(0)).longValue(), lp.getForfeitedAmount().longValue());
184 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(0.5)).longValue(), lp.getAmountPayoutred().longValue());
185 }
186
187 @Test
188 public void testInitializePayoutOnYearEndWithForfeiture() throws Exception {
189 LeavePayout lp = new LeavePayout();
190 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
191 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(YE_XFER);
192 LocalDate effectiveDate = janStart.plusDays(3);
193 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_XFER, aRow.getAccruedBalance(), effectiveDate);
194 assertEquals("payoutOnDemand payout amount", (new BigDecimal(10)).longValue(), lp.getPayoutAmount().longValue());
195 assertEquals("payoutOnDemand forfeited amount", (new BigDecimal(7)).longValue(), lp.getForfeitedAmount().longValue());
196 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(5)).longValue(), lp.getAmountPayoutred().longValue());
197 }
198
199 @Test
200 public void testInitializePayoutOnLeaveApprove() throws Exception {
201 LeavePayout lp = new LeavePayout();
202 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, decEntry);
203 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(LA_XFER);
204 LocalDate effectiveDate = decStart.plusDays(3);
205 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, LA_XFER, aRow.getAccruedBalance(), effectiveDate);
206 assertEquals("payoutOnDemand payout amount", (new BigDecimal(1)).longValue(), lp.getPayoutAmount().longValue());
207 assertEquals("payoutOnDemand forfeited amount",(new BigDecimal(0)).longValue(), lp.getForfeitedAmount().longValue());
208 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(0.5)).longValue(), lp.getAmountPayoutred().longValue());
209 }
210
211 @Test
212 public void testInitializePayoutOnLeaveApproveWithForfeiture() throws Exception {
213 LeavePayout lp = new LeavePayout();
214 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
215 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(LA_XFER);
216 LocalDate effectiveDate = janStart.plusDays(3);
217 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, LA_XFER, aRow.getAccruedBalance(), effectiveDate);
218 assertEquals("payoutOnDemand payout amount", (new BigDecimal(10)).longValue(), lp.getPayoutAmount().longValue());
219 assertEquals("payoutOnDemand forfeited amount", (new BigDecimal(7)).longValue(), lp.getForfeitedAmount().longValue());
220 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(5)).longValue(), lp.getAmountPayoutred().longValue());
221 }
222
223 @Test
224 public void testInitializePayoutOnDemandMaxCarryOver() throws Exception {
225 //N/A - Max Carry Over on Year End payouts.
226 LeavePayout lp = new LeavePayout();
227 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, decEntry);
228 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(OD_XFER_MAC);
229 LocalDate effectiveDate = decStart.plusDays(3);
230 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, OD_XFER_MAC, aRow.getAccruedBalance(), effectiveDate);
231 assertEquals("payoutOnDemand payout amount", (new BigDecimal(1)).longValue(), lp.getPayoutAmount().longValue());
232 assertEquals("payoutOnDemand forfeited amount",(new BigDecimal(0)).longValue(), lp.getForfeitedAmount().longValue());
233 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(0.5)).longValue(), lp.getAmountPayoutred().longValue());
234 }
235
236 @Test
237 public void testInitializePayoutOnYearEndMaxCarryOver() throws Exception {
238 /**
239 * decEntry is not the last calendar entry in the leave plan. Want to check amounts for this action & action frequency
240 * without exceeding the payout limit.
241 *
242 * max payout amount = 10
243 * leave balance = 16
244 * max balance = 15
245 * max carry over = 10
246 *
247 * all excess should be payoutrable. 1 unit of time for excess over max balance, 5 units of time for
248 * excess over max carry over.
249 *
250 */
251 LeavePayout lp = new LeavePayout();
252 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, decEntry);
253 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(YE_XFER_MAC);
254 LocalDate effectiveDate = decStart.plusDays(3);
255 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_XFER_MAC, aRow.getAccruedBalance(), effectiveDate);
256 assertEquals("payoutOnDemand payout amount", (new BigDecimal(6)).longValue(), lp.getPayoutAmount().longValue());
257 assertEquals("payoutOnDemand forfeited amount", (new BigDecimal(0)).longValue(), lp.getForfeitedAmount().longValue());
258 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(3)).longValue(), lp.getAmountPayoutred().longValue());
259 }
260
261 /* @Test
262 public void testInitializePayoutUnderMaxBalanceOnYearEndMaxCarryOver() throws Exception {
263 //Create a leave block that will bring the available balance for january down to 14.
264 //this balance would be under the max available balance (15), but over the max annual carry over amount.
265 //i.o.w., this payout would not due to max balance limit, but max annual carry over.
266 //could also simply change the accrual amount.
267 LeaveBlock usage = new LeaveBlock();
268 usage.setAccrualCategory(YE_XFER_MAC);
269 usage.setLeaveLocalDate(LocalDate effectiveDate = janStart.plusDays(5););
270 usage.setLeaveAmount(new BigDecimal(-18));
271 usage.setPrincipalId(USER_ID);
272 usage.setAccrualGenerated(false);
273 usage.setRequestStatus(HrConstants.REQUEST_STATUS.APPROVED);
274 usage.setDocumentId(janLCD.getDocumentId());
275 usage.setLmLeaveBlockId("99999");
276 usage.setEarnCode("EC5");
277 usage.setBlockId(0L);
278 usage.setLeaveBlockType(LMConstants.LEAVE_BLOCK_TYPE.LEAVE_CALENDAR);
279 List<LeaveBlock> leaveBlocks = new ArrayList<LeaveBlock>();
280 leaveBlocks.add(usage);
281 LmServiceLocator.getLeaveBlockService().saveLeaveBlocks(leaveBlocks);
282
283 LeavePayout lp = new LeavePayout();
284 janLCD = LmServiceLocator.getLeaveCalendarService().getLeaveCalendarDocument(JAN_ID);
285 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janLCD.getCalendarEntry());
286 LocalDate effectiveDate = LocalDate effectiveDate = janStart.plusDays(3);
287 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_XFER_MAC, aRow.getAccruedBalance(), effectiveDate);
288 assertEquals("payoutOnDemand payout amount", (new BigDecimal(4)).longValue(), lp.getPayoutAmount().longValue());
289 assertEquals("payoutOnDemand forfeited amount", (new BigDecimal(0)).longValue(), lp.getForfeitedAmount().longValue());
290 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(2)).longValue(), lp.getAmountPayoutred().longValue());
291 }*/
292
293 @Test
294 public void testInitializePayoutOnYearEndMaxCarryOverWithForfeiture() throws Exception {
295 //max bal limit reached and max annual carry over triggererd.
296 LeavePayout lp = new LeavePayout();
297 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
298 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(YE_XFER_MAC);
299 LocalDate effectiveDate = janStart.plusDays(3);
300 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_XFER_MAC, aRow.getAccruedBalance(), effectiveDate);
301 assertEquals("payoutOnDemand payout amount", (new BigDecimal(10)).longValue(), lp.getPayoutAmount().longValue());
302 assertEquals("payoutOnDemand forfeited amount", (new BigDecimal(12)).longValue(), lp.getForfeitedAmount().longValue());
303 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(5)).longValue(), lp.getAmountPayoutred().longValue());
304 }
305
306 @Test
307 public void testInitializePayoutOnLeaveApproveMaxCarryOver() throws Exception {
308 LeavePayout lp = new LeavePayout();
309 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, decEntry);
310 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(LA_XFER_MAC);
311 LocalDate effectiveDate = decStart.plusDays(3);
312 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, LA_XFER_MAC, aRow.getAccruedBalance(), effectiveDate);
313 assertEquals("payoutOnDemand payout amount", (new BigDecimal(1)).longValue(), lp.getPayoutAmount().longValue());
314 assertEquals("payoutOnDemand forfeited amount",(new BigDecimal(0)).longValue(), lp.getForfeitedAmount().longValue());
315 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(0.5)).longValue(), lp.getAmountPayoutred().longValue());
316 }
317
318 @Test
319 public void testInitializePayoutWithOverrides() throws Exception {
320 LeavePayout lp = new LeavePayout();
321 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
322 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(YE_XFER_EO);
323 LocalDate effectiveDate = janStart.plusDays(3);
324 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_XFER_EO, aRow.getAccruedBalance(), effectiveDate);
325 assertEquals("payoutOnDemand payout amount", (new BigDecimal(7)).longValue(), lp.getPayoutAmount().longValue());
326 assertEquals("payoutOnDemand forfeited amount",(new BigDecimal(20)).longValue(), lp.getForfeitedAmount().longValue());
327 // max balance payout conversion factor is undefined for YE_XFER_EO
328 //assertEquals("payoutOnDemand amount payoutred", (new BigDecimal(7)).longValue(), lp.getAmountPayoutred().longValue());
329 }
330 /**
331 * End Use-case testing
332 */
333
334 @Test
335 public void testPayoutNullLeavePayout() {
336 LeavePayout LeavePayout = null;
337 try {
338 LeavePayout = LmServiceLocator.getLeavePayoutService().payout(LeavePayout);
339 } catch (RuntimeException re) {
340 assertTrue(re.getMessage().contains("did not supply a valid LeavePayout object"));
341 }
342 }
343
344 @Test
345 public void testPayoutWithZeroPayoutAmount() throws Exception {
346 LeavePayout lp = new LeavePayout();
347 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
348 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(YE_LOSE);
349 LocalDate effectiveDate = janStart.plusDays(3);
350 //lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_LOSE, aRow.getAccruedBalance(), effectiveDate);
351 lp.setPayoutAmount(BigDecimal.ZERO);
352 lp = LmServiceLocator.getLeavePayoutService().payout(lp);
353 LeaveBlock forfeitedLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getForfeitedLeaveBlockId());
354 LeaveBlock payoutLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getPayoutLeaveBlockId());
355 LeaveBlock payoutFromLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getPayoutFromLeaveBlockId());
356 assertTrue("forfeited leave block should not exist", ObjectUtils.isNull(forfeitedLeaveBlock));
357 assertTrue("accrued leave block should not exist",ObjectUtils.isNull(payoutLeaveBlock));
358 assertTrue("debited leave block should not exist",ObjectUtils.isNull(payoutFromLeaveBlock));
359 }
360
361 @Test
362 public void testPayoutWithZeroForfeiture() throws Exception {
363 LeavePayout lp = new LeavePayout();
364 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, decEntry);
365 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(OD_XFER);
366 LocalDate effectiveDate = decStart.plusDays(3);
367 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, OD_XFER, aRow.getAccruedBalance(), effectiveDate);
368 lp = LmServiceLocator.getLeavePayoutService().payout(lp);
369 LeaveBlock forfeitedLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getForfeitedLeaveBlockId());
370 LeaveBlock payoutLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getPayoutLeaveBlockId());
371 LeaveBlock payoutFromLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getPayoutFromLeaveBlockId());
372 assertEquals("accrued leave block leave amount incorrect", (new BigDecimal(1)).longValue(), payoutLeaveBlock.getLeaveAmount().longValue());
373 assertTrue("forfeited leave block should not exist",ObjectUtils.isNull(forfeitedLeaveBlock));
374 assertEquals("payouted leave block leave amount incorrect", (new BigDecimal(-1)).longValue(), payoutFromLeaveBlock.getLeaveAmount().longValue());
375 }
376
377 @Test
378 public void testPayoutWithThreeLeaveBlocks() throws Exception {
379 LeavePayout lp = new LeavePayout();
380 LeaveSummary summary = LmServiceLocator.getLeaveSummaryService().getLeaveSummary(USER_ID, janEntry);
381 LeaveSummaryRow aRow = summary.getLeaveSummaryRowForAccrualCategory(YE_XFER);
382 LocalDate effectiveDate = janStart.plusDays(3);
383 lp = LmServiceLocator.getLeavePayoutService().initializePayout(USER_ID, YE_XFER, aRow.getAccruedBalance(), effectiveDate);
384 lp = LmServiceLocator.getLeavePayoutService().payout(lp);
385 LeaveBlock forfeitedLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getForfeitedLeaveBlockId());
386 LeaveBlock payoutLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getPayoutLeaveBlockId());
387 LeaveBlock payoutFromLeaveBlock = LmServiceLocator.getLeaveBlockService().getLeaveBlock(lp.getPayoutFromLeaveBlockId());
388 assertEquals("forfeited leave block leave amount incorrect", (new BigDecimal(-7)).longValue(), forfeitedLeaveBlock.getLeaveAmount().longValue());
389 assertEquals((new BigDecimal(10)).longValue(), payoutLeaveBlock.getLeaveAmount().longValue());
390 assertEquals((new BigDecimal(-10)).longValue(), payoutFromLeaveBlock.getLeaveAmount().longValue());
391 }
392
393 //TODO: write tests for adjusted max balance cases - i.e. FTE < 1, employee override's w/ type MAX_BALANCE
394
395 @Test
396 public void testSubmitToWorkflow() {
397 assertNull(null);
398 }
399
400 }