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