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    }