1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.hr.time.overtime.daily;
17
18 import java.util.ArrayList;
19 import java.util.HashMap;
20 import java.util.List;
21 import java.util.Map;
22
23 import org.joda.time.DateTime;
24 import org.json.simple.JSONArray;
25 import org.json.simple.JSONObject;
26 import org.json.simple.JSONValue;
27 import org.junit.Assert;
28 import org.junit.Test;
29 import org.kuali.hr.time.util.TimeDetailTestUtils;
30 import org.kuali.hr.time.workflow.TimesheetWebTestBase;
31 import org.kuali.kpme.core.FunctionalTest;
32 import org.kuali.kpme.core.assignment.Assignment;
33 import org.kuali.kpme.core.assignment.AssignmentDescriptionKey;
34 import org.kuali.kpme.core.calendar.entry.CalendarEntry;
35 import org.kuali.kpme.core.earncode.EarnCode;
36 import org.kuali.kpme.core.service.HrServiceLocator;
37 import org.kuali.kpme.core.util.HrContext;
38 import org.kuali.kpme.core.util.TKUtils;
39 import org.kuali.kpme.tklm.time.detail.web.TimeDetailActionFormBase;
40 import org.kuali.kpme.tklm.time.service.TkServiceLocator;
41 import org.kuali.kpme.tklm.time.timesheet.TimesheetDocument;
42
43 import com.gargoylesoftware.htmlunit.html.HtmlForm;
44 import com.gargoylesoftware.htmlunit.html.HtmlPage;
45
46 @FunctionalTest
47 public class DailyOvertimeWebIntegrationTest extends TimesheetWebTestBase {
48
49 public static final String USER_PRINCIPAL_ID = "admin";
50 private DateTime JAN_AS_OF_DATE = new DateTime(2010, 1, 1, 0, 0, 0, 0, TKUtils.getSystemDateTimeZone());
51
52 @Test
53
54
55
56
57
58
59 public void testSimpleDOTCalculationIntegration() throws Exception {
60 DateTime asOfDate = new DateTime(2011, 3, 1, 12, 0, 0, 0, TKUtils.getSystemDateTimeZone());
61
62 CalendarEntry pcd = HrServiceLocator.getCalendarEntryService().getCurrentCalendarDates(USER_PRINCIPAL_ID, asOfDate);
63 Assert.assertNotNull("No PayCalendarDates", pcd);
64
65 TimesheetDocument tdoc = TkServiceLocator.getTimesheetService().openTimesheetDocument(USER_PRINCIPAL_ID, pcd);
66 String tdocId = tdoc.getDocumentId();
67 HtmlPage page = loginAndGetTimeDetailsHtmlPage(getWebClient(), "admin", tdocId,true);
68 Assert.assertNotNull(page);
69 HtmlForm form = page.getFormByName("TimeDetailActionForm");
70 Assert.assertNotNull(form);
71
72
73 Assignment assignment = HrServiceLocator.getAssignmentService().getAssignment(HrContext.getPrincipalId(), AssignmentDescriptionKey.get("30_30_30"), JAN_AS_OF_DATE.toLocalDate());
74 EarnCode earnCode = HrServiceLocator.getEarnCodeService().getEarnCode("RGN", JAN_AS_OF_DATE.toLocalDate());
75 Assert.assertEquals("There should be no existing time blocks.", 0, tdoc.getTimeBlocks().size());
76
77
78
79
80 DateTime start = new DateTime(2011, 3, 2, 8, 0, 0, 0, TKUtils.getSystemDateTimeZone());
81 DateTime end = new DateTime(2011, 3, 2, 18, 0, 0, 0, TKUtils.getSystemDateTimeZone());
82
83
84
85 TimeDetailActionFormBase tdaf = TimeDetailTestUtils.buildDetailActionForm(tdoc, assignment, earnCode, start, end, null, true, null, true);
86 List<String> errors = TimeDetailTestUtils.setTimeBlockFormDetails(form, tdaf);
87
88 Assert.assertEquals("There should be no errors in this time detail submission", 0, errors.size());
89
90 page = TimeDetailTestUtils.submitTimeDetails(getWebClient(), getTimesheetDocumentUrl(tdocId), tdaf);
91 Assert.assertNotNull(page);
92
93
94
95 String pageAsText = page.asText();
96
97
98
99
100
101
102 String dataText = page.getElementById("timeBlockString").getFirstChild().getNodeValue();
103 JSONArray jsonData = (JSONArray) JSONValue.parse(dataText);
104 final JSONObject jsonDataObject = (JSONObject) jsonData.get(0);
105 Assert.assertTrue("TimeBlock #1 Data Missing.", checkJSONValues(new JSONObject() {{ put("outer", jsonDataObject); }},
106 new ArrayList<Map<String, Object>>() {{
107 add(new HashMap<String, Object>() {{
108 put("earnCode", "RGN");
109 put("hours", "8.0");
110 }});
111 add(new HashMap<String, Object>() {{
112 put("earnCode", "OVT");
113 put("hours", "2.0");
114 }});
115 }},
116 new HashMap<String, Object>() {{
117 put("earnCode", "RGN");
118 put("startNoTz", "2011-03-02T08:00:00");
119 put("endNoTz", "2011-03-02T18:00:00");
120 put("title", "SDR1 Work Area");
121 put("assignment", "30_30_30");
122 }}
123 ));
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148 Assert.assertTrue("TimeBlock not Present.", pageAsText.contains("08:00 AM - 06:00 PM"));
149 Assert.assertTrue("TimeBlock not Present.", pageAsText.contains("RGN - 8.00 hours"));
150 Assert.assertTrue("TimeBlock not Present.", pageAsText.contains("OVT - 2.00 hours"));
151 }
152
153 }