001/**
002 * Copyright 2004-2014 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 */
016package org.kuali.hr.time.collection;
017
018import java.util.Collections;
019import java.util.Random;
020
021import org.joda.time.LocalDate;
022import org.junit.Assert;
023import org.junit.Test;
024import org.kuali.hr.KPMEWebTestCase;
025import org.kuali.hr.util.HtmlUnitUtil;
026import org.kuali.kpme.core.FunctionalTest;
027import org.kuali.kpme.core.department.Department;
028import org.kuali.kpme.core.service.HrServiceLocator;
029import org.kuali.kpme.core.util.TKUtils;
030import org.kuali.kpme.tklm.time.rules.timecollection.TimeCollectionRule;
031import org.kuali.kpme.tklm.time.service.TkServiceLocator;
032import org.kuali.kpme.tklm.utils.TkTestConstants;
033import org.kuali.rice.krad.service.KRADServiceLocator;
034
035import com.gargoylesoftware.htmlunit.html.HtmlInput;
036import com.gargoylesoftware.htmlunit.html.HtmlPage;
037
038@FunctionalTest
039public class TimeCollectionRuleMaintTest extends KPMEWebTestCase {
040
041        private static final String TEST_CODE = "X";
042        private static final LocalDate TEST_DATE = LocalDate.now();
043        private static final String TEST_CODE_DEPARTMENT_VALID = "_test";
044
045        private static String timeCollectionRuleId;
046        private static String timeCollectionRuleIdWithInvalidWorkArea;
047
048        private static String TEST_CODE_INVALID_DEPT = "INVALID_DEPT";
049        private static Long TEST_CODE_INVALID_WORKAREA = 2L;
050        private static String PAY_TYPE_ERROR = "The specified payType '%' does not exist.";
051
052        /**
053         * Test to check whether it is showing error message on maintenance screen
054         * if we supply non exist deptId
055         *
056         * @throws Exception
057         */
058        @Test
059        public void testTimeCollectionRuleMaintForDeptErrorMessage() throws Exception {
060                String baseUrl = TkTestConstants.Urls.TIME_COLLECTION_RULE_MAINT_NEW_URL;
061                HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(getWebClient(), baseUrl);
062                HtmlInput inputForDescription = HtmlUnitUtil.getInputContainingText(page, "* Document Description");
063                inputForDescription.setValueAttribute("Description");
064                
065                HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.effectiveDate", "01/01/2010");
066                HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.dept", TEST_CODE_INVALID_DEPT);
067                HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.workArea", "30");
068                HtmlUnitUtil.setFieldValue(page, "document.newMaintainableObject.payType", "BW");
069                HtmlPage resultantPageAfterEdit = HtmlUnitUtil
070                                .clickInputContainingText(page, "submit");
071                HtmlUnitUtil.createTempFile(resultantPageAfterEdit);
072                Assert.assertTrue("Maintenance Page contains test timeCollectionRule",
073                                resultantPageAfterEdit.asText().contains(
074                                                "The specified department '"
075                                                                + TEST_CODE_INVALID_DEPT
076                                                                + "' does not exist."));
077                
078                HtmlUnitUtil.setFieldValue(resultantPageAfterEdit, "document.newMaintainableObject.payType", "%");
079                resultantPageAfterEdit = HtmlUnitUtil.clickInputContainingText(resultantPageAfterEdit, "submit");
080                Assert.assertFalse("Maintenance Page contains error" + PAY_TYPE_ERROR, 
081                                resultantPageAfterEdit.asText().contains(PAY_TYPE_ERROR));
082                
083        }
084
085
086        @Test
087        public void testTimeCollectionRuleMaintForWorkAreaErrorMessage() throws Exception {
088                HtmlPage timeCollectionRuleLookup = HtmlUnitUtil
089                                .gotoPageAndLogin(getWebClient(), TkTestConstants.Urls.TIME_COLLECTION_RULE_MAINT_URL);
090                timeCollectionRuleLookup = HtmlUnitUtil.clickInputContainingText(
091                                timeCollectionRuleLookup, "search");
092                Assert.assertTrue("Page contains test timeCollectionRule",
093                                timeCollectionRuleLookup.asText().contains(TEST_CODE));
094                HtmlPage maintPage = HtmlUnitUtil.clickAnchorContainingText(
095                                timeCollectionRuleLookup, "edit",
096                                timeCollectionRuleIdWithInvalidWorkArea.toString());
097                HtmlUnitUtil.createTempFile(maintPage);
098                HtmlInput inputForDescription = HtmlUnitUtil.getInputContainingText(
099                                maintPage, "* Document Description");
100                inputForDescription.setValueAttribute("Description");
101                HtmlPage resultantPageAfterEdit = HtmlUnitUtil
102                                .clickInputContainingText(maintPage, "submit");
103                Assert.assertTrue("Maintenance Page contains test timeCollectionRule",
104                                resultantPageAfterEdit.asText().contains(
105                                                "The specified workarea '"
106                                                                + TEST_CODE_INVALID_WORKAREA
107                                                                + "' does not exist."));
108        }
109
110        /**
111         * Test to load maint. screen
112         *
113         * @throws Exception
114         */
115        @Test
116        public void testTimeCollectionRuleMaint() throws Exception {
117                HtmlPage timeCollectionRuleLookup = HtmlUnitUtil
118                                .gotoPageAndLogin(getWebClient(), TkTestConstants.Urls.TIME_COLLECTION_RULE_MAINT_URL);
119                timeCollectionRuleLookup = HtmlUnitUtil.clickInputContainingText(
120                                timeCollectionRuleLookup, "search");
121                Assert.assertTrue("Page contains test timeCollectionRule",
122                                timeCollectionRuleLookup.asText().contains(TEST_CODE));
123                HtmlPage maintPage = HtmlUnitUtil.clickAnchorContainingText(
124                                timeCollectionRuleLookup, "edit",
125                                timeCollectionRuleId);
126                Assert.assertTrue("Maintenance Page contains test timeCollectionRule",
127                                maintPage.asText().contains(TEST_CODE));
128        }
129
130        @Override
131        public void setUp() throws Exception {
132                super.setUp();
133                Department department = new Department();
134                department.setDept(TEST_CODE_DEPARTMENT_VALID);
135                department.setChart(TEST_CODE_DEPARTMENT_VALID);
136                department.setDescription(TEST_CODE_DEPARTMENT_VALID);
137                department.setOrg(TEST_CODE_DEPARTMENT_VALID);
138                department.setLocation("BL");
139                department.setEffectiveLocalDate(TEST_DATE);
140        department.setActive(Boolean.TRUE);
141                department = KRADServiceLocator.getBusinessObjectService().save(department);
142                
143                TimeCollectionRule timeCollectionRule = new TimeCollectionRule();
144                timeCollectionRule.setDept(TEST_CODE_DEPARTMENT_VALID);
145                timeCollectionRule.setEffectiveLocalDate(TEST_DATE);
146                timeCollectionRule.setTimestamp(TKUtils.getCurrentTimestamp());
147                timeCollectionRule.setUserPrincipalId(TEST_CODE);
148        timeCollectionRule.setActive(true);
149        timeCollectionRule.setPayType("%");
150        timeCollectionRule = KRADServiceLocator.getBusinessObjectService().save(timeCollectionRule);
151                timeCollectionRuleId = timeCollectionRule.getTkTimeCollectionRuleId();
152
153                TimeCollectionRule timeCollectionRuleWIthInvalidWorkArea = new TimeCollectionRule();
154                // setting workAreaId for which Workarea doesn't exist .
155                Random randomObj = new Random();
156                for (;;) {
157                        long workAreaIndex = randomObj.nextInt();
158                        int count = HrServiceLocator.getWorkAreaService().getWorkAreaCount(null, workAreaIndex);
159
160                        if (count == 0) {
161                                TEST_CODE_INVALID_WORKAREA = new Long(workAreaIndex);
162                                break;
163                        }
164                }
165                timeCollectionRuleWIthInvalidWorkArea
166                                .setDept(TEST_CODE_DEPARTMENT_VALID);
167                timeCollectionRuleWIthInvalidWorkArea.setEffectiveLocalDate(TEST_DATE);
168        timeCollectionRuleWIthInvalidWorkArea.setActive(true);
169        timeCollectionRuleWIthInvalidWorkArea.setPayType("%");
170                timeCollectionRuleWIthInvalidWorkArea.setTimestamp(TKUtils.getCurrentTimestamp());
171                timeCollectionRuleWIthInvalidWorkArea.setUserPrincipalId(TEST_CODE);
172                timeCollectionRuleWIthInvalidWorkArea
173                                .setWorkArea(TEST_CODE_INVALID_WORKAREA);
174        timeCollectionRuleWIthInvalidWorkArea = KRADServiceLocator.getBusinessObjectService().save(
175                                timeCollectionRuleWIthInvalidWorkArea);
176                timeCollectionRuleIdWithInvalidWorkArea = timeCollectionRuleWIthInvalidWorkArea
177                                .getTkTimeCollectionRuleId();
178
179        }
180
181        @Override
182        public void tearDown() throws Exception {
183                // cleaning up
184                TimeCollectionRule timeCollectionRuleObj = KRADServiceLocator.getBusinessObjectService()
185                .findByPrimaryKey(TimeCollectionRule.class, Collections.singletonMap("tkTimeCollectionRuleId", timeCollectionRuleId));
186        //Map<String, String> criteria = new (Collections()).singletonMap("dept")
187        //Collection<TimeCollectionRule> rules = KRADServiceLocator.getBusinessObjectService().findMatching(TimeCollectionRule.class, )
188                KRADServiceLocator.getBusinessObjectService().delete(
189                                timeCollectionRuleObj);
190
191                timeCollectionRuleObj = TkServiceLocator.getTimeCollectionRuleService().getTimeCollectionRule(TEST_CODE_DEPARTMENT_VALID,
192                                                                        TEST_CODE_INVALID_WORKAREA, "%", LocalDate.now());
193                //timeCollectionRuleObj = KRADServiceLocator.getBusinessObjectService()
194        //        .findByPrimaryKey(TimeCollectionRule.class, Collections.singletonMap("tkTimeCollectionRuleId", timeCollectionRuleIdWithInvalidWorkArea));
195                KRADServiceLocator.getBusinessObjectService().delete(
196                                timeCollectionRuleObj);
197
198                Department deptObj = HrServiceLocator.getDepartmentService().getDepartmentWithoutRoles(TEST_CODE_DEPARTMENT_VALID, LocalDate.now());
199                KRADServiceLocator.getBusinessObjectService().delete(deptObj);
200                super.tearDown();
201        }
202
203}