001 /** 002 * Copyright 2004-2012 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.workarea; 017 018 import java.sql.Date; 019 020 import org.joda.time.DateTime; 021 import org.joda.time.DateTimeZone; 022 import org.junit.Assert; 023 import org.junit.Before; 024 import org.junit.Test; 025 import org.kuali.hr.test.KPMETestCase; 026 import org.kuali.hr.time.department.Department; 027 import org.kuali.hr.time.service.base.TkServiceLocator; 028 import org.kuali.hr.time.test.HtmlUnitUtil; 029 import org.kuali.hr.time.test.TkTestConstants; 030 import org.kuali.hr.time.util.TKUtils; 031 import org.kuali.hr.time.util.TkConstants; 032 import org.kuali.rice.krad.service.KRADServiceLocator; 033 034 import com.gargoylesoftware.htmlunit.html.HtmlElement; 035 import com.gargoylesoftware.htmlunit.html.HtmlForm; 036 import com.gargoylesoftware.htmlunit.html.HtmlInput; 037 import com.gargoylesoftware.htmlunit.html.HtmlPage; 038 039 public class WorkAreaMaintenanceDocumentTest extends KPMETestCase { 040 041 final String ERROR_MESSAGE = "At least one active role must be defined."; 042 final String ERROR_ROLE_MESSAGE = "Cannot define both Principal Id and Position Number for Role."; 043 final String SUCCESS_MESSAGE = "Document was successfully submitted."; 044 private static final String TEST_CODE_DEPARTMENT_VALID = "_TEST"; 045 private static final Date TEST_DATE = new Date((new DateTime(2011,1,1,1,0,0,0,TKUtils.getSystemDateTimeZone())).getMillis()); 046 047 @Before 048 public void setUp() throws Exception { 049 super.setUp(); 050 Department department = new Department(); 051 department.setDept(TEST_CODE_DEPARTMENT_VALID); 052 department.setChart(TEST_CODE_DEPARTMENT_VALID); 053 department.setDescription(TEST_CODE_DEPARTMENT_VALID); 054 department.setOrg(TEST_CODE_DEPARTMENT_VALID); 055 department.setLocation("TST"); 056 department.setEffectiveDate(TEST_DATE); 057 department.setActive(true); 058 KRADServiceLocator.getBusinessObjectService().save(department); 059 } 060 061 062 @Test 063 public void testCreateNew() throws Exception { 064 String baseUrl = TkTestConstants.Urls.WORK_AREA_MAINT_NEW_URL; 065 Long workArea = this.maxWorkArea()+1; 066 HtmlPage page = HtmlUnitUtil.gotoPageAndLogin(baseUrl); 067 Assert.assertNotNull(page); 068 069 HtmlForm form = page.getFormByName("KualiForm"); 070 Assert.assertNotNull("Search form was missing from page.", form); 071 072 HtmlInput input = HtmlUnitUtil.getInputContainingText(form, "methodToCall.route"); 073 Assert.assertNotNull("Could not locate submit button", input); 074 075 setFieldValue(page, "document.documentHeader.documentDescription", "Work Area - test"); 076 setFieldValue(page, "document.newMaintainableObject.effectiveDate", "4/01/2011"); 077 setFieldValue(page, "document.newMaintainableObject.active", "on"); 078 setFieldValue(page, "document.newMaintainableObject.description", "test"); 079 setFieldValue(page, "document.newMaintainableObject.dept", TEST_CODE_DEPARTMENT_VALID); 080 setFieldValue(page, "document.newMaintainableObject.adminDescr", "TEST"); 081 setFieldValue(page, "document.newMaintainableObject.overtimeEditRole", "TK_APPROVER"); 082 083 HtmlElement element = page.getElementByName("methodToCall.route"); 084 HtmlPage nextPage = element.click(); 085 Assert.assertTrue("page does not contain:\n" + ERROR_MESSAGE, nextPage.asText().contains(ERROR_MESSAGE)); 086 087 setFieldValue(page, "document.newMaintainableObject.add.roles.effectiveDate", "04/01/2011"); 088 setFieldValue(page, "document.newMaintainableObject.add.roles.principalId", "admin"); 089 setFieldValue(page, "document.newMaintainableObject.add.roles.positionNumber", "123"); 090 setFieldValue(page, "document.newMaintainableObject.add.roles.active", "on"); 091 092 element = HtmlUnitUtil.getInputContainingText(page,"methodToCall.addLine.roles"); 093 nextPage = element.click(); 094 Assert.assertTrue("page does not contain:\n" + ERROR_ROLE_MESSAGE, nextPage.asText().contains(ERROR_ROLE_MESSAGE)); 095 096 setFieldValue(nextPage, "document.newMaintainableObject.add.roles.positionNumber", ""); 097 element = HtmlUnitUtil.getInputContainingText(nextPage,"methodToCall.addLine.roles"); 098 nextPage = element.click(); 099 Assert.assertFalse("page contains:\n" + ERROR_MESSAGE, nextPage.asText().contains(ERROR_MESSAGE)); 100 Assert.assertFalse("page contains:\n" + ERROR_ROLE_MESSAGE, nextPage.asText().contains(ERROR_ROLE_MESSAGE)); 101 102 form = nextPage.getFormByName("KualiForm"); 103 Assert.assertNotNull("Search form was missing from page.", form); 104 105 input = HtmlUnitUtil.getInputContainingText(form, "methodToCall.route"); 106 Assert.assertNotNull("Could not locate submit button", input); 107 //work area should be saved successfully and work area field should be populated with the max work area from db 108 element = nextPage.getElementByName("methodToCall.route"); 109 HtmlPage lastPage = element.click(); 110 Assert.assertFalse("page contains:\n" + ERROR_MESSAGE, lastPage.asText().contains(ERROR_MESSAGE)); 111 Assert.assertTrue("page does not contains:\n" + SUCCESS_MESSAGE, lastPage.asText().contains(SUCCESS_MESSAGE)); 112 Assert.assertTrue("page does not contains:\n" + workArea.toString(), lastPage.asText().contains(workArea.toString())); 113 114 // search page should find the new work area 115 HtmlPage searchPage = HtmlUnitUtil.gotoPageAndLogin(TkTestConstants.Urls.WORK_AREA_MAINT_URL); 116 searchPage = HtmlUnitUtil.clickInputContainingText(searchPage, "search"); 117 Assert.assertTrue("Page contains test Earn Code", searchPage.asText().contains(workArea.toString())); 118 119 java.sql.Date aDate = new Date((new DateTime(2011, 5, 1, 0, 0, 0, 0, TKUtils.getSystemDateTimeZone())).getMillis()); 120 WorkArea wa = TkServiceLocator.getWorkAreaService().getWorkArea(workArea, aDate); 121 String workAreaId = wa.getTkWorkAreaId().toString(); 122 123 // when open the new work area, role should be show up 124 HtmlPage maintPage = HtmlUnitUtil.clickAnchorContainingText(searchPage, "edit", workAreaId); 125 HtmlElement e = maintPage.getHtmlElementById("document.oldMaintainableObject.roles[0].effectiveDate.div"); 126 Assert.assertNotNull("Maintenance Page does not contain role ", e); 127 } 128 129 public Long maxWorkArea() { 130 return TkServiceLocator.getWorkAreaService().getNextWorkAreaKey(); 131 132 } 133 134 @Override 135 public void tearDown() throws Exception { 136 Department deptObj = TkServiceLocator.getDepartmentService().getDepartment(TEST_CODE_DEPARTMENT_VALID, TKUtils.getCurrentDate()); 137 KRADServiceLocator.getBusinessObjectService().delete(deptObj); 138 super.tearDown(); 139 } 140 }