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