workpattern 0.3.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/test/test_helper.rb DELETED
@@ -1,3 +0,0 @@
1
- require 'stringio'
2
- require 'minitest/autorun'
3
- require File.dirname(__FILE__) + '/../lib/workpattern.rb'
data/test/test_hour.rb DELETED
@@ -1,389 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestHour < MiniTest::Unit::TestCase #:nodoc:
4
-
5
- def setup
6
- @working_hour = Workpattern::WORKING_HOUR
7
- @resting_hour = Workpattern::RESTING_HOUR
8
- @pattern_hour = @working_hour
9
- @pattern_hour = @pattern_hour.wp_workpattern(0,0,0)
10
- @pattern_hour = @pattern_hour.wp_workpattern(59,59,0)
11
- @pattern_hour = @pattern_hour.wp_workpattern(11,30,0)
12
-
13
- end
14
-
15
- def test_for_default_working_hour_of_60_minutes
16
- assert_equal 60, @working_hour.wp_total,"working total minutes"
17
- assert_equal 0, @working_hour.wp_first,"first minute of the working hour"
18
- assert_equal 59, @working_hour.wp_last, "last minute of the working hour"
19
- end
20
-
21
- def test_for_default_resting_hour_of_0_minutes
22
- assert_equal 0, @resting_hour.wp_total,"resting total minutes"
23
- assert_equal nil, @resting_hour.wp_first,"first minute of the resting hour"
24
- assert_equal nil, @resting_hour.wp_last, "last minute of the resting hour"
25
- end
26
-
27
- def test_for_creating_a_workpattern_in_an_hour
28
- assert_equal 38,@pattern_hour.wp_total, "total working minutes in pattern"
29
- assert_equal 1, @pattern_hour.wp_first, "first minute of the pattern hour"
30
- assert_equal 58, @pattern_hour.wp_last, "last minute of the pattern hour"
31
- refute @pattern_hour.wp_working?(0)
32
- assert @pattern_hour.wp_working?(1)
33
- end
34
-
35
- def test_for_creating_8_33_that_failed_in_test_day
36
- test_hour=@working_hour.wp_workpattern(0,33,0)
37
- assert_equal 26, test_hour.wp_total
38
- end
39
-
40
- def test_can_add_more_than_the_available_minutes_in_a_working_hour
41
- start_date=DateTime.new(2013,1,1,1,8)
42
- result, remainder=@working_hour.wp_calc(start_date,53)
43
- assert_equal DateTime.new(2013,1,1,2,0), result
44
- assert_equal 1,remainder
45
- end
46
-
47
- def test_can_add_exact_amount_of_available_minutes_in_working_hour
48
- start_date=DateTime.new(2013,1,1,1,8)
49
- result, remainder=@working_hour.wp_calc(start_date,52)
50
- assert_equal DateTime.new(2013,1,1,2,0), result
51
- assert_equal 0,remainder
52
- end
53
-
54
- def test_can_add_when_more_available_minutes_in_working_hour
55
- start_date=DateTime.new(2013,1,1,1,8)
56
- result, remainder=@working_hour.wp_calc(start_date,51)
57
- assert_equal DateTime.new(2013,1,1,1,59), result
58
- assert_equal 0,remainder
59
- end
60
-
61
- def test_can_add_1_minute_to_59_seconds_in_working_hour
62
- start_date=DateTime.new(2013,1,1,1,59)
63
- result, remainder=@working_hour.wp_calc(start_date,1)
64
- assert_equal DateTime.new(2013,1,1,2,0), result
65
- assert_equal 0,remainder
66
- end
67
-
68
- def test_can_add_2_minute_to_59_seconds_in_working_hour
69
- start_date=DateTime.new(2013,1,1,1,59)
70
- result, remainder=@working_hour.wp_calc(start_date,2)
71
- assert_equal DateTime.new(2013,1,1,2,0), result
72
- assert_equal 1,remainder
73
- end
74
-
75
- def test_can_subtract_more_than_the_available_minutes_in_a_working_hour
76
- start_date=DateTime.new(2013,1,1,1,31)
77
- result, remainder=@working_hour.wp_calc(start_date,-32)
78
- assert_equal DateTime.new(2013,1,1,1,0), result
79
- assert_equal -1,remainder
80
- end
81
-
82
- def test_can_subtract_exact_amount_of_available_minutes_in_working_hour
83
- start_date=DateTime.new(2013,1,1,1,31)
84
- result, remainder=@working_hour.wp_calc(start_date,-31)
85
- assert_equal DateTime.new(2013,1,1,1,0), result
86
- assert_equal 0,remainder
87
- end
88
-
89
- def test_can_subtract_1_second_less_than_available_minutes_in_working_hour
90
- start_date=DateTime.new(2013,1,1,1,31)
91
- result, remainder=@working_hour.wp_calc(start_date,-30)
92
- assert_equal DateTime.new(2013,1,1,1,1), result
93
- assert_equal 0,remainder
94
- end
95
-
96
- def test_can_subtract_when_more_available_minutes_in_working_hour
97
- start_date=DateTime.new(2013,1,1,1,31)
98
- result, remainder=@working_hour.wp_calc(start_date,-30)
99
- assert_equal DateTime.new(2013,1,1,1,1), result
100
- assert_equal 0,remainder
101
- end
102
-
103
- def test_can_subtract_1_minute_from_0_seconds_in_working_hour
104
- start_date=DateTime.new(2013,1,1,1,0)
105
- result, remainder=@working_hour.wp_calc(start_date,-1)
106
- assert_equal DateTime.new(2013,1,1,1,0), result
107
- assert_equal -1,remainder
108
- end
109
-
110
- def test_can_subtract_2_minute_to_0_seconds_in_working_hour
111
- start_date=DateTime.new(2013,1,1,1,0)
112
- result, remainder=@working_hour.wp_calc(start_date,-2)
113
- assert_equal DateTime.new(2013,1,1,1,0), result
114
- assert_equal -2,remainder
115
- end
116
-
117
- def test_can_subtract_exact_minutes_from_start_of_a_working_hour
118
- start_date=DateTime.new(2013,1,1,1,0)
119
- result, remainder=@working_hour.wp_calc(start_date,-60,true)
120
- assert_equal DateTime.new(2013,1,1,1,0), result
121
- assert_equal 0,remainder
122
- end
123
-
124
- def test_can_subtract_less_than_available_minutes_from_start_of_a_working_hour
125
- start_date=DateTime.new(2013,1,1,1,0)
126
- result, remainder=@working_hour.wp_calc(start_date,-59,true)
127
- assert_equal DateTime.new(2013,1,1,1,1), result
128
- assert_equal 0,remainder
129
- end
130
-
131
- def test_can_subtract_more_than_available_minutes_from_start_of_a_working_hour
132
- start_date=DateTime.new(2013,1,1,1,0)
133
- result, remainder=@working_hour.wp_calc(start_date,-61,true)
134
- assert_equal DateTime.new(2013,1,1,1,0), result
135
- assert_equal -1,remainder
136
- end
137
-
138
- def test_can_subtract_1_minute_from_end_of_a_working_hour
139
- start_date=DateTime.new(2013,1,1,1,0)
140
- result, remainder=@working_hour.wp_calc(start_date,-1,true)
141
- assert_equal DateTime.new(2013,1,1,1,59), result
142
- assert_equal 0,remainder
143
- end
144
-
145
- def test_can_zero_minutes_in_a_working_hour
146
- start_date=DateTime.new(2013,1,1,1,8)
147
- result, remainder=@working_hour.wp_calc(start_date,0)
148
- assert_equal DateTime.new(2013,1,1,1,8), result
149
- assert_equal 0,remainder
150
- end
151
-
152
- def test_can_add_1_minute_to_a_resting_hour
153
- start_date=DateTime.new(2013,1,1,1,30)
154
- result, remainder=@resting_hour.wp_calc(start_date,1)
155
- assert_equal DateTime.new(2013,1,1,2,0), result
156
- assert_equal 1,remainder
157
- end
158
-
159
- def test_can_add_1_minute_to_59_seconds_of_resting_hour
160
- start_date=DateTime.new(2013,1,1,1,59)
161
- result, remainder=@resting_hour.wp_calc(start_date,1)
162
- assert_equal DateTime.new(2013,1,1,2,0), result
163
- assert_equal 1,remainder
164
- end
165
-
166
- def test_can_add_1_minute_to_0_seconds_of_resting_hour
167
- start_date=DateTime.new(2013,1,1,1,0)
168
- result, remainder=@resting_hour.wp_calc(start_date,1)
169
- assert_equal DateTime.new(2013,1,1,2,0), result
170
- assert_equal 1,remainder
171
- end
172
-
173
- def test_can_subtract_0_minutes_from_start_of_a_resting_hour
174
- start_date=DateTime.new(2013,1,1,1,0)
175
- result, remainder=@resting_hour.wp_calc(start_date,0,true)
176
- assert_equal DateTime.new(2013,1,1,1,0), result
177
- assert_equal 0,remainder
178
- end
179
-
180
- def test_can_subtract_1_minute_from_end_of_a_resting_hour
181
- start_date=DateTime.new(2013,1,1,1,0)
182
- result, remainder=@resting_hour.wp_calc(start_date,-1,true)
183
- assert_equal DateTime.new(2013,1,1,1,0), result
184
- assert_equal -1,remainder
185
- end
186
-
187
- def test_can_zero_minutes_in_a_resting_hour
188
- start_date=DateTime.new(2013,1,1,1,8)
189
- result, remainder=@resting_hour.wp_calc(start_date,0)
190
- assert_equal DateTime.new(2013,1,1,1,8), result
191
- assert_equal 0,remainder
192
- end
193
-
194
- def test_can_add_more_than_the_available_minutes_in_a_patterned_hour
195
- start_date=DateTime.new(2013,1,1,1,8)
196
- result, remainder=@pattern_hour.wp_calc(start_date,32)
197
- assert_equal DateTime.new(2013,1,1,2,0), result
198
- assert_equal 1,remainder
199
- end
200
-
201
- def test_can_add_exact_amount_of_available_minutes_in_patterned_hour
202
- start_date=DateTime.new(2013,1,1,1,8)
203
- result, remainder=@pattern_hour.wp_calc(start_date,31)
204
- assert_equal DateTime.new(2013,1,1,1,59), result
205
- assert_equal 0,remainder
206
- end
207
-
208
- def test_can_add_when_more_available_minutes_in_patterned_hour
209
- start_date=DateTime.new(2013,1,1,1,8)
210
- result, remainder=@pattern_hour.wp_calc(start_date,30)
211
- assert_equal DateTime.new(2013,1,1,1,58), result
212
- assert_equal 0,remainder
213
- end
214
-
215
- def test_can_add_from_resting_period_in_patterned_hour
216
- start_date=DateTime.new(2013,1,1,1,15)
217
- result, remainder=@pattern_hour.wp_calc(start_date,1)
218
- assert_equal DateTime.new(2013,1,1,1,32), result
219
- assert_equal 0,remainder
220
- end
221
-
222
- def test_can_add_1_subtract_1_to_find_next_working_period_in_patterned_hour
223
- start_date=DateTime.new(2013,1,1,1,15)
224
- start_date, remainder=@pattern_hour.wp_calc(start_date,1)
225
- result, remainder=@pattern_hour.wp_calc(start_date,-1)
226
- assert_equal DateTime.new(2013,1,1,1,31), result
227
- assert_equal 0,remainder
228
- end
229
-
230
- def test_can_add_zero_minutes_in_a_working_period_patterned_hour
231
- start_date=DateTime.new(2013,1,1,1,8)
232
- result, remainder=@pattern_hour.wp_calc(start_date,0)
233
- assert_equal DateTime.new(2013,1,1,1,8), result
234
- assert_equal 0,remainder
235
- end
236
-
237
- def test_can_zero_minutes_in_a_resting_period_patterned_hour
238
- start_date=DateTime.new(2013,1,1,1,15)
239
- result, remainder=@pattern_hour.wp_calc(start_date,0)
240
- assert_equal DateTime.new(2013,1,1,1,15), result
241
- assert_equal 0,remainder
242
- end
243
-
244
- def test_minutes_in_slice_of_working_hour
245
- assert_equal 8,@working_hour.wp_minutes(8,15)
246
- end
247
-
248
- def test_minutes_in_slice_of_resting_hour
249
- assert_equal 0,@resting_hour.wp_minutes(8,15)
250
- end
251
-
252
- def test_minutes_in_slice_of_working_hour
253
- assert_equal 3,@pattern_hour.wp_minutes(8,15)
254
- assert_equal 4,@pattern_hour.wp_minutes(8,31)
255
- end
256
-
257
- def test_can_subtract_more_than_the_available_minutes_in_a_pattern_hour
258
- start_date=DateTime.new(2013,1,1,1,31)
259
- result, remainder=@pattern_hour.wp_calc(start_date,-11)
260
- assert_equal DateTime.new(2013,1,1,1,0), result
261
- assert_equal -1,remainder
262
- end
263
-
264
- def test_can_subtract_exact_amount_of_available_minutes_in_pattern_hour
265
- start_date=DateTime.new(2013,1,1,1,31)
266
- result, remainder=@pattern_hour.wp_calc(start_date,-10)
267
- assert_equal DateTime.new(2013,1,1,1,1), result
268
- assert_equal 0,remainder
269
- end
270
-
271
- def test_can_subtract_1_second_less_than_available_minutes_in_pattern_hour
272
- start_date=DateTime.new(2013,1,1,1,31)
273
- result, remainder=@pattern_hour.wp_calc(start_date,-9)
274
- assert_equal DateTime.new(2013,1,1,1,2), result
275
- assert_equal 0,remainder
276
- end
277
-
278
- def test_can_change_working_to_resting
279
- new_hour=@working_hour.wp_workpattern(0,59,0)
280
- assert_equal 0,new_hour.wp_total
281
- assert_nil new_hour.wp_first
282
- assert_nil new_hour.wp_last
283
- end
284
-
285
- def test_must_create_complex_patterns
286
- new_hour=@working_hour.wp_workpattern(0,0,0)
287
- new_hour=new_hour.wp_workpattern(8,23,0)
288
- new_hour=new_hour.wp_workpattern(12,12,1)
289
- new_hour=new_hour.wp_workpattern(58,58,0)
290
- new_hour=new_hour.wp_workpattern(6,8,1)
291
- assert_equal 44, new_hour.wp_total
292
- assert_equal 1, new_hour.wp_first
293
- assert_equal 59, new_hour.wp_last
294
- end
295
-
296
- def test_difference_between_first_and_last_minute_in_working_hour
297
- assert_equal 59, @working_hour.wp_diff(0,59)
298
- end
299
-
300
- def test_difference_between_first_and_first_minute_in_working_hour
301
- assert_equal 0, @working_hour.wp_diff(0,0)
302
- end
303
-
304
- def test_difference_between_last_and_last_minute_in_working_hour
305
- assert_equal 0, @working_hour.wp_diff(59,59)
306
- end
307
-
308
- def test_difference_between_two_minutes_in_working_hour
309
- assert_equal 13, @working_hour.wp_diff(3,16)
310
- end
311
-
312
- def test_difference_between_first_minute_and_first_minute_in_next_hour_in_working_hour
313
- assert_equal 60, @working_hour.wp_diff(0,60)
314
- end
315
-
316
- def test_difference_between_a_minute_and_last_minute_in_working_hour
317
- assert_equal 43, @working_hour.wp_diff(16,59)
318
- end
319
-
320
- def test_differences_work_in_reverse_for_working_hour
321
- assert_equal 59, @working_hour.wp_diff(59,0)
322
- assert_equal 13, @working_hour.wp_diff(16,3)
323
- assert_equal 60, @working_hour.wp_diff(60,0)
324
- assert_equal 43, @working_hour.wp_diff(59,16)
325
- end
326
-
327
- def test_difference_between_first_and_last_minute_in_resting_hour
328
- assert_equal 0, @resting_hour.wp_diff(0,59)
329
- end
330
-
331
- def test_difference_between_first_and_first_minute_in_resting_hour
332
- assert_equal 0, @resting_hour.wp_diff(0,0)
333
- end
334
-
335
- def test_difference_between_last_and_last_minute_in_resting_hour
336
- assert_equal 0, @resting_hour.wp_diff(59,59)
337
- end
338
-
339
- def test_difference_between_two_minutes_in_resting_hour
340
- assert_equal 0, @resting_hour.wp_diff(3,16)
341
- end
342
-
343
- def test_difference_between_first_minute_and_first_minute_in_next_hour_in_resting_hour
344
- assert_equal 0, @resting_hour.wp_diff(0,60)
345
- end
346
-
347
- def test_difference_between_a_minute_and_last_minute_in_resting_hour
348
- assert_equal 0, @resting_hour.wp_diff(16,59)
349
- end
350
-
351
- def test_differences_work_in_reverse_for_resting_hour
352
- assert_equal 0, @resting_hour.wp_diff(59,0)
353
- assert_equal 0, @resting_hour.wp_diff(16,3)
354
- assert_equal 0, @resting_hour.wp_diff(60,0)
355
- assert_equal 0, @resting_hour.wp_diff(59,16)
356
- end
357
-
358
- def test_difference_between_first_and_last_minute_in_pattern_hour
359
- assert_equal 38, @pattern_hour.wp_diff(0,59)
360
- end
361
-
362
- def test_difference_between_first_and_first_minute_in_pattern_hour
363
- assert_equal 0, @pattern_hour.wp_diff(0,0)
364
- end
365
-
366
- def test_difference_between_last_and_last_minute_in_pattern_hour
367
- assert_equal 0, @pattern_hour.wp_diff(59,59)
368
- end
369
-
370
- def test_difference_between_two_minutes_in_pattern_hour
371
- assert_equal 8, @pattern_hour.wp_diff(3,16)
372
- end
373
-
374
- def test_difference_between_first_minute_and_first_minute_in_next_hour_in_pattern_hour
375
- assert_equal 38, @pattern_hour.wp_diff(0,60)
376
- end
377
-
378
- def test_difference_between_a_minute_and_last_minute_in_pattern_hour
379
- assert_equal 28, @pattern_hour.wp_diff(16,59)
380
- end
381
-
382
- def test_differences_work_in_reverse_for_pattern_hour
383
- assert_equal 38, @pattern_hour.wp_diff(59,0)
384
- assert_equal 8, @pattern_hour.wp_diff(16,3)
385
- assert_equal 38, @pattern_hour.wp_diff(60,0)
386
- assert_equal 28, @pattern_hour.wp_diff(59,16)
387
- end
388
-
389
- end
data/test/test_week.rb DELETED
@@ -1,362 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestWeek < MiniTest::Unit::TestCase #:nodoc:
4
-
5
- def setup
6
-
7
- end
8
-
9
- def test_must_diff_from_last_day_of_patterned_week
10
- #issue 15
11
- start=DateTime.new(2013,9,23,0,0)
12
- finish=DateTime.new(2013,9,26,23,59)
13
- working_week=week(start,finish,1)
14
- working_week.workpattern :all, Workpattern.clock(0,0),Workpattern.clock(8,59),0
15
- working_week.workpattern :all, Workpattern.clock(12,0),Workpattern.clock(12,59),0
16
- working_week.workpattern :all, Workpattern.clock(18,0),Workpattern.clock(23,59),0
17
-
18
- duration, start =working_week.diff(DateTime.civil(2013,9,26,17,0),DateTime.civil(2013,9,27,10,0))
19
-
20
- assert_equal 60, duration
21
- assert_equal DateTime.civil(2013,9,27,0,0), start
22
- end
23
-
24
-
25
- ######################################################
26
- ######################################################
27
- ######################################################
28
-
29
- def test_must_create_a_working_week
30
- start=DateTime.new(2000,1,1,11,3)
31
- finish=DateTime.new(2005,12,31,16,41)
32
- working_week=week(start,finish,1)
33
- assert_equal DateTime.new(start.year,start.month,start.day), working_week.start
34
- assert_equal DateTime.new(finish.year,finish.month,finish.day), working_week.finish
35
- assert_equal 3156480, working_week.total#2192
36
- end
37
-
38
- def test_must_create_a_resting_week
39
- start=DateTime.new(2000,1,1,11,3)
40
- finish=DateTime.new(2005,12,31,16,41)
41
- resting_week=week(start,finish,0)
42
- assert_equal DateTime.new(start.year,start.month,start.day), resting_week.start
43
- assert_equal DateTime.new(finish.year,finish.month,finish.day), resting_week.finish
44
- assert_equal 0, resting_week.total#2192
45
- assert_equal 0,resting_week.week_total
46
- end
47
-
48
- def test_must_duplicate_all_of_a_week
49
- start=DateTime.new(2000,1,1,11,3)
50
- finish=DateTime.new(2005,12,31,16,41)
51
- week=week(start,finish,1)
52
- new_week=week.duplicate
53
- assert_equal DateTime.new(start.year,start.month,start.day), new_week.start
54
- assert_equal DateTime.new(finish.year,finish.month,finish.day), new_week.finish
55
- assert_equal 3156480, new_week.total#2192
56
-
57
- end
58
-
59
- def test_must_set_patterns_correctly
60
- start=DateTime.new(2000,1,1,0,0)
61
- finish=DateTime.new(2005,12,31,8,59)
62
- working_week=week(start,finish,1)
63
- assert_equal 10080, working_week.week_total
64
- working_week.workpattern(:all,start,finish,0)
65
- assert_equal 6300, working_week.week_total
66
- working_week.workpattern(:sun,start,finish,1)
67
- assert_equal 6840, working_week.week_total
68
- working_week.workpattern(:mon,start,finish,1)
69
- assert_equal 7380, working_week.week_total
70
- working_week.workpattern(:all,clock(18,0),clock(18,19),0)
71
- assert_equal 7240, working_week.week_total
72
- working_week.workpattern(:all,clock(0,0),clock(23,59),0)
73
- assert_equal 0, working_week.week_total
74
- working_week.workpattern(:all,clock(0,0),clock(0,0),1)
75
- assert_equal 7, working_week.week_total
76
- working_week.workpattern(:all,clock(23,59),clock(23,59),1)
77
- assert_equal 14, working_week.week_total
78
- working_week.workpattern(:all,clock(0,0),clock(23,59),1)
79
- assert_equal 10080, working_week.week_total
80
- working_week.workpattern(:weekend,clock(0,0),clock(23,59),0)
81
- assert_equal 7200, working_week.week_total
82
-
83
- end
84
-
85
- def test_must_add_minutes_in_a_working_week
86
- start=DateTime.new(2000,1,1,0,0)
87
- finish=DateTime.new(2005,12,31,8,59)
88
- working_week=week(start,finish,1)
89
-
90
- [# yyyy,mm,dd,hh,mn,durtn,ryyyy,rmm,rdd,rhh,rmn,rdurtn
91
- [ 2000, 1, 1, 0, 0, 0, 2000, 1, 1, 0, 0, 0],
92
- [ 2005,12,31, 8,59, 10, 2005, 12, 31, 9, 9, 0],
93
- [ 2005,12,31,23,59, 1, 2006, 1, 1, 0, 0, 0],
94
- [ 2005,12,31,23,59, 2, 2006, 1, 1, 0, 0, 1],
95
- [ 2005,11,30,23,59, 2, 2005, 12, 1, 0, 1, 0]
96
- ].each {|yyyy,mm,dd,hh,mn,durtn,ryyyy,rmm,rdd,rhh,rmn,rdurtn|
97
- start=DateTime.new(yyyy,mm,dd,hh,mn)
98
- result_date, result_duration= working_week.calc(start,durtn)
99
- assert_equal DateTime.new(ryyyy,rmm,rdd,rhh,rmn), result_date, "result_date for working_week.calc(#{start},#{durtn})"
100
- assert_equal rdurtn, result_duration,"result_duration for working_week.calc(#{start},#{durtn})"
101
- }
102
- end
103
-
104
- def test_must_add_minutes_in_a_resting_week
105
- start=DateTime.new(2000,1,1,0,0)
106
- finish=DateTime.new(2005,12,31,8,59)
107
- resting_week=week(start,finish,0)
108
-
109
- [# yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight
110
- [ 2000, 1, 1, 0, 0, 0, false, 2000, 1, 1, 0, 0, 0, false],
111
- [ 2005,12,31, 8,59, 10, false, 2006, 1, 1, 0, 0, 10, false],
112
- [ 2005,12,31,23,59, 1, false, 2006, 1, 1, 0, 0, 1, false],
113
- [ 2005,12,31,23,59, 2, false, 2006, 1, 1, 0, 0, 2, false],
114
- [ 2005,11,30,23,59, 2, false, 2006, 1, 1, 0, 0, 2, false],
115
- [ 2000, 1, 1, 0, 0, 0, true, 2000, 1, 1, 0, 0, 0, false],
116
- [ 2005,12,31, 8,59, 10, true, 2006, 1, 1, 0, 0, 10, false],
117
- [ 2005,12,31,23,59, 1, true, 2006, 1, 1, 0, 0, 1, false],
118
- [ 2005,12,31,23,59, 2, true, 2006, 1, 1, 0, 0, 2, false],
119
- [ 2005,11,30,23,59, 2, true, 2006, 1, 1, 0, 0, 2, false]
120
- ].each {|yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight|
121
- start=DateTime.new(yyyy,mm,dd,hh,mn)
122
- result_date, result_duration,result_midnight= resting_week.calc(start,durtn,midnight)
123
- assert_equal DateTime.new(ryyyy,rmm,rdd,rhh,rmn), result_date, "result_date for resting_week.calc(#{start},#{durtn},#{midnight})"
124
- assert_equal rdurtn, result_duration,"result_duration for resting_week.calc(#{start},#{durtn},#{midnight})"
125
- assert_equal rmidnight, result_midnight,"result_midnight for resting_week.calc(#{start},#{durtn},#{midnight})"
126
- }
127
- end
128
-
129
- def test_must_add_minutes_in_a_patterned_week
130
- start=DateTime.new(2000,1,1,0,0) #saturday
131
- finish=DateTime.new(2005,12,31,8,59) #saturday
132
- working_week=week(start,finish,0)
133
- working_week.workpattern(:sun,clock(9,0),clock(9,13),1)
134
-
135
- working_week.workpattern(:weekday,clock(9,0),clock(11,59),1)
136
- working_week.workpattern(:weekday,clock(13,0),clock(17,59),1)
137
-
138
- working_week.workpattern(:mon,clock(0,0),clock(23,59),0)
139
- working_week.workpattern(:mon,clock(9,0),clock(9,13),1)
140
- working_week.workpattern(:mon,clock(10,1),clock(10,1),1)
141
-
142
-
143
- [# yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight
144
- [ 2000, 1, 1, 0, 0, 0, false, 2000, 1, 1, 0, 0, 0, false],
145
- [ 2000, 1, 1, 0, 0, 1, false, 2000, 1, 2, 9, 1, 0, false],
146
- [ 2000, 1, 2, 9, 0, 14, false, 2000, 1, 2, 9, 14, 0, false], #Issue #9 - getting wrong time when hour had exactly the right number of minutes
147
- [ 2000, 1, 2, 9, 0, 15, false, 2000, 1, 3, 9, 1, 0, false],
148
- [ 2000, 1, 2, 9, 0, 29, false, 2000, 1, 3, 10, 2, 0, false],
149
- [ 2000, 1, 2, 9, 0, 1950, false, 2000, 1, 9, 9, 1, 0, false],
150
- [ 2005,12,25, 9, 0, 1950, false, 2006, 1, 1, 0, 0, 1, false],
151
- [ 2005,12,25, 9, 0, 1949, false, 2005, 12, 30, 18, 0, 0, false]#,
152
- ].each {|yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight|
153
- start=DateTime.new(yyyy,mm,dd,hh,mn)
154
- result_date, result_duration,result_midnight= working_week.calc(start,durtn,midnight)
155
- assert_equal DateTime.new(ryyyy,rmm,rdd,rhh,rmn), result_date, "result_date for working_week.calc(#{start},#{durtn},#{midnight})"
156
- assert_equal rdurtn, result_duration,"result_duration for working_week.calc(#{start},#{durtn},#{midnight})"
157
- assert_equal rmidnight, result_midnight,"result_midnight for working_week.calc(#{start},#{durtn},#{midnight})"
158
- }
159
- end
160
-
161
- def test_must_subtract_minutes_in_a_working_week
162
- start=DateTime.new(2000,1,1,0,0)
163
- finish=DateTime.new(2005,12,31,8,59)
164
- working_week=week(start,finish,1)
165
- [# yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight
166
- [ 2000, 1, 1, 0, 0, 0, false, 2000, 1, 1, 0, 0, 0, false],
167
- [ 2005,12,31, 0, 0, -10, false, 2005, 12, 30, 23, 50, 0, false],
168
- [ 2005,12,31, 0, 0, -1, false, 2005, 12, 30, 23, 59, 0, false],
169
- [ 2005,12,31, 0, 1, -2, false, 2005, 12, 30, 23, 59, 0, false], #Issue 6 - available minutes not calculating correctly for a time of 00:01
170
- [ 2000, 1, 1, 0, 1, -2, false, 1999, 12, 31, 0, 0, -1, true], #Issue 6 - available minutes not calculating correctly for a time of 00:01
171
- [ 2000, 1, 1, 0, 0, 0, true, 2000, 1, 1, 0, 0, 0, false],
172
- [ 2005,12,31, 0, 0, -10, true, 2005, 12, 31, 23, 50, 0, false],
173
- [ 2005,12,31, 0, 0, -1, true, 2005, 12, 31, 23, 59, 0, false],
174
- [ 2005,12,31, 0, 1, -2, true, 2005, 12, 31, 23, 58, 0, false],#Issue 7 - midnight flag should override hour and minutes
175
- [ 2000, 1, 1, 0, 1, -2, true, 2000, 1, 1, 23, 58, 0, false] #Issue 7 - midnight flag should override hour and minutes
176
- ].each {|yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight|
177
- start=DateTime.new(yyyy,mm,dd,hh,mn)
178
- result_date, result_duration,result_midnight= working_week.calc(start,durtn,midnight)
179
- assert_equal DateTime.new(ryyyy,rmm,rdd,rhh,rmn), result_date, "result_date for working_week.calc(#{start},#{durtn},#{midnight})"
180
- assert_equal rdurtn, result_duration,"result_duration for working_week.calc(#{start},#{durtn},#{midnight})"
181
- assert_equal rmidnight, result_midnight,"result_midnight for working_week.calc(#{start},#{durtn},#{midnight})"
182
- }
183
- end
184
-
185
- def test_must_subtract_minutes_in_a_resting_week
186
- start=DateTime.new(2000,1,1,0,0)
187
- finish=DateTime.new(2005,12,31,8,59)
188
- resting_week=week(start,finish,0)
189
- [# yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight
190
- [ 2000, 1, 1, 0, 0, 0, false, 2000, 1, 1, 0, 0, 0, false],
191
- [ 2005,12,31, 0, 0, -10, false, 1999, 12, 31, 0, 0, -10, true],
192
- [ 2005,12,31, 0, 0, -1, false, 1999, 12, 31, 0, 0, -1, true],
193
- [ 2005,12,31, 0, 1, -2, false, 1999, 12, 31, 0, 0, -2, true],
194
- [ 2000, 1, 1, 0, 1, -2, false, 1999, 12, 31, 0, 0, -2, true]
195
- ].each {|yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight|
196
- start=DateTime.new(yyyy,mm,dd,hh,mn)
197
- result_date, result_duration, result_midnight= resting_week.calc(start,durtn,midnight)
198
- assert_equal DateTime.new(ryyyy,rmm,rdd,rhh,rmn), result_date, "result_date for resting_week.calc(#{start},#{durtn},#{midnight})"
199
- assert_equal rdurtn, result_duration,"result_duration for resting_week.calc(#{start},#{durtn},#{midnight})"
200
- assert_equal rmidnight, result_midnight,"result_midnight for resting_week.calc(#{start},#{durtn},#{midnight})"
201
- }
202
- end
203
-
204
- def test_must_subtract_minutes_in_a_patterned_week
205
- start=DateTime.new(2000,1,1,0,0) #saturday
206
- finish=DateTime.new(2005,12,31,8,59) #saturday
207
- working_week=week(start,finish,0)
208
- working_week.workpattern(:sun,clock(9,0),clock(9,13),1)
209
-
210
- working_week.workpattern(:weekday,clock(9,0),clock(11,59),1)
211
- working_week.workpattern(:weekday,clock(13,0),clock(17,59),1)
212
-
213
- working_week.workpattern(:mon,clock(0,0),clock(23,59),0)
214
- working_week.workpattern(:mon,clock(9,0),clock(9,13),1)
215
- working_week.workpattern(:mon,clock(10,1),clock(10,1),1)
216
-
217
-
218
- [# yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight
219
- [ 2000, 1, 1, 0, 0, 0, false, 2000, 1, 1, 0, 0, 0, false],
220
- [ 2000, 1, 1, 0, 0, -1, false, 1999, 12, 31, 0, 0, -1, true],
221
- [ 2000, 1, 2, 9, 0, 14, false, 2000, 1, 2, 9, 14, 0, false],
222
- [ 2000, 1, 2, 9, 0, 15, false, 2000, 1, 3, 9, 1, 0, false],
223
- [ 2000, 1, 2, 9, 0, 29, false, 2000, 1, 3, 10, 2, 0, false],
224
- [ 2000, 1, 2, 9, 0, 1950, false, 2000, 1, 9, 9, 1, 0, false],
225
- [ 2005,12,25, 9, 0, 1950, false, 2006, 1, 1, 0, 0, 1, false],
226
- [ 2005,12,25, 9, 0, 1949, false, 2005, 12, 30, 18, 0, 0, false]#,
227
- ].each {|yyyy,mm,dd,hh,mn,durtn,midnight,ryyyy,rmm,rdd,rhh,rmn,rdurtn,rmidnight|
228
- start=DateTime.new(yyyy,mm,dd,hh,mn)
229
- result_date, result_duration,result_midnight= working_week.calc(start,durtn,midnight)
230
- assert_equal DateTime.new(ryyyy,rmm,rdd,rhh,rmn), result_date, "result_date for working_week.calc(#{start},#{durtn},#{midnight})"
231
- assert_equal rdurtn, result_duration,"result_duration for working_week.calc(#{start},#{durtn},#{midnight})"
232
- assert_equal rmidnight, result_midnight,"result_midnight for working_week.calc(#{start},#{durtn},#{midnight})"
233
- }
234
- end
235
-
236
- def test_must_calculate_difference_between_dates_in_working_week
237
- start=DateTime.new(2012,10,1)
238
- finish=DateTime.new(2012,10,7)
239
- week=week(start,finish,1)
240
-
241
- [
242
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 0, 0,2012,10, 1, 0, 0],
243
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 1, 1,2012,10, 1, 0, 1],
244
- [ 2012,10, 1, 0,50, 2012,10, 1, 0,59, 9,2012,10, 1, 0,59],
245
- [ 2012,10, 1, 8,50, 2012,10, 1, 9, 0, 10,2012,10, 1, 9, 0],
246
- [ 2012,10, 1, 0, 0, 2012,10, 1,23,59, 1439,2012,10, 1,23,59],
247
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 0, 1440,2012,10, 2, 0, 0],
248
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 1, 1441,2012,10, 2, 0, 1],
249
- [ 2012,10, 1, 0, 0, 2013, 3,22, 6,11,10080,2012,10, 8, 0, 0],
250
- [ 2012,10, 1, 0, 1, 2012,10, 1, 0, 0, 1,2012,10, 1, 0, 1],
251
- [ 2012,10, 1, 0,59, 2012,10, 1, 0,50, 9,2012,10, 1, 0,59],
252
- [ 2012,10, 1, 9, 0, 2012,10, 1, 8,50, 10,2012,10, 1, 9, 0],
253
- [ 2012,10, 1,23,59, 2012,10, 1, 0, 0, 1439,2012,10, 1,23,59],
254
- [ 2012,10, 2, 0, 0, 2012,10, 1, 0, 0, 1440,2012,10, 2, 0, 0],
255
- [ 2012,10, 2, 0, 1, 2012,10, 1, 0, 0, 1441,2012,10, 2, 0, 1],
256
- [ 2013, 3,22, 6,11, 2012,10, 1, 0, 0,10080,2012,10, 8, 0, 0],
257
- [ 2012,10, 2, 6,11, 2012,10, 4, 8, 9, 2998,2012,10, 4, 8, 9]
258
- ].each {|start_year, start_month, start_day, start_hour,start_min,
259
- finish_year, finish_month, finish_day, finish_hour,finish_min,result,
260
- y,m,d,h,n|
261
- start=DateTime.new(start_year, start_month, start_day, start_hour,start_min)
262
- finish=DateTime.new(finish_year, finish_month, finish_day, finish_hour,finish_min)
263
- expected_date=DateTime.new(y,m,d,h,n)
264
- duration, result_date=week.diff(start,finish)
265
- assert_equal result, duration,"duration diff(#{start}, #{finish})"
266
- assert_equal expected_date, result_date,"date diff(#{start}, #{finish})"
267
- }
268
- end
269
-
270
- def test_must_calculate_difference_between_dates_in_resting_week
271
-
272
- start=DateTime.new(2012,10,1)
273
- finish=DateTime.new(2012,10,7)
274
- week=week(start,finish,0)
275
-
276
- [
277
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 0, 0,2012,10, 1, 0, 0],
278
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 1, 0,2012,10, 1, 0, 1],
279
- [ 2012,10, 1, 0,50, 2012,10, 1, 0,59, 0,2012,10, 1, 0,59],
280
- [ 2012,10, 1, 8,50, 2012,10, 1, 9, 0, 0,2012,10, 1, 9, 0],
281
- [ 2012,10, 1, 0, 0, 2012,10, 1,23,59, 0,2012,10, 1,23,59],
282
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 0, 0,2012,10, 2, 0, 0],
283
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 1, 0,2012,10, 2, 0, 1],
284
- [ 2012,10, 1, 0, 0, 2013, 3,22, 6,11, 0,2012,10, 8, 0, 0],
285
- [ 2012,10, 1, 0, 1, 2012,10, 1, 0, 0, 0,2012,10, 1, 0, 1],
286
- [ 2012,10, 1, 0,59, 2012,10, 1, 0,50, 0,2012,10, 1, 0,59],
287
- [ 2012,10, 1, 9, 0, 2012,10, 1, 8,50, 0,2012,10, 1, 9, 0],
288
- [ 2012,10, 1,23,59, 2012,10, 1, 0, 0, 0,2012,10, 1,23,59],
289
- [ 2012,10, 2, 0, 0, 2012,10, 1, 0, 0, 0,2012,10, 2, 0, 0],
290
- [ 2012,10, 2, 0, 1, 2012,10, 1, 0, 0, 0,2012,10, 2, 0, 1],
291
- [ 2013, 3,22, 6,11, 2012,10, 1, 0, 0, 0,2012,10, 8, 0, 0]
292
- ].each {|start_year, start_month, start_day, start_hour,start_min,
293
- finish_year, finish_month, finish_day, finish_hour,finish_min,result,
294
- y,m,d,h,n|
295
- start=DateTime.new(start_year, start_month, start_day, start_hour,start_min)
296
- finish=DateTime.new(finish_year, finish_month, finish_day, finish_hour,finish_min)
297
- expected_date=DateTime.new(y,m,d,h,n)
298
- duration, result_date=week.diff(start,finish)
299
- assert_equal result, duration,"duration diff(#{start}, #{finish})"
300
- assert_equal expected_date, result_date,"date diff(#{start}, #{finish})"
301
- }
302
- end
303
-
304
- def test_must_calculate_difference_between_dates_in_pattern_week
305
- start=DateTime.new(2000,1,1)
306
- finish=DateTime.new(2012,12,31)
307
- week=week(start,finish,1)
308
- return
309
- [[0,0,8,59],
310
- [12,0,12,59],
311
- [17,0,22,59]
312
- ].each {|start_hour,start_min,finish_hour,finish_min|
313
- week.workpattern(clock(start_hour, start_min),
314
- clock(finish_hour, finish_min),
315
- 0)
316
- }
317
- assert_equal 480, day.total, "minutes in patterned day should be 480"
318
- assert_equal 1, day.minutes(16,59,16,59),"16:59 should be 1"
319
- assert_equal 0, day.minutes(17,0,17,0),"17:00 should be 0"
320
- assert_equal 0, day.minutes(22,59,22,59),"22:59 should be 0"
321
- assert_equal 1, day.minutes(23,0,23,0),"23:00 should be 1"
322
-
323
- [
324
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 0, 0,2012,10, 1, 0, 0],
325
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 1, 0,2012,10, 1, 0, 1],
326
- [ 2012,10, 1, 0,50, 2012,10, 1, 9,59, 59,2012,10, 1, 9,59],
327
- [ 2012,10, 1, 8,50, 2012,10, 1, 9,10, 10,2012,10, 1, 9,10],
328
- [ 2012,10, 1, 0, 0, 2012,10, 1,23,59, 479,2012,10, 1,23,59],
329
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 0, 480,2012,10, 2, 0, 0],
330
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 1, 480,2012,10, 2, 0, 0],
331
- [ 2012,10, 1, 0, 0, 2013, 3,22, 6,11, 480,2012,10, 2, 0, 0],
332
- [ 2012,10, 1, 0, 1, 2012,10, 1, 0, 0, 0,2012,10, 1, 0, 1],
333
- [ 2012,10, 1, 9,59, 2012,10, 1, 0,50, 59,2012,10, 1, 9,59],
334
- [ 2012,10, 1, 9, 0, 2012,10, 1, 8,50, 0,2012,10, 1, 9, 0],
335
- [ 2012,10, 1,23,59, 2012,10, 1, 0, 0, 479,2012,10, 1,23,59],
336
- [ 2012,10, 2, 0, 0, 2012,10, 1, 0, 0, 480,2012,10, 2, 0, 0],
337
- [ 2012,10, 2, 0, 1, 2012,10, 1, 0, 0, 480,2012,10, 2, 0, 0],
338
- [ 2013, 3,22, 6,11, 2012,10, 1, 0, 0, 480,2012,10, 2, 0, 0]
339
- ].each {|start_year, start_month, start_day, start_hour,start_min,
340
- finish_year, finish_month, finish_day, finish_hour,finish_min,result,
341
- y,m,d,h,n|
342
- start=DateTime.new(start_year, start_month, start_day, start_hour,start_min)
343
- finish=DateTime.new(finish_year, finish_month, finish_day, finish_hour,finish_min)
344
- expected_date=DateTime.new(y,m,d,h,n)
345
- duration, result_date=day.diff(start,finish)
346
- assert_equal result, duration,"duration diff(#{start}, #{finish})"
347
- assert_equal expected_date, result_date,"date diff(#{start}, #{finish})"
348
- }
349
-
350
- end
351
-
352
- private
353
-
354
- def week(start,finish,type)
355
- return Workpattern::Week.new(start,finish,type)
356
- end
357
-
358
- def clock(hour,min)
359
- return Workpattern.clock(hour,min)
360
- end
361
- end
362
-