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.lm.timeoff;
017    
018    import java.text.SimpleDateFormat;
019    import java.util.Calendar;
020    
021    import org.junit.Assert;
022    import org.junit.Test;
023    import org.kuali.hr.test.KPMETestCase;
024    import org.kuali.hr.time.test.HtmlUnitUtil;
025    import org.kuali.hr.time.test.TkTestConstants;
026    
027    import com.gargoylesoftware.htmlunit.html.HtmlElement;
028    import com.gargoylesoftware.htmlunit.html.HtmlForm;
029    import com.gargoylesoftware.htmlunit.html.HtmlInput;
030    import com.gargoylesoftware.htmlunit.html.HtmlPage;
031    
032    public class SystemScheduledTimeOffMaintTest extends KPMETestCase{
033            private static final String EFFECTIVE_DATE_REQUIRED = "Effective Date (Effective Date) is a required field.";
034            private static final String LEAVE_PLAN_REQUIRED = "Leave Plan (Leave Plan) is a required field.";
035            private static final String ACCRUAL_CATEGORY_REQUIRED = "Accrual Category (Accrual Category) is a required field.";
036            private static final String EARN_CODE_REQUIRED = "Earn Code (Earn Code) is a required field.";
037            private static final String ACCRUED_DATE_REQUIRED = "Accrued Date (Accrued Date) is a required field.";
038            private static final String LOCATION_REQUIRED = "Location (Location) is a required field.";
039            private static final String DESCRIPTION_REQUIRED = "Description (Desc) is a required field.";
040            private static final String AMOUNT_OF_TIME_REQUIRED = "Amount of Time (Amount of Time) is a required field.";
041            private static final String PREMIUM_HOLIDAY_REQUIRED = "Premium Holiday (Premium Holiday) is a required field.";
042            private static final String ACCRUED_DATE_PAST_ERROR = "'Accrued Date' needs to be a future date.";
043            private static final String SCHEDULED_TO_DATE_PAST_ERROR = "'Scheduled Time Off Date' needs to be a future date.";
044            private static final String SUCCESS_MESSAGE = "Document was successfully submitted.";
045            private static final String ERROR_LEAVE_CODE = "The specified earnCode 'testLCL' does not exist";
046            
047            @Test
048            public void testRequiredFields() throws Exception {
049                    String baseUrl = TkTestConstants.Urls.TIME_OFF_MAINT_NEW_URL;
050                    HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), baseUrl);
051                    Assert.assertNotNull(page);
052             
053                    HtmlForm form = page.getFormByName("KualiForm");
054                    Assert.assertNotNull("Search form was missing from page.", form);
055                    
056                    HtmlInput  input  = HtmlUnitUtil.getInputContainingText(form, "methodToCall.route");
057                    Assert.assertNotNull("Could not locate submit button", input);
058                    //default value for premium holiday is no
059                    Assert.assertTrue("Preminum Holiday is not default to No", page.getHtmlElementById("document.newMaintainableObject.premiumHolidayNo").asText().equals("checked"));
060                                    
061                    HtmlElement element = page.getElementByName("methodToCall.route");
062                    page = element.click();
063                    Assert.assertTrue("page text does not contain:\n" + EFFECTIVE_DATE_REQUIRED, page.asText().contains(EFFECTIVE_DATE_REQUIRED));
064                Assert.assertTrue("page text does not contain:\n" + LEAVE_PLAN_REQUIRED, page.asText().contains(LEAVE_PLAN_REQUIRED));
065                Assert.assertTrue("page text does not contain:\n" + ACCRUAL_CATEGORY_REQUIRED, page.asText().contains(ACCRUAL_CATEGORY_REQUIRED));
066                Assert.assertTrue("page text does not contain:\n" + EARN_CODE_REQUIRED, page.asText().contains(EARN_CODE_REQUIRED));
067                
068                Assert.assertTrue("page text does not contain:\n" + ACCRUED_DATE_REQUIRED, page.asText().contains(ACCRUED_DATE_REQUIRED));
069                Assert.assertTrue("page text does not contain:\n" + LOCATION_REQUIRED, page.asText().contains(LOCATION_REQUIRED));
070                Assert.assertTrue("page text does not contain:\n" + DESCRIPTION_REQUIRED, page.asText().contains(DESCRIPTION_REQUIRED));
071                Assert.assertTrue("page text does not contain:\n" + AMOUNT_OF_TIME_REQUIRED, page.asText().contains(AMOUNT_OF_TIME_REQUIRED));
072                //there should be a default value for premium holiday
073                Assert.assertFalse("page text contains:\n" + PREMIUM_HOLIDAY_REQUIRED, page.asText().contains(PREMIUM_HOLIDAY_REQUIRED));
074            }
075            
076            @Test
077            public void testLookupPage() throws Exception {  
078                    HtmlPage sstoLookup = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), TkTestConstants.Urls.TIME_OFF_MAINT_URL);
079                    sstoLookup = HtmlUnitUtil.clickInputContainingText(sstoLookup, "search");
080                    HtmlUnitUtil.createTempFile(sstoLookup);
081                    Assert.assertTrue("Page contains test SystemScheduledTimeOff", sstoLookup.asText().contains("TLC"));
082                    Assert.assertTrue("Page contains test SystemScheduledTimeOff", sstoLookup.asText().contains("EC"));
083                    Assert.assertFalse("Page contains test SystemScheduledTimeOff", sstoLookup.asText().contains("InactiveLP"));
084    
085                    HtmlPage maintPage = HtmlUnitUtil.clickAnchorContainingText(sstoLookup, "edit");
086                    Assert.assertTrue("Maintenance Page contains test SystemScheduledTimeOff",maintPage.asText().contains("EC"));   
087            }
088            
089            @Test
090            public void testErrorMessages() throws Exception {
091                    String baseUrl = TkTestConstants.Urls.TIME_OFF_MAINT_NEW_URL;
092                    HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), baseUrl);
093                    Assert.assertNotNull(page);
094             
095                    HtmlForm form = page.getFormByName("KualiForm");
096                    Assert.assertNotNull("Search form was missing from page.", form);
097                    setFieldValue(page, "document.documentHeader.documentDescription", "System Scheduled Time Off - test");
098                    // use past dates
099                setFieldValue(page, "document.newMaintainableObject.effectiveDate", "04/01/2011");
100                setFieldValue(page, "document.newMaintainableObject.accruedDate", "04/01/2011");
101                setFieldValue(page, "document.newMaintainableObject.scheduledTimeOffDate", "04/01/2011");
102                    
103                    HtmlInput  input  = HtmlUnitUtil.getInputContainingText(form, "methodToCall.route");
104                    Assert.assertNotNull("Could not locate submit button", input);
105                    HtmlElement element = page.getElementByName("methodToCall.route");
106                    page = element.click();
107                    Assert.assertTrue("page text does not contain:\n" + TkTestConstants.EFFECTIVE_DATE_ERROR, page.asText().contains(TkTestConstants.EFFECTIVE_DATE_ERROR));
108                    Assert.assertTrue("page text does not contain:\n" + ACCRUED_DATE_PAST_ERROR, page.asText().contains(ACCRUED_DATE_PAST_ERROR));
109                    Assert.assertTrue("page text does not contain:\n" + SCHEDULED_TO_DATE_PAST_ERROR, page.asText().contains(SCHEDULED_TO_DATE_PAST_ERROR));
110            }
111            
112            @Test
113            // test for jiar1363
114            public void testGetLeavePlanAccrualCategoryFromSelectedEarnCode() throws Exception {
115                    String baseUrl = TkTestConstants.Urls.TIME_OFF_MAINT_NEW_URL;
116                    HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), baseUrl);
117                    Assert.assertNotNull(page);
118             
119                    HtmlForm form = page.getFormByName("KualiForm");
120                    Assert.assertNotNull("Search form was missing from page.", form);       
121                    
122                    Calendar validDate = Calendar.getInstance();
123                    // add 150 days in the future, need to add dates instead of month 
124                    // because if we happen to be running the test on the 31 of a month, some future months do not have 31st 
125                    validDate.add(Calendar.DATE, 150);      
126                    String validDateString = new SimpleDateFormat("MM/dd/yyyy").format(validDate.getTime());
127    
128            setFieldValue(page, "document.documentHeader.documentDescription", "something clever...");
129                    setFieldValue(page, "document.newMaintainableObject.effectiveDate", validDateString);
130                setFieldValue(page, "document.newMaintainableObject.earnCode", "EC");
131            setFieldValue(page, "document.newMaintainableObject.descr", "this is my description");
132            setFieldValue(page, "document.newMaintainableObject.amountofTime", "8");
133            setFieldValue(page, "document.newMaintainableObject.location", "CST");
134            setFieldValue(page, "document.newMaintainableObject.accruedDate", validDateString);
135                
136                page = ((HtmlElement)page.getElementByName("methodToCall.route")).click();
137                HtmlUnitUtil.createTempFile(page);
138                Assert.assertTrue("page text contains:\n" + "testLP", page.asText().contains("testLP"));
139                Assert.assertTrue("page text contains:\n" + "testAC", page.asText().contains("testAC"));
140            }
141            
142            @Test
143            //test for jiar1363
144            public void testValidateLeaveCode() throws Exception {
145                    String baseUrl = TkTestConstants.Urls.TIME_OFF_MAINT_NEW_URL;
146                    HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), baseUrl);
147                    Assert.assertNotNull(page);
148             
149                    HtmlForm form = page.getFormByName("KualiForm");
150                    Assert.assertNotNull("Search form was missing from page.", form);       
151                    
152                    Calendar validDate = Calendar.getInstance();
153                    // add 150 days in the future, need to add dates instead of month 
154                    // because if we happen to be running the test on the 31 of a month, some future months do not have 31st 
155                    validDate.add(Calendar.DATE, 150);      
156                    String validDateString = new SimpleDateFormat("MM/dd/yyyy").format(validDate.getTime());
157                    
158                    setFieldValue(page, "document.newMaintainableObject.effectiveDate", validDateString);
159                    setFieldValue(page, "document.newMaintainableObject.earnCode", "testLCL"); 
160                
161                page = ((HtmlElement)page.getElementByName("methodToCall.route")).click();
162                HtmlUnitUtil.createTempFile(page);
163                Assert.assertTrue("page text does not contain:\n" + ERROR_LEAVE_CODE, page.asText().contains(ERROR_LEAVE_CODE));
164            }
165    }