001 /** 002 * Copyright 2004-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.hr.time.department.lunch.rule; 017 018 import java.math.BigDecimal; 019 import java.sql.Date; 020 import java.util.Calendar; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.joda.time.DateTime; 024 import org.junit.Assert; 025 import org.junit.Test; 026 import org.kuali.hr.test.KPMETestCase; 027 import org.kuali.hr.time.dept.lunch.DeptLunchRule; 028 import org.kuali.hr.time.service.base.TkServiceLocator; 029 import org.kuali.hr.time.test.TkTestUtils; 030 import org.kuali.hr.time.timeblock.TimeBlock; 031 import org.kuali.hr.time.timeblock.TimeHourDetail; 032 import org.kuali.hr.time.timesheet.TimesheetDocument; 033 import org.kuali.hr.time.util.TKContext; 034 import org.kuali.hr.time.util.TKUser; 035 import org.kuali.hr.time.util.TKUtils; 036 import org.kuali.hr.time.util.TkConstants; 037 import org.kuali.rice.kim.api.identity.Person; 038 import org.kuali.rice.kim.api.services.KimApiServiceLocator; 039 import org.kuali.rice.krad.service.KRADServiceLocator; 040 041 public class DepartmentLunchRuleTest extends KPMETestCase { 042 private Date JAN_AS_OF_DATE = new Date((new DateTime(2010, 1, 1, 0, 0, 0, 0, TKUtils.getSystemDateTimeZone())).getMillis()); 043 044 @Test 045 public void testDepartmentLunchRuleFetch() throws Exception{ 046 DeptLunchRule deptLunchRule = new DeptLunchRule(); 047 deptLunchRule.setActive(true); 048 deptLunchRule.setDept("TEST"); 049 deptLunchRule.setWorkArea(1234L); 050 deptLunchRule.setEffectiveDate(JAN_AS_OF_DATE); 051 deptLunchRule.setJobNumber(0L); 052 deptLunchRule.setPrincipalId("admin"); 053 deptLunchRule.setDeductionMins(new BigDecimal(30)); 054 deptLunchRule.setShiftHours(new BigDecimal(6)); 055 deptLunchRule.setTkDeptLunchRuleId("1001"); 056 057 KRADServiceLocator.getBusinessObjectService().save(deptLunchRule); 058 059 deptLunchRule = TkServiceLocator.getDepartmentLunchRuleService().getDepartmentLunchRule("TEST", 060 1234L, "admin", 0L, JAN_AS_OF_DATE); 061 Assert.assertTrue("dept lunch rule fetched ", deptLunchRule!=null); 062 063 } 064 065 /** 066 * Test if the minute deduction rule is applied correctly if there is a valid department lunch rule 067 */ 068 069 @Test 070 public void testDepartmentLunchRule() throws Exception { 071 // create a dept lunch rule 072 DeptLunchRule deptLunchRule = new DeptLunchRule(); 073 deptLunchRule.setActive(true); 074 deptLunchRule.setDept("TEST-DEPT"); 075 deptLunchRule.setWorkArea(1234L); 076 Calendar cal = Calendar.getInstance(); 077 cal.set(2010, 1, 1); 078 deptLunchRule.setEffectiveDate(JAN_AS_OF_DATE); 079 deptLunchRule.setJobNumber(1L); 080 deptLunchRule.setPrincipalId("edna"); 081 deptLunchRule.setDeductionMins(new BigDecimal(30)); 082 deptLunchRule.setShiftHours(new BigDecimal(6)); 083 deptLunchRule.setTkDeptLunchRuleId("1001"); 084 085 KRADServiceLocator.getBusinessObjectService().save(deptLunchRule); 086 087 deptLunchRule = TkServiceLocator.getDepartmentLunchRuleService().getDepartmentLunchRule("TEST-DEPT", 088 1234L, "edna", 1L, JAN_AS_OF_DATE); 089 Assert.assertTrue("dept lunch rule fetched ", deptLunchRule!=null); 090 091 String testUserId = KimApiServiceLocator.getIdentityService().getPrincipalByPrincipalName("edna").getPrincipalId(); 092 TKUser.setTargetPerson(testUserId); 093 094 TimesheetDocument doc = TkTestUtils.populateTimesheetDocument(JAN_AS_OF_DATE); 095 096 for(TimeBlock tb : doc.getTimeBlocks()){ 097 tb.setClockLogCreated(true); 098 } 099 //reset time block 100 //TkServiceLocator.getTimesheetService().resetTimeBlock(doc.getTimeBlocks()); 101 //TkServiceLocator.getTkRuleControllerService().applyRules(TkConstants.ACTIONS.ADD_TIME_BLOCK, doc.getTimeBlocks(), doc.getCalendarEntry(), doc, "admin"); 102 for(TimeBlock tb : doc.getTimeBlocks()) { 103 if(tb.getHours().compareTo(deptLunchRule.getShiftHours()) == 1) { 104 for(TimeHourDetail thd : tb.getTimeHourDetails()){ 105 // this assumes the hours for the dummy timeblocks are always 10 106 if(!StringUtils.equals(thd.getEarnCode(), TkConstants.LUNCH_EARN_CODE)){ 107 Assert.assertEquals(new BigDecimal(9.50).setScale(2), tb.getHours()); 108 } 109 } 110 } 111 } 112 113 } 114 115 /*@Override 116 public void tearDown() throws Exception { 117 TKUser.clearTargetUser(); 118 super.tearDown(); 119 }*/ 120 }