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