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;
017
018 import java.util.Collections;
019 import java.util.Random;
020
021 import org.joda.time.LocalDate;
022 import org.junit.Assert;
023 import org.junit.Test;
024 import org.kuali.hr.KPMEWebTestCase;
025 import org.kuali.hr.util.HtmlUnitUtil;
026 import org.kuali.kpme.core.FunctionalTest;
027 import org.kuali.kpme.core.department.Department;
028 import org.kuali.kpme.core.service.HrServiceLocator;
029 import org.kuali.kpme.core.util.TKUtils;
030 import org.kuali.kpme.tklm.time.rules.timecollection.TimeCollectionRule;
031 import org.kuali.kpme.tklm.time.service.TkServiceLocator;
032 import org.kuali.kpme.tklm.utils.TkTestConstants;
033 import org.kuali.rice.krad.service.KRADServiceLocator;
034
035 import com.gargoylesoftware.htmlunit.html.HtmlInput;
036 import com.gargoylesoftware.htmlunit.html.HtmlPage;
037
038 @FunctionalTest
039 public 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().getDepartment(TEST_CODE_DEPARTMENT_VALID, LocalDate.now());
199 KRADServiceLocator.getBusinessObjectService().delete(deptObj);
200 super.tearDown();
201 }
202
203 }