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.earngroup.validation;
017
018 import java.math.BigDecimal;
019 import java.util.ArrayList;
020 import java.util.Calendar;
021 import java.util.List;
022
023 import org.apache.commons.lang.StringUtils;
024 import org.junit.Assert;
025 import org.junit.Test;
026 import org.kuali.hr.test.KPMETestCase;
027 import org.kuali.hr.time.earncode.EarnCode;
028 import org.kuali.hr.time.earncodegroup.EarnCodeGroup;
029 import org.kuali.hr.time.earncodegroup.EarnCodeGroupDefinition;
030 import org.kuali.hr.time.test.HtmlUnitUtil;
031 import org.kuali.hr.time.test.TkTestConstants;
032 import org.kuali.rice.krad.service.KRADServiceLocator;
033
034 import com.gargoylesoftware.htmlunit.html.HtmlCheckBoxInput;
035 import com.gargoylesoftware.htmlunit.html.HtmlElement;
036 import com.gargoylesoftware.htmlunit.html.HtmlInput;
037 import com.gargoylesoftware.htmlunit.html.HtmlPage;
038 import com.gargoylesoftware.htmlunit.html.HtmlTextInput;
039
040 public class EarnCodeGroupMaintenanceTest extends KPMETestCase {
041 private static final java.sql.Date TEST_DATE = new java.sql.Date(Calendar.getInstance().getTimeInMillis());
042 private static final String EARN_CODE = "RGN";
043 private static String hrEarnGroupId;
044 private static String hrEarnCodeId;
045 private static String hrEarnGroupIdRGG;
046
047 @Override
048 public void setUp() throws Exception {
049 super.setUp();
050 List<EarnCodeGroupDefinition> earnGroups = new ArrayList<EarnCodeGroupDefinition>();
051 EarnCodeGroupDefinition definition = new EarnCodeGroupDefinition();
052 definition.setEarnCode(EARN_CODE);
053 earnGroups.add(definition);
054
055 EarnCodeGroup earnGroup = new EarnCodeGroup();
056 earnGroup.setEarnCodeGroup("testGroup");
057 earnGroup.setDescr("test");
058 earnGroup.setEffectiveDate(TEST_DATE);
059 earnGroup.setShowSummary(true);
060 earnGroup.setActive(true);
061 earnGroup.setEarnCodeGroups(earnGroups);
062 KRADServiceLocator.getBusinessObjectService().save(earnGroup);
063 hrEarnGroupId = earnGroup.getHrEarnCodeGroupId();
064
065 // Set up earn code RGG in tk-earn_code_t
066 EarnCode earnCode = new EarnCode();
067 earnCode.setActive(true);
068 earnCode.setEarnCode("RGG");
069 earnCode.setEffectiveDate(TEST_DATE);
070 earnCode.setRecordMethod("T");
071 earnCode.setFractionalTimeAllowed("99");
072 earnCode.setRoundingOption("T");
073 earnCode.setEligibleForAccrual("Y");
074 earnCode.setAffectPay("Y");
075 earnCode.setAllowScheduledLeave("Y");
076 earnCode.setFmla("Y");
077 earnCode.setWorkmansComp("Y");
078 earnCode.setAllowNegativeAccrualBalance("Y");
079 earnCode.setDescription("RGG");
080 earnCode.setOvtEarnCode(false);
081 earnCode.setInflateMinHours(BigDecimal.ZERO);
082 earnCode.setInflateFactor(BigDecimal.ZERO);
083 KRADServiceLocator.getBusinessObjectService().save(earnCode);
084 hrEarnCodeId = earnCode.getHrEarnCodeId();
085
086 // Set up earn group RGG in tk-earn_group_t
087 EarnCodeGroup earnGroupRGG = new EarnCodeGroup();
088 earnGroupRGG.setEarnCodeGroup("RGG");
089 earnGroupRGG.setDescr("test RGG");
090 earnGroupRGG.setEffectiveDate(TEST_DATE);
091 earnGroupRGG.setShowSummary(true);
092 earnGroupRGG.setActive(true);
093 KRADServiceLocator.getBusinessObjectService().save(earnGroupRGG);
094 hrEarnGroupIdRGG = earnGroupRGG.getHrEarnCodeGroupId();
095 }
096
097 @Override
098 public void tearDown() throws Exception {
099 EarnCodeGroup earnGroupObj = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(EarnCodeGroup.class, hrEarnGroupId);
100 KRADServiceLocator.getBusinessObjectService().delete(earnGroupObj);
101
102 EarnCodeGroup earnGroupObjRGG = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(EarnCodeGroup.class, hrEarnGroupIdRGG);
103 KRADServiceLocator.getBusinessObjectService().delete(earnGroupObjRGG);
104
105 if (StringUtils.isNotBlank(hrEarnCodeId)) {
106 EarnCode earnCodeObj = KRADServiceLocator.getBusinessObjectService().findBySinglePrimaryKey(EarnCode.class, hrEarnCodeId);
107 KRADServiceLocator.getBusinessObjectService().delete(earnCodeObj);
108 }
109 super.tearDown();
110 }
111
112 @Test
113 public void testEditExistingEarnGroup() throws Exception {
114 HtmlPage earnGroupLookUp = HtmlUnitUtil.gotoPageAndLogin(TkTestConstants.Urls.EARN_CODE_GROUP_MAINT_URL);
115 earnGroupLookUp = HtmlUnitUtil.clickInputContainingText(earnGroupLookUp, "search");
116 Assert.assertTrue("Page contains test Earn Group", earnGroupLookUp.asText().contains("test"));
117 HtmlPage maintPage = HtmlUnitUtil.clickAnchorContainingText(earnGroupLookUp, "edit", hrEarnGroupId.toString());
118 Assert.assertTrue("Maintenance Page contains test ClockLog", maintPage.asText().contains("test"));
119 HtmlTextInput text = (HtmlTextInput) maintPage.getHtmlElementById("document.documentHeader.documentDescription");
120 text.setValueAttribute("test1");
121
122 // pull out earn group RGG to edit.
123 earnGroupLookUp = HtmlUnitUtil.gotoPageAndLogin(TkTestConstants.Urls.EARN_CODE_GROUP_MAINT_URL);
124 earnGroupLookUp = HtmlUnitUtil.clickInputContainingText(earnGroupLookUp, "search");
125 Assert.assertTrue("Page contains test Earn Group", earnGroupLookUp.asText().contains("test RGG"));
126 HtmlPage testEditRGGPage = HtmlUnitUtil.clickAnchorContainingText(earnGroupLookUp, "edit", hrEarnGroupIdRGG.toString());
127 Assert.assertTrue("Maintenance Page contains test ClockLog", testEditRGGPage.asText().contains("test RGG"));
128 text = (HtmlTextInput) testEditRGGPage.getHtmlElementById("document.documentHeader.documentDescription");
129 text.setValueAttribute("testEditRGG");
130
131 // Add a new Earn Code Group Definition
132 text = (HtmlTextInput) testEditRGGPage.getHtmlElementById("document.newMaintainableObject.add.earnCodeGroups.earnCode");
133 text.setValueAttribute("RGG");
134 HtmlElement element = HtmlUnitUtil.getInputContainingText(testEditRGGPage, "methodToCall.addLine.earnCodeGroups");
135 HtmlPage newCodeAddedPage = element.click();
136 // HtmlUnitUtil.createTempFile(newCodeAddedPage);
137 Assert.assertFalse("Page contains Error", newCodeAddedPage.asText().contains("error"));
138
139 // Delete this Earn Code Group Definition
140 // element = HtmlUnitUtil.getInputContainingText(newCodeAddedPage,"methodToCall.deleteLine.earnGroups");
141 // HtmlPage deleteCodePage = element.click();
142 // assertFalse("Page contains Error", deleteCodePage.asText().contains("error"));
143
144 // submit the changes
145 element = newCodeAddedPage.getElementByName("methodToCall.route");
146 HtmlPage finalPage = element.click();
147
148 System.out.println("Final Space is >>> "+finalPage.asText());
149 // HtmlUnitUtil.createTempFile(finalPage);
150 Assert.assertTrue("Maintenance page is submitted successfully", finalPage.asText().contains("Document was successfully submitted."));
151
152 }
153
154
155 @Test
156 //tests EarnCodeGroupValidation
157 public void testSubmitEarnGroupMaint() throws Exception {
158 String baseUrl = HtmlUnitUtil.getBaseURL() + "/kr/maintenance.do?businessObjectClassName=org.kuali.hr.time.earncodegroup.EarnCodeGroup&methodToCall=start";
159 HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(baseUrl);
160 Assert.assertNotNull(page);
161
162 HtmlTextInput text = (HtmlTextInput) page.getHtmlElementById("document.documentHeader.documentDescription");
163 text.setValueAttribute("test");
164 text = (HtmlTextInput) page.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "descr");
165 text.setValueAttribute("Test Earn Group");
166 text = (HtmlTextInput) page.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "earnCodeGroup");
167 text.setValueAttribute("Test");
168 // set an old effective date so that the earn code that's added later is not effective by that date
169 text = (HtmlTextInput) page.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "effectiveDate");
170 text.setValueAttribute("12/01/2008");
171
172 HtmlCheckBoxInput checkbox = (HtmlCheckBoxInput) page.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "showSummary");
173 checkbox.setChecked(true);
174 checkbox = (HtmlCheckBoxInput) page.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "active");
175 checkbox.setChecked(true);
176
177 // add an Earn code that is being used by another active earn group, submit, should generate error message
178 text = (HtmlTextInput) page.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "add.earnCodeGroups.earnCode");
179 text.setValueAttribute(EARN_CODE);
180 HtmlElement element = HtmlUnitUtil.getInputContainingText(page, "methodToCall.addLine.earnCodeGroups");
181 HtmlPage page1 = element.click();
182 //error for earn code not being effective by the effectiveDate of the earn group
183 System.out.println("Page1 click >>>>"+page1.asText());
184
185 Assert.assertTrue("Maintenance Page contains error messages", page1.asText().contains("The specified Earncode '" + EARN_CODE + "' does not exist."));
186
187 // set the effective date to one that works for the earn code
188 text = (HtmlTextInput) page1.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "effectiveDate");
189 text.setValueAttribute("5/01/2011");
190 element = HtmlUnitUtil.getInputContainingText(page1, "methodToCall.addLine.earnCodeGroups");
191 HtmlPage page2 = element.click();
192 Assert.assertFalse("Page contains Error", page2.asText().contains("error"));
193
194 // add the same earn code again to get the duplicate error
195 text = (HtmlTextInput) page2.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "add.earnCodeGroups.earnCode");
196 text.setValueAttribute(EARN_CODE);
197 element = HtmlUnitUtil.getInputContainingText(page2, "methodToCall.addLine.earnCodeGroups");
198 page1 = element.click();
199 Assert.assertTrue("Maintenance Page contains error messages", page1.asText().contains(EARN_CODE + " is already a part of this earngroup."));
200
201
202 element = page1.getElementByName("methodToCall.route");
203 HtmlPage finalPage = element.click();
204 // error for earn code that is being used by another earn group
205 Assert.assertTrue("Maintenance Page contains error messages", finalPage.asText().contains(EARN_CODE + " is used by another earn group - 'test'."));
206
207 //delete this earn code
208 element = HtmlUnitUtil.getInputContainingText(finalPage, "methodToCall.deleteLine.earnCodeGroups");
209 HtmlPage page3 = element.click();
210 Assert.assertFalse("Page contains Error", page3.asText().contains("error"));
211
212 //add an earn code that is not being used, submit, should get success message
213 text = (HtmlTextInput) page3.getHtmlElementById(TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "add.earnCodeGroups.earnCode");
214 text.setValueAttribute("SDR");
215 element = HtmlUnitUtil.getInputContainingText(page3, "methodToCall.addLine.earnCodeGroups");
216 page1 = element.click();
217 Assert.assertFalse("Page contains Error", page1.asText().contains("error"));
218 element = page1.getElementByName("methodToCall.route");
219 finalPage = element.click();
220 // HtmlUnitUtil.createTempFile(finalPage);
221 Assert.assertTrue("Maintenance page is submitted successfully", finalPage.asText().contains("Document was successfully submitted."));
222 Assert.assertTrue("Maintenance page is submitted successfully", finalPage.asText().contains("Status: FINAL"));
223 }
224
225 @Test
226 public void testSubmitEarnGroupWithNewerVersionMaint() throws Exception {
227 String baseUrl = HtmlUnitUtil.getBaseURL() + "/kr/maintenance.do?businessObjectClassName=org.kuali.hr.time.earncodegroup.EarnCodeGroup&methodToCall=start";
228 HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(baseUrl);
229 Assert.assertNotNull(page);
230
231 //save a Earn code
232 populateEarnGroup(page, "01/01/2011");
233 HtmlInput text = (HtmlTextInput) page.getHtmlElementById("document.newMaintainableObject.add.earnCodeGroups.earnCode");
234 text.setValueAttribute("RGH");
235 HtmlElement element = HtmlUnitUtil.getInputContainingText(page, "methodToCall.addLine.earnCodeGroups");
236 HtmlPage newCodeAddedPage = element.click();
237 // HtmlUnitUtil.createTempFile(newCodeAddedPage);
238 Assert.assertFalse("Page contains Error", newCodeAddedPage.asText().contains("error"));
239 element = newCodeAddedPage.getElementByName("methodToCall.route");
240 HtmlPage finalPage = element.click();
241
242 Assert.assertTrue("Maintenance page is submitted successfully", finalPage.asText().contains("Document was successfully submitted."));
243
244 //try to save the same Earn code with older effective date
245 page = HtmlUnitUtil.gotoPageAndLogin(baseUrl);
246 populateEarnGroup(page, "01/01/2010");
247 text = (HtmlTextInput) page.getHtmlElementById("document.newMaintainableObject.add.earnCodeGroups.earnCode");
248 text.setValueAttribute("RGH");
249 element = HtmlUnitUtil.getInputContainingText(page, "methodToCall.addLine.earnCodeGroups");
250 newCodeAddedPage = element.click();
251 Assert.assertFalse("Page contains Error", newCodeAddedPage.asText().contains("error"));
252 element = newCodeAddedPage.getElementByName("methodToCall.route");
253 finalPage = element.click();
254 Assert.assertTrue("Maintenance Page doesn't return warning about later effective date", finalPage.asText().contains("A record for this object exists with a later effective date"));
255 HtmlElement yesButton = finalPage.getElementByName("methodToCall.processAnswer.button0");
256 finalPage = yesButton.click();
257 Assert.assertTrue("Maintenance Page contains error messages", finalPage.asText().contains("There is a newer version of this Earn Group."));
258
259 }
260
261 private void populateEarnGroup(HtmlPage page, String effDateString) {
262 setFieldValue(page, "document.documentHeader.documentDescription", "test");
263 setFieldValue(page, TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "descr", "Test Earn Group");
264 setFieldValue(page, TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "earnCodeGroup", "MM");
265 setFieldValue(page, TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "effectiveDate", effDateString);
266 setFieldValue(page, TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "showSummary", "on");
267 setFieldValue(page, TkTestConstants.DOC_NEW_ELEMENT_ID_PREFIX + "active", "on");
268 }
269
270
271 }