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 }