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    }