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