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.timesheet.web;
017
018 import java.sql.Date;
019 import java.util.*;
020
021 import org.joda.time.DateTime;
022 import org.joda.time.DateTimeZone;
023 import org.json.simple.JSONArray;
024 import org.json.simple.JSONObject;
025 import org.json.simple.JSONValue;
026 import org.junit.Assert;
027 import org.junit.Test;
028 import org.kuali.hr.time.assignment.Assignment;
029 import org.kuali.hr.time.calendar.CalendarEntries;
030 import org.kuali.hr.time.detail.web.TimeDetailActionFormBase;
031 import org.kuali.hr.time.earncode.EarnCode;
032 import org.kuali.hr.time.service.base.TkServiceLocator;
033 import org.kuali.hr.time.test.HtmlUnitUtil;
034 import org.kuali.hr.time.timesheet.TimesheetDocument;
035 import org.kuali.hr.time.util.TKUtils;
036 import org.kuali.hr.time.util.TimeDetailTestUtils;
037
038 import com.gargoylesoftware.htmlunit.html.HtmlForm;
039 import com.gargoylesoftware.htmlunit.html.HtmlPage;
040
041 //@Ignore
042 public class TimesheetIntegrationTest extends TimesheetWebTestBase {
043
044 public static final String USER_PRINCIPAL_ID = "admin";
045 public static final Date TIME_SHEET_DATE = new Date(
046 (new DateTime(2011, 2, 15, 0, 0, 0, 0, DateTimeZone
047 .forID(TKUtils.getSystemTimeZone()))).getMillis());
048 public TimesheetDocument timeDoc;
049 public List<Assignment> assignmentsOfUser;
050 public CalendarEntries payCal;
051 public String tdocId;
052
053 /**
054 * @throws Exception
055 */
056 public void setUp() throws Exception {
057
058 super.setUp();
059
060 payCal = TkServiceLocator.getCalendarService().getCurrentCalendarDates(
061 USER_PRINCIPAL_ID, TIME_SHEET_DATE);
062 Assert.assertNotNull("Pay calendar entries not found for admin", payCal);
063
064 // retrieving time sheet for according to the pay calendar
065 timeDoc = TkServiceLocator.getTimesheetService().openTimesheetDocument(
066 USER_PRINCIPAL_ID, payCal);
067 tdocId = timeDoc.getDocumentId();
068
069 // login
070 HtmlPage page = loginAndGetTimeDetailsHtmlPage(USER_PRINCIPAL_ID,
071 tdocId, true);
072 Assert.assertNotNull(page);
073
074 assignmentsOfUser = TkServiceLocator.getAssignmentService()
075 .getAssignments(USER_PRINCIPAL_ID, TIME_SHEET_DATE);
076 Assert.assertNotNull("No Assignments found for the user ", assignmentsOfUser);
077
078 // check if page contains calendar for February 2011
079 Assert.assertTrue("Page could not find calendar for Feb 2011", page.asText()
080 .contains("February 2011"));
081
082 HtmlForm form = page.getFormByName("TimeDetailActionForm");
083 Assert.assertNotNull(form);
084 }
085
086 public void tearDown() throws Exception {
087 super.tearDown();
088 }
089
090 @Test
091 public void testAddTimeBlock() throws Exception {
092
093 EarnCode earnCode = null;
094 HtmlPage page = loginAndGetTimeDetailsHtmlPage(USER_PRINCIPAL_ID,
095 tdocId, true);
096
097 HtmlForm form = page.getFormByName("TimeDetailActionForm");
098 Assert.assertNotNull(form);
099
100 // Assignment of user
101 Assignment assToBeSelected = assignmentsOfUser.get(4);
102
103 // retrieving earncode for the assignment
104 List<EarnCode> earnCodes = TkServiceLocator.getEarnCodeService().getEarnCodes(assToBeSelected, TIME_SHEET_DATE);
105 if (earnCodes != null && !earnCodes.isEmpty()) {
106 earnCode = earnCodes.get(0);
107 }
108
109 DateTime startTime = new DateTime(2011, 2, 15, 9, 0, 0, 0,
110 TKUtils.getSystemDateTimeZone());
111 DateTime endTime = new DateTime(2011, 2, 15, 11, 0, 0, 0,
112 TKUtils.getSystemDateTimeZone());
113
114 // Setup TimeDetailActionForm
115 TimeDetailActionFormBase addTB = TimeDetailTestUtils
116 .buildDetailActionForm(timeDoc, assToBeSelected, earnCode,
117 startTime, endTime, null, true, null, true);
118 List<String> errors = TimeDetailTestUtils.setTimeBlockFormDetails(form,
119 addTB);
120
121 // Check for errors
122 Assert.assertEquals(
123 "There should be no errors in this time detail submission", 0,
124 errors.size());
125
126 // submit the details of Timeblock to be added.
127 page = TimeDetailTestUtils.submitTimeDetails(
128 TimesheetWebTestBase.getTimesheetDocumentUrl(tdocId), addTB);
129 Assert.assertNotNull(page);
130
131 // get Timeblocks objects from Timeblock string
132 String dataText = page.getElementById("timeBlockString")
133 .getFirstChild().getNodeValue();
134
135 // check the values in timeblockString
136 JSONArray jsonData = (JSONArray) JSONValue.parse(dataText);
137 final JSONObject jsonDataObject = (JSONObject) jsonData.get(0);
138 final String assignmentKey = assToBeSelected.getAssignmentKey();
139 Assert.assertTrue("TimeBlock Data Missing.", checkJSONValues(new JSONObject() {
140 {
141 put("outer", jsonDataObject);
142 }
143 }, new ArrayList<Map<String, Object>>() {
144 {
145 add(new HashMap<String, Object>() {
146 {
147 put("earnCode", "RGN");
148 put("hours", "2.0");
149 put("amount", null);
150 }
151 });
152 }
153 }, new HashMap<String, Object>() {
154 {
155 put("earnCode", "RGN");
156 put("startNoTz", "2011-02-15T09:00:00");
157 put("endNoTz", "2011-02-15T11:00:00");
158 put("assignment", assignmentKey);
159 }
160 }));
161
162
163 // check value ....
164 Assert.assertTrue("TimeBlock did not created successfully.", page.asText()
165 .contains("work area description-description 1"));
166 Assert.assertTrue("TimeBlock did not created successfully.", page.asText()
167 .contains("RGN - 2.00 hours"));
168
169 }
170
171 @Test
172 public void testEditTimeBlock() throws Exception {
173 EarnCode earnCode = null;
174
175 // login
176 HtmlPage page = loginAndGetTimeDetailsHtmlPage(USER_PRINCIPAL_ID,
177 tdocId, true);
178
179 // Assignment
180 Assignment assToBeSelected = assignmentsOfUser.get(4);
181
182 // retrieving earncode for the assignment
183 List<EarnCode> earnCodes = TkServiceLocator.getEarnCodeService().getEarnCodes(assToBeSelected, TIME_SHEET_DATE);
184 if (earnCodes != null && !earnCodes.isEmpty()) {
185 earnCode = earnCodes.get(0);
186 }
187
188 DateTime startTime = new DateTime(2011, 2, 15, 9, 0, 0, 0,
189 TKUtils.getSystemDateTimeZone());
190 DateTime endTime = new DateTime(2011, 2, 15, 11, 0, 0, 0,
191 TKUtils.getSystemDateTimeZone());
192
193 HtmlForm form = page.getFormByName("TimeDetailActionForm");
194 Assert.assertNotNull(form);
195
196 // Setup TimeDetailActionForm for adding time block
197 TimeDetailActionFormBase addTB = TimeDetailTestUtils
198 .buildDetailActionForm(timeDoc, assToBeSelected, earnCode,
199 startTime, endTime, null, true, null, true);
200 List<String> errors = TimeDetailTestUtils.setTimeBlockFormDetails(form,
201 addTB);
202
203 // Check for errors
204 Assert.assertEquals(
205 "There should be no errors in this time detail submission", 0,
206 errors.size());
207
208 page = TimeDetailTestUtils.submitTimeDetails(
209 TimesheetWebTestBase.getTimesheetDocumentUrl(tdocId), addTB);
210 Assert.assertNotNull(page);
211
212 // chk if the page contains the created time block.
213 Assert.assertTrue("TimeBlock not Present.",
214 page.asText().contains("work area description-description 1"));
215 Assert.assertTrue("TimeBlock not Present.",
216 page.asText().contains("RGN - 2.00 hours"));
217
218 // now updating the time block
219 timeDoc = TkServiceLocator.getTimesheetService().openTimesheetDocument(
220 USER_PRINCIPAL_ID, payCal);
221
222 String createdTBId = timeDoc.getTimeBlocks().get(0).getTkTimeBlockId();
223
224 HtmlUnitUtil.createTempFile(page);
225
226 // change assignment and time
227 assToBeSelected = assignmentsOfUser.get(3);
228
229 // earn codes related to the assignment
230 earnCodes = TkServiceLocator.getEarnCodeService().getEarnCodes(assToBeSelected, TIME_SHEET_DATE);
231 if (earnCodes != null && !earnCodes.isEmpty()) {
232 earnCode = earnCodes.get(0);
233 }
234
235 DateTime startTime1 = new DateTime(2011, 2, 15, 14, 0, 0, 0,
236 TKUtils.getSystemDateTimeZone());
237 DateTime endTime1 = new DateTime(2011, 2, 15, 17, 0, 0, 0,
238 TKUtils.getSystemDateTimeZone());
239
240 form = page.getFormByName("TimeDetailActionForm");
241
242 TimeDetailActionFormBase updateTB = TimeDetailTestUtils
243 .buildDetailActionForm(timeDoc, assToBeSelected, earnCode,
244 startTime1, endTime1, null, true, createdTBId, true);
245
246 // validation of time block
247 errors = TimeDetailTestUtils.setTimeBlockFormDetails(form, updateTB);
248 Assert.assertEquals(
249 "There should be no errors in this time detail submission", 0,
250 errors.size());
251
252 // update it
253 page = TimeDetailTestUtils.submitTimeDetails(
254 TimesheetWebTestBase.getTimesheetDocumentUrl(tdocId), updateTB);
255 Assert.assertNotNull(page);
256
257 // chk the timesheet contains the changes done with the time block
258 Assert.assertTrue("TimeBlock did not updated properly.", page.asText()
259 .contains("work area description-description 1"));
260 Assert.assertTrue("TimeBlock did not updated properly.", page.asText()
261 .contains("RGN - 3.00 hours"));
262
263 }
264
265 @Test
266 public void testDeleteTimeBlock() throws Exception {
267
268 EarnCode earnCode = null;
269
270 // login
271 HtmlPage page = loginAndGetTimeDetailsHtmlPage(USER_PRINCIPAL_ID,
272 tdocId, true);
273
274 // Assignment of user
275 Assignment assToBeSelected = assignmentsOfUser.get(4);
276
277 // retrieving earncode for the assignment
278 List<EarnCode> earnCodes = TkServiceLocator.getEarnCodeService().getEarnCodes(assToBeSelected, TIME_SHEET_DATE);
279 if (earnCodes != null && !earnCodes.isEmpty()) {
280 earnCode = earnCodes.get(0);
281 }
282
283 DateTime startTime = new DateTime(2011, 2, 15, 9, 0, 0, 0,
284 TKUtils.getSystemDateTimeZone());
285 DateTime endTime = new DateTime(2011, 2, 15, 11, 0, 0, 0,
286 TKUtils.getSystemDateTimeZone());
287
288 HtmlForm form = page.getFormByName("TimeDetailActionForm");
289 Assert.assertNotNull(form);
290
291 // Setup TimeDetailActionForm
292 TimeDetailActionFormBase addTB = TimeDetailTestUtils
293 .buildDetailActionForm(timeDoc, assToBeSelected, earnCode,
294 startTime, endTime, null, true, null, true);
295 List<String> errors = TimeDetailTestUtils.setTimeBlockFormDetails(form,
296 addTB);
297
298 // Check for errors
299 Assert.assertEquals(
300 "There should be no errors in this time detail submission", 0,
301 errors.size());
302
303 page = TimeDetailTestUtils.submitTimeDetails(
304 TimesheetWebTestBase.getTimesheetDocumentUrl(tdocId), addTB);
305 Assert.assertNotNull(page);
306
307 // chk the page must contain the created time block
308 Assert.assertTrue("TimeBlock did not created successfully.", page.asText()
309 .contains("work area description-description 1"));
310 Assert.assertTrue("TimeBlock did not created successfully.", page.asText()
311 .contains("RGN - 2.00 hours"));
312
313 timeDoc = TkServiceLocator.getTimesheetService().openTimesheetDocument(
314 USER_PRINCIPAL_ID, payCal);
315
316 // Delete the timeblock
317 String createTBId = timeDoc.getTimeBlocks().get(0).getTkTimeBlockId();
318 HtmlUnitUtil.createTempFile(page);
319 form = page.getFormByName("TimeDetailActionForm");
320 Assert.assertNotNull(form);
321
322 // set detail for deleting time block
323 TimeDetailActionFormBase deleteTB = TimeDetailTestUtils
324 .buildDetailActionForm(timeDoc, assToBeSelected, earnCode,
325 startTime, endTime, null, true, createTBId, true);
326 deleteTB.setMethodToCall("deleteTimeBlock");
327
328 // submitting the page
329 page = TimeDetailTestUtils.submitTimeDetails(
330 TimesheetWebTestBase.getTimesheetDocumentUrl(tdocId), deleteTB);
331 Assert.assertNotNull(page);
332
333 // chk the timesheet does not contain the time block
334 Assert.assertTrue("TimeBlock did not deleted successfully.", !page.asText()
335 .contains("work area description-description 1"));
336 Assert.assertTrue("TimeBlock did not deleted successfully.", !page.asText()
337 .contains("RGN - 2.00 hours"));
338
339 }
340
341
342 }