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.missedpunch; 017 018 import static org.junit.Assert.assertNotNull; 019 import static org.junit.Assert.assertTrue; 020 021 import java.util.List; 022 023 import org.apache.log4j.Logger; 024 import org.junit.After; 025 import org.junit.Assert; 026 import org.junit.Before; 027 import org.junit.Ignore; 028 import org.junit.Test; 029 import org.kuali.hr.KPMEWebTestCase; 030 import org.kuali.hr.util.HtmlUnitUtil; 031 import org.kuali.kpme.core.FunctionalTest; 032 import org.kuali.kpme.core.util.HrTestConstants; 033 import org.kuali.kpme.tklm.utils.TkTestConstants; 034 035 import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController; 036 import com.gargoylesoftware.htmlunit.WebClient; 037 import com.gargoylesoftware.htmlunit.html.DomElement; 038 import com.gargoylesoftware.htmlunit.html.HtmlElement; 039 import com.gargoylesoftware.htmlunit.html.HtmlOption; 040 import com.gargoylesoftware.htmlunit.html.HtmlPage; 041 import com.gargoylesoftware.htmlunit.html.HtmlSelect; 042 import com.gargoylesoftware.htmlunit.html.HtmlTableDataCell; 043 import com.google.common.collect.Lists; 044 045 @FunctionalTest 046 public class MissedPunchDocumentTest extends KPMEWebTestCase { 047 private static final Logger LOG = Logger.getLogger(MissedPunchDocumentTest.class); 048 049 @Before 050 public void setUp() throws Exception { 051 super.setUp(); 052 } 053 054 @After 055 public void tearDown() throws Exception { 056 super.tearDown(); 057 } 058 059 public void updateWebClient() { 060 WebClient webClient = getWebClient(); 061 webClient.setJavaScriptEnabled(true); 062 webClient.setThrowExceptionOnScriptError(true); 063 webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 064 webClient.waitForBackgroundJavaScript(10000); 065 } 066 067 @Test 068 public void testLookup() throws Exception { 069 HtmlPage lookupPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), HrTestConstants.Urls.MISSED_PUNCH_LOOKUP_URL); 070 assertNotNull("lookup page is null", lookupPage); 071 072 assertTrue("lookup page should contain Timesheet Id field",lookupPage.asText().contains("Timesheet Document Id")); 073 assertTrue("lookup page should contain Work Area",lookupPage.asText().contains("Work Area")); 074 assertTrue("lookup page should contain Task",lookupPage.asText().contains("Task")); 075 assertTrue("lookup page should contain Clock Action",lookupPage.asText().contains("Clock Action")); 076 077 lookupPage = HtmlUnitUtil.clickInputContainingText(lookupPage, "search"); 078 assertNotNull("lookup result page is null", lookupPage); 079 080 //assertTrue("lookup page should contain 'UA Sub Obj'", lookupPage.asText().contains("UA Sub Obj")); 081 } 082 083 @Ignore 084 @Test 085 public void testMissedPunch() throws Exception { 086 087 String baseUrl = TkTestConstants.Urls.CLOCK_URL; 088 HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), baseUrl); 089 Assert.assertNotNull(page); 090 Assert.assertTrue("Clock Page contains Missed Punch Button", page.asText() 091 .contains("Missed Punch")); 092 updateWebClient(); 093 094 LOG.debug("Page is : " + page.asText()); 095 096 // getting Assignment options 097 HtmlSelect assOption = (HtmlSelect) page 098 .getElementByName("selectedAssignment"); 099 Iterable<DomElement> it = assOption.getChildElements(); 100 List<DomElement> assList = Lists.newLinkedList(it); 101 102 LOG.debug("Second ele is : "+assList.get(2)); 103 104 // set Assignment value 105 HtmlOption ho = null; 106 if(assList.size() > 2) { 107 ho = (HtmlOption) assList.get(2); 108 } else { 109 ho= (HtmlOption) assList.get(0); 110 } 111 LOG.debug("ho is : " + ho.asText()); 112 assOption.setSelectedAttribute(ho, true); 113 114 115 // get tdocid 116 HtmlTableDataCell htmlTable = (HtmlTableDataCell) page.getByXPath( 117 "//tbody//tr//td").get(9); 118 LOG.debug("htmlTable.getTextContent();" 119 + htmlTable.getTextContent()); 120 121 String docId = htmlTable.getTextContent(); 122 123 // redirect to missed punch page 124 HtmlPage mPunchPage = HtmlUnitUtil 125 .gotoPageAndLogin(getWebClient(), getBaseURL() 126 + "/missedPunch?methodToCall=start&viewId=MissedPunch-SubmitView&missedPunch.timesheetDocumentId=" 127 + docId); 128 Assert.assertNotNull(mPunchPage); 129 130 // clock action and assignment are drop down lists that are not readonly 131 HtmlElement element = (HtmlElement)mPunchPage.getElementById("document.clockAction"); 132 Assert.assertNotNull(element); 133 element = (HtmlElement)mPunchPage.getElementById("document.assignment"); 134 Assert.assertNotNull(element); 135 136 LOG.debug("Page1 is : " + mPunchPage.asText()); 137 138 // set Invalid action time 139 HtmlUnitUtil.setFieldValue(mPunchPage, "document.documentHeader.documentDescription", 140 "Missed Punch- test"); 141 HtmlUnitUtil.setFieldValue(mPunchPage, "document.clockAction", "CO"); 142 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionDate", "01/16/2012"); 143 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionTime", "5:5"); 144 HtmlUnitUtil.setFieldValue(mPunchPage, "document.assignment", "2_1234_2"); 145 146 HtmlElement elementSubmit = mPunchPage 147 .getElementByName("methodToCall.route"); 148 mPunchPage = elementSubmit.click(); 149 150 LOG.debug("After first click >>>>> page is : " 151 + mPunchPage.asText()); 152 153 Assert.assertTrue("page text:\n" + mPunchPage.asText() + "\n does not contain:\n", 154 mPunchPage.asText().contains("5:5 is not a valid time.")); 155 156 // set Future time 157 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionDate", "01/20/2020"); 158 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionTime", "5:50 AM"); 159 160 elementSubmit = mPunchPage.getElementByName("methodToCall.route"); 161 mPunchPage = elementSubmit.click(); 162 163 Assert.assertTrue( 164 "page text:\n" + mPunchPage.asText() + "\n does not contain:\n", 165 mPunchPage.asText().contains( 166 "Missed Punch Action Date cannot be a future date")); 167 168 LOG.debug("After second click >>>>> page is : " 169 + mPunchPage.asText()); 170 171 // before last clock in time 172 HtmlUnitUtil.setFieldValue(mPunchPage, "document.clockAction", "CI"); 173 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionDate", "12/20/2009"); 174 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionTime", "5:50 AM"); 175 // HtmlUnitUtil.setFieldValue(mPunchPage, "document.assignment", "2_1234_2"); 176 177 elementSubmit = mPunchPage.getElementByName("methodToCall.route"); 178 179 mPunchPage = elementSubmit.click(); 180 LOG.debug("After third click >>>>> page is : " 181 + mPunchPage.asText()); 182 183 Assert.assertTrue( 184 "page text:\n" + mPunchPage.asText() + "\n does not contain:\n", 185 mPunchPage.asText() 186 .contains( 187 "Assignment is not effective as of date chosen.")); 188 189 190 // set proper value 191 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionDate", "01/19/2012"); 192 HtmlUnitUtil.setFieldValue(mPunchPage, "document.actionTime", "5:50 AM"); 193 HtmlUnitUtil.setFieldValue(mPunchPage, "document.clockAction", "CI"); 194 // HtmlUnitUtil.setFieldValue(mPunchPage, "document.assignment", "2_1234_2"); 195 196 HtmlElement elementSubmit1 = mPunchPage.getElementByName("methodToCall.route"); 197 mPunchPage = elementSubmit1.click(); 198 199 LOG.debug("After forth click >>>>> page is : " 200 + mPunchPage.asText()); 201 202 Assert.assertTrue("page text:\n" + mPunchPage.asText() + "\n does not contain:\n", 203 mPunchPage.asText().contains("Document was successfully submitted.")); 204 205 // open another missed punch doc for clock out 206 mPunchPage = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), getBaseURL() 207 + "/missedPunch.do?methodToCall=start&viewId=MissedPunch-SubmitView&missedPunch.timesheetDocumentId=" 208 + docId); 209 Assert.assertNotNull(mPunchPage); 210 element = (HtmlElement)mPunchPage.getElementById("document.clockAction"); 211 Assert.assertNotNull(element); 212 // element not found for assignment since it is a readonly field now 213 element = (HtmlElement)mPunchPage.getElementById("document.assignment"); 214 Assert.assertNull(element); 215 Assert.assertTrue("page text:does not contain: \n", 216 mPunchPage.asText().contains("Assignment: work area description : $0.00 Rcd 2 TEST-DEPT description 2")); 217 218 } 219 220 }