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.hr.time.shiftdiff;
017    
018    import java.math.BigDecimal;
019    
020    import org.joda.time.LocalDate;
021    import org.junit.Assert;
022    import org.junit.Test;
023    import org.kuali.hr.KPMEWebTestCase;
024    import org.kuali.hr.util.HtmlUnitUtil;
025    import org.kuali.kpme.core.FunctionalTest;
026    import org.kuali.kpme.tklm.time.rules.shiftdifferential.ShiftDifferentialRule;
027    import org.kuali.kpme.tklm.utils.TkTestConstants;
028    import org.kuali.rice.krad.service.KRADServiceLocator;
029    
030    import com.gargoylesoftware.htmlunit.html.HtmlElement;
031    import com.gargoylesoftware.htmlunit.html.HtmlForm;
032    import com.gargoylesoftware.htmlunit.html.HtmlInput;
033    import com.gargoylesoftware.htmlunit.html.HtmlPage;
034    
035    @FunctionalTest
036    public class ShiftDifferentialRuleMaintTest extends KPMEWebTestCase{
037            private static final String TEST_CODE="_T";
038                    
039            private static final BigDecimal TEST_NO=new BigDecimal(2);
040            private static String shiftDifferentialRuleId;
041    
042            
043            
044            @Test
045            public void testShiftDifferentialRuleMaint() throws Exception {  
046                    HtmlPage shiftDifferentialRuleLookup = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), TkTestConstants.Urls.SHIFT_DIFFERENTIAL_RULE_MAINT_URL);
047                    shiftDifferentialRuleLookup = HtmlUnitUtil.clickInputContainingText(shiftDifferentialRuleLookup, "search");
048                    Assert.assertTrue("Page contains test Shift Differential Rule", shiftDifferentialRuleLookup.asText().contains(TEST_CODE.toString()));
049                    HtmlPage maintPage = HtmlUnitUtil.clickAnchorContainingText(shiftDifferentialRuleLookup, "edit",shiftDifferentialRuleId.toString());
050                    Assert.assertTrue("Maintenance Page contains test ShiftDifferentialRule",maintPage.asText().contains(TEST_CODE));        
051            }
052            
053            @Test
054            public void testRequiredFields() throws Exception {
055                    String baseUrl = TkTestConstants.Urls.SHIFT_DIFFERENTIAL_RULE_MAINT_NEW_URL;
056                    HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), baseUrl);
057                    Assert.assertNotNull(page);
058             
059                    HtmlForm form = page.getFormByName("KualiForm");
060                    Assert.assertNotNull("Search form was missing from page.", form);
061                    
062                    HtmlInput  input  = HtmlUnitUtil.getInputContainingText(form, "methodToCall.route");
063                    Assert.assertNotNull("Could not locate submit button", input);
064                    
065                    HtmlElement element = page.getElementByName("methodToCall.route");
066                    page = element.click();
067                    // the following fields should have default values
068                    String errorMessage = "Min. Hours (Min. Hours) is a required field.";
069                    Assert.assertFalse("page text contains:\n" + errorMessage, page.asText().contains(errorMessage));
070                errorMessage = "Begin Time (00:00 AM) (Begin Time) is a required field.";
071                Assert.assertFalse("page text contains:\n" + errorMessage, page.asText().contains(errorMessage));
072                errorMessage = "End Time (00:00 AM) (End Time) is a required field.";
073                Assert.assertFalse("page text contains:\n" + errorMessage, page.asText().contains(errorMessage));
074                errorMessage = "Max. Gap Minutes (Max. Gap Minutes) is a required field.";
075                Assert.assertFalse("page text contains:\n" + errorMessage, page.asText().contains(errorMessage));
076                    
077                //remove the default values
078                    HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.minHours", "");
079                    HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.beginTime", "");
080                    HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.endTime", "");
081                    HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.maxGap", "");
082                    element = page.getElementByName("methodToCall.route");
083                    HtmlPage nextPage = element.click();
084                    errorMessage = "Effective Date (Effective Date) is a required field.";
085                    Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
086                errorMessage = "Location (Location) is a required field.";
087                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
088                errorMessage = "Salary Group (Salary Group) is a required field.";
089                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
090                errorMessage = "Pay Grade (Pay Grade) is a required field.";
091                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
092                errorMessage = "Earn Code (Earn Code) is a required field.";
093                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
094                errorMessage = "From Earn Group (From Earn Group) is a required field.";
095                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
096                errorMessage = "Begin Time (00:00 AM) (Begin Time) is a required field.";
097                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
098                errorMessage = "End Time (00:00 AM) (End Time) is a required field.";
099                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
100                errorMessage = "Max. Gap Minutes (Max. Gap Minutes) is a required field.";
101                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
102                errorMessage = "Pay Calendar Group (Pay Calendar Group) is a required field.";
103                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
104                errorMessage = "Min. Hours (Min. Hours) is a required field.";
105                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
106                errorMessage = "At least one day must be checked."; // KPME-2635
107                Assert.assertTrue("page text does not contain:\n" + errorMessage, nextPage.asText().contains(errorMessage));
108            }
109    
110    
111            @Override
112            public void setUp() throws Exception {
113                    super.setUp();
114    
115                    ShiftDifferentialRule shiftDifferentialRule = new ShiftDifferentialRule();
116                    shiftDifferentialRule.setActive(true);
117                    //shiftDifferentialRule.setBeginTime(TEST_TIME);
118                    shiftDifferentialRule.setEarnCode(TEST_CODE);
119                    shiftDifferentialRule.setEffectiveLocalDate(LocalDate.now().minusDays(1));
120                    //shiftDifferentialRule.setEndTime(TEST_TIME);
121                    shiftDifferentialRule.setLocation(TEST_CODE);
122                    shiftDifferentialRule.setMaxGap(new BigDecimal(2));
123                    shiftDifferentialRule.setMinHours(TEST_NO);
124                    shiftDifferentialRule.setPayGrade(TEST_CODE);   
125                    shiftDifferentialRule.setPyCalendarGroup("BW-CAL");
126                    shiftDifferentialRule.setSunday(true);  
127                    shiftDifferentialRule.setMonday(true);
128                    shiftDifferentialRule.setTuesday(true);
129                    shiftDifferentialRule.setWednesday(true);
130                    shiftDifferentialRule.setThursday(true);
131                    shiftDifferentialRule.setFriday(true);
132                    shiftDifferentialRule.setSaturday(true);
133                    shiftDifferentialRule.setPyCalendarGroup("TEST");
134                    
135                    ShiftDifferentialRule rule = KRADServiceLocator.getBusinessObjectService().save(shiftDifferentialRule);
136                    shiftDifferentialRuleId = rule.getTkShiftDiffRuleId();
137            }
138    
139            @Override
140            public void tearDown() throws Exception {                               
141                    ShiftDifferentialRule shiftDifferentialRuleObj = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(ShiftDifferentialRule.class, shiftDifferentialRuleId);             
142                    KRADServiceLocator.getBusinessObjectService().delete(shiftDifferentialRuleObj);
143                    super.tearDown();
144            }
145    }
146