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.graceperiod.service;
017    
018    import java.math.BigDecimal;
019    import java.sql.Date;
020    import java.sql.Timestamp;
021    
022    import org.joda.time.DateTime;
023    import org.joda.time.DateTimeZone;
024    import org.junit.Assert;
025    import org.junit.Ignore;
026    import org.junit.Test;
027    import org.kuali.hr.test.KPMETestCase;
028    import org.kuali.hr.time.graceperiod.rule.GracePeriodRule;
029    import org.kuali.hr.time.service.base.TkServiceLocator;
030    import org.kuali.hr.time.util.TKUtils;
031    import org.kuali.rice.krad.service.KRADServiceLocator;
032    
033    public class GracePeriodRuleServiceTest extends KPMETestCase{
034    
035            @Test
036            public void testGracePeriodRuleFetch() throws Exception{
037                    GracePeriodRule gpr = new GracePeriodRule();
038                    gpr.setActive(true);
039                    gpr.setEffectiveDate(new Date(System.currentTimeMillis()));
040                    gpr.setHourFactor(new BigDecimal(0.1));
041                    
042                    KRADServiceLocator.getBusinessObjectService().save(gpr);
043                    gpr = TkServiceLocator.getGracePeriodService().getGracePeriodRule(new Date(System.currentTimeMillis()));
044                    Assert.assertTrue("fetched one rule", gpr != null);
045    
046            //cleanup
047            KRADServiceLocator.getBusinessObjectService().delete(gpr);
048            }
049            
050            @Test
051        @Ignore
052            public void testGracePeriodFetchValidation() throws Exception{
053                    //TODO: Sai - confirm maintenance page renders
054                    //TODO: Sai - confirm if hour factor is less than or equal 0 and greater than 1 it throws 
055                    //appropriate error
056                    
057            }
058            
059            @Test
060            public void testGracePeriodRuleTest() throws Exception{
061                    GracePeriodRule gpr = new GracePeriodRule();
062                    gpr.setActive(true);
063                    gpr.setEffectiveDate(new Date(System.currentTimeMillis()));
064                    gpr.setHourFactor(new BigDecimal(3));
065                    
066                    KRADServiceLocator.getBusinessObjectService().save(gpr);
067                    gpr = TkServiceLocator.getGracePeriodService().getGracePeriodRule(new Date(System.currentTimeMillis()));
068                    Assert.assertTrue("fetched one rule", gpr != null);
069    
070                    Timestamp beginDateTime = new Timestamp((new DateTime(2012, 10, 16, 12, 3, 0, 0, TKUtils.getSystemDateTimeZone())).getMillis());
071                    Timestamp derivedTimestamp = TkServiceLocator.getGracePeriodService().processGracePeriodRule(beginDateTime, new Date(System.currentTimeMillis()));
072    
073                    Assert.assertTrue("rounded to 1:03", derivedTimestamp.getMinutes()==3);
074                    
075                    beginDateTime = new Timestamp((new DateTime(2012, 10, 16, 12, 56, 0, 0, TKUtils.getSystemDateTimeZone())).getMillis());
076                    derivedTimestamp = TkServiceLocator.getGracePeriodService().processGracePeriodRule(beginDateTime, new Date(System.currentTimeMillis()));
077    
078                    Assert.assertTrue("rounded to 1:56", derivedTimestamp.getMinutes()==57);
079    
080            //cleanup
081            KRADServiceLocator.getBusinessObjectService().delete(gpr);
082            }
083    }