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