workpattern 0.3.5 → 0.3.6

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.
@@ -50,21 +50,16 @@ module Workpattern
50
50
 
51
51
  raise(NameError, "Workpattern '#{name}' already exists and can't be created again") if @@workpatterns.key?(name)
52
52
 
53
- if span < 0
54
- offset = span.abs - 1
55
- else
56
- offset = 0
57
- end
58
-
53
+ span < 0 ? offset = span.abs - 1 : offset = 0
54
+
59
55
  @name = name
60
56
  @base = base
61
57
  @span = span
62
58
  @from = DateTime.new(base.abs - offset)
63
- @to = DateTime.new(@from.year + span.abs - 1,12,31,23,59)
59
+ @to = DateTime.new(from.year + span.abs - 1,12,31,23,59)
64
60
  @weeks = SortedSet.new
65
- @weeks << Week.new(@from,@to,1)
66
-
67
-
61
+ @weeks << Week.new(from,to,1)
62
+
68
63
  @@workpatterns[name]=self
69
64
  end
70
65
 
@@ -95,11 +90,7 @@ module Workpattern
95
90
  # @return [Boolean] true if the named <tt>Workpattern</tt> existed or false if it doesn't
96
91
  #
97
92
  def self.delete(name)
98
- if @@workpatterns.delete(name).nil?
99
- return false
100
- else
101
- return true
102
- end
93
+ @@workpatterns.delete(name).nil? ? false : true
103
94
  end
104
95
 
105
96
  # Applys a working or resting pattern to the <tt>Workpattern</tt> object.
@@ -124,45 +115,43 @@ module Workpattern
124
115
  #
125
116
  def workpattern(opts={})
126
117
 
127
- args={:start => @from, :finish => @to, :days => :all,
118
+ args={:start => from, :finish => to, :days => :all,
128
119
  :from_time => FIRST_TIME_IN_DAY, :to_time => LAST_TIME_IN_DAY,
129
120
  :work_type => WORK}
130
121
 
131
122
  args.merge! opts
132
123
 
133
- @@persistence.store( name: @name, workpattern: args) if self.class.persistence?
124
+ @@persistence.store( name: name, workpattern: args) if self.class.persistence?
134
125
 
135
126
  args[:start] = dmy_date(args[:start])
136
127
  args[:finish] = dmy_date(args[:finish])
137
- from_time = hhmn_date(args[:from_time])
138
- to_time = hhmn_date(args[:to_time])
139
-
128
+ args[:from_time] = hhmn_date(args[:from_time])
129
+ args[:to_time] = hhmn_date(args[:to_time])
130
+
140
131
  upd_start=args[:start]
141
132
  upd_finish=args[:finish]
142
133
  while (upd_start <= upd_finish)
143
134
 
144
135
  current_wp=find_weekpattern(upd_start)
136
+
145
137
  if (current_wp.start == upd_start)
146
138
  if (current_wp.finish > upd_finish)
147
139
  clone_wp=clone_and_adjust_current_wp(current_wp, upd_finish+1,current_wp.finish,upd_start,upd_finish)
148
- clone_wp.workpattern(args[:days],from_time,to_time,args[:work_type])
149
- @weeks<< clone_wp
140
+ set_workpattern_and_store(clone_wp,args)
150
141
  upd_start=upd_finish+1
151
142
  else # (current_wp.finish == upd_finish)
152
- current_wp.workpattern(args[:days],from_time,to_time,args[:work_type])
143
+ current_wp.workpattern(args[:days],args[:from_time],args[:to_time],args[:work_type])
153
144
  upd_start=current_wp.finish + 1
154
145
  end
155
146
  else
156
147
  clone_wp=clone_and_adjust_current_wp(current_wp, current_wp.start,upd_start-1,upd_start)
157
148
  if (clone_wp.finish <= upd_finish)
158
- clone_wp.workpattern(args[:days],from_time,to_time,args[:work_type])
159
- @weeks<< clone_wp
149
+ set_workpattern_and_store(clone_wp,args)
160
150
  upd_start=clone_wp.finish+1
161
151
  else
162
152
  after_wp=clone_and_adjust_current_wp(clone_wp, upd_start,upd_finish,upd_finish+1)
163
- @weeks<< after_wp
164
- clone_wp.workpattern(args[:days],from_time,to_time,args[:work_type])
165
- @weeks<< clone_wp
153
+ weeks<< after_wp
154
+ set_workpattern_and_store(clone_wp,args)
166
155
  upd_start=clone_wp.finish+1
167
156
  end
168
157
  end
@@ -253,15 +242,15 @@ module Workpattern
253
242
  def find_weekpattern(date)
254
243
  # find the pattern that fits the date
255
244
  #
256
- if date<@from
257
- result = Week.new(DateTime.jd(0),@from-MINUTE,1)
258
- elsif date>@to
259
- result = Week.new(@to+MINUTE,DateTime.new(9999),1)
245
+ if date<from
246
+ result = Week.new(DateTime.jd(0),from-MINUTE,1)
247
+ elsif date>to
248
+ result = Week.new(to+MINUTE,DateTime.new(9999),1)
260
249
  else
261
250
 
262
251
  date = DateTime.new(date.year,date.month,date.day)
263
252
 
264
- result=@weeks.find {|week| week.start <= date and week.finish >= date}
253
+ result=weeks.find {|week| week.start <= date and week.finish >= date}
265
254
  end
266
255
  return result
267
256
  end
@@ -283,21 +272,20 @@ module Workpattern
283
272
  def hhmn_date(date)
284
273
  return Clock.new(date.hour,date.min)
285
274
  end
286
-
287
- private
288
-
275
+
289
276
  # Handles cloning of Week Pattern including date adjustments
290
277
  #
291
278
  def clone_and_adjust_current_wp(current_wp, current_start,current_finish,clone_start,clone_finish=nil)
292
279
  clone_wp=current_wp.duplicate
293
280
  current_wp.adjust(current_start,current_finish)
294
- if (clone_finish.nil?)
295
- clone_wp.adjust(clone_start,clone_wp.finish)
296
- else
297
- clone_wp.adjust(clone_start,clone_finish)
298
- end
281
+ clone_finish.nil? ? clone_wp.adjust(clone_start,clone_wp.finish) : clone_wp.adjust(clone_start,clone_finish)
299
282
  return clone_wp
300
283
  end
284
+
285
+ def set_workpattern_and_store(new_wp, args)
286
+ new_wp.workpattern(args[:days],args[:from_time],args[:to_time],args[:work_type])
287
+ weeks<< new_wp
288
+ end
301
289
  end
302
290
  end
303
291
 
data/test/test_clock.rb CHANGED
@@ -25,6 +25,7 @@ class TestClock < MiniTest::Unit::TestCase #:nodoc:
25
25
  assert_equal 20, clock.min, "minute is 20"
26
26
  time = clock.time
27
27
  assert time.kind_of?(DateTime), "must return a DateTime object"
28
+ assert_equal DateTime.new(1963,6,10,4,20), time
28
29
  assert_equal 4, time.hour, "hour in the day must be 4"
29
30
  assert_equal 20, time.min, "minute in the day must be 20"
30
31
  end
data/test/test_day.rb CHANGED
@@ -310,7 +310,7 @@ class TestDay < MiniTest::Unit::TestCase #:nodoc:
310
310
  assert_equal 0,remainder
311
311
  refute midnight
312
312
  end
313
-
313
+
314
314
  def test_must_subtract_1_from_zero_minutes_from_resting_day
315
315
  start_date=DateTime.new(2013,1,1,0,0)
316
316
  result, remainder, midnight=@resting_day.calc(start_date,-1,true)
@@ -343,177 +343,213 @@ class TestDay < MiniTest::Unit::TestCase #:nodoc:
343
343
  assert midnight
344
344
  end
345
345
 
346
- ############################################################################
347
- ############################################################################
348
- ############################################################################
349
-
350
- def test_must_subtract_minutes_in_a_patterned_day
351
-
352
- day = Workpattern::Day.new(1)
353
- [[0,0,8,59],
354
- [12,0,12,59],
355
- [17,0,22,59]
356
- ].each {|start_hour,start_min,finish_hour,finish_min|
357
- day.workpattern(clock(start_hour, start_min),
358
- clock(finish_hour, finish_min),
359
- 0)
360
- }
361
- assert_equal 480, day.total, "minutes in patterned day should be 480"
362
- assert_equal 1, day.minutes(16,59,16,59),"16:59 should be 1"
363
- assert_equal 0, day.minutes(17,0,17,0),"17:00 should be 0"
364
- assert_equal 0, day.minutes(22,59,22,59),"22:59 should be 0"
365
- assert_equal 1, day.minutes(23,0,23,0),"23:00 should be 1"
366
- # y ,m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight,midnightr
367
- tests=[
368
- [2000,1 ,1 ,0 ,0 ,-3 ,1999,12,31,0 ,0 ,-3 ,false ,true],
369
- [2000,1 ,1 ,0 ,0 ,0 ,2000,1 ,1 ,0 ,0 ,0 ,false ,false],
370
- [2000,1 ,1 ,0 ,59,0 ,2000,1 ,1 ,0 ,59,0 ,false ,false],
371
- [2000,1 ,1 ,9 ,4 ,-3 ,2000,1 ,1 ,9 ,1 ,0 ,false ,false],
372
- [2000,1 ,1 ,0 ,0 ,-60 ,1999,12,31,0 ,0 ,-60 ,false ,true],
373
- [2000,1 ,1 ,0 ,0 ,-61 ,1999,12,31,0 ,0 ,-61 ,false ,true],
374
- [2000,1 ,1 ,9 ,30,-60 ,1999,12,31,0 ,0 ,-30 ,false ,true],
375
- [2000,12,31,22,59,-1 ,2000,12,31,16,59,0 ,false ,false],
376
- [2000,1 ,1 ,9 ,10,-33 ,1999,12,31,0 ,0 ,-23 ,false ,true],
377
- [2000,1 ,1 ,9 ,10,-60 ,1999,12,31,0 ,0 ,-50 ,false ,true],
378
- [2000,1 ,1 ,9 ,1 ,-931,1999,12,31,0 ,0 ,-930,false ,true],
379
- [2000,1 ,1 ,12,0 ,-1 ,2000,1 ,1 ,11,59,0 ,false ,false],
380
- [2000,1 ,1 ,12,59,-1 ,2000,1 ,1 ,11,59,0 ,false ,false],
381
- [2000,1 ,1 ,0 ,0 ,-3 ,2000,1 ,1 ,23,57,0 ,true ,false],
382
- [2000,1 ,1 ,0 ,0 ,0 ,2000,1 ,1 ,0 ,0 ,0 ,true ,false],
383
- [2000,1 ,1 ,0 ,59,0 ,2000,1 ,1 ,0 ,59,0 ,true ,false],
384
- [2000,1 ,1 ,9 ,4 ,-3 ,2000,1 ,1 ,9 ,1 ,0 ,true ,false],
385
- [2000,1 ,1 ,0 ,0 ,-60 ,2000,1 ,1 ,23,0 ,0 ,true ,false],
386
- [2000,1 ,1 ,0 ,0 ,-61 ,2000,1 ,1 ,16,59,0 ,true ,false],
387
- [2000,1 ,1 ,0 ,0 ,-931,1999,12,31,0 ,0 ,-451,true ,true],
388
- [2000,1 ,1 ,12,0 ,-1 ,2000,1 ,1 ,11,59,0 ,true ,false]
389
- ]
390
- clue = "subtract minutes in a patterned day"
391
- calc_test(day,tests,clue)
392
-
346
+ def test_must_subtract_more_than_available_minutes_in_patterned_day
347
+ start_date=DateTime.new(2013,1,1,12,23)
348
+ result, remainder, midnight=@pattern_day.calc(start_date,-208)
349
+ assert_equal DateTime.new(2012,12,31,0,0), result
350
+ assert_equal -1,remainder
351
+ assert midnight
352
+ end
353
+
354
+ def test_must_subtract_less_than_available_minutes_in_patterned_day
355
+ start_date=DateTime.new(2013,1,1,12,23)
356
+ result, remainder, midnight=@pattern_day.calc(start_date,-206)
357
+ assert_equal DateTime.new(2013,1,1,8,35), result
358
+ assert_equal 0,remainder
359
+ refute midnight
360
+ end
361
+
362
+ def test_must_subtract_available_minutes_in_patterned_day
363
+ start_date=DateTime.new(2013,1,1,12,23)
364
+ result, remainder, midnight=@pattern_day.calc(start_date,-207)
365
+ assert_equal DateTime.new(2013,1,1,8,34), result
366
+ assert_equal 0,remainder
367
+ refute midnight
368
+ end
369
+
370
+ def test_must_subtract_1_minute_from_start_of_patterned_day
371
+ start_date=DateTime.new(2013,1,1,0,0)
372
+ result, remainder, midnight=@pattern_day.calc(start_date,-1)
373
+ assert_equal DateTime.new(2012,12,31,0,0), result
374
+ assert_equal -1,remainder
375
+ assert midnight
376
+ end
377
+
378
+ def test_must_subtract_1_minute_from_start_of_next_patterned_day
379
+ start_date=DateTime.new(2013,1,1,0,0)
380
+ result, remainder, midnight=@pattern_day.calc(start_date,-1,true)
381
+ assert_equal DateTime.new(2013,1,1,23,59), result
382
+ assert_equal 0,remainder
383
+ refute midnight
384
+ end
385
+
386
+ def test_must_subtract_1_day_from_start_of_next_patterned_day
387
+ start_date=DateTime.new(2013,1,1,0,0)
388
+ result, remainder, midnight=@pattern_day.calc(start_date,-514,true)
389
+ assert_equal DateTime.new(2013,1,1,8,34), result
390
+ assert_equal 0,remainder
391
+ refute midnight
392
+ end
393
+
394
+ def test_must_return_0_difference_between_same_time_in_working_day
395
+ start_date=DateTime.new(2013,1,1,8,32)
396
+ difference,result_date=@working_day.diff(start_date,start_date)
397
+ assert_equal 0, difference
398
+ assert_equal start_date, result_date
393
399
  end
394
-
395
-
396
- def test_must_calculate_difference_between_times_in_working_day
397
- day = Workpattern::Day.new(1)
398
-
399
- [
400
- [ 2000, 1, 1, 0, 0, 2000, 1, 1, 0, 0, 0,2000, 1, 1, 0, 0],
401
- [ 2000, 1, 1, 0, 0, 2000, 1, 1, 0, 1, 1,2000, 1, 1, 0, 1],
402
- [ 2000, 1, 1, 0,50, 2000, 1, 1, 0,59, 9,2000, 1, 1, 0,59],
403
- [ 2000, 1, 1, 8,50, 2000, 1, 1, 9, 0, 10,2000, 1, 1, 9, 0],
404
- [ 2000, 1, 1, 0, 0, 2000, 1, 1,23,59,1439,2000, 1, 1,23,59],
405
- [ 2000, 1, 1, 0, 0, 2000, 1, 2, 0, 0,1440,2000, 1, 2, 0, 0],
406
- [ 2000, 1, 1, 0, 0, 2000, 1, 2, 0, 1,1440,2000, 1, 2, 0, 0],
407
- [ 2000, 1, 1, 0, 0, 2010, 3,22, 6,11,1440,2000, 1, 2, 0, 0],
408
- [ 2000, 1, 1, 0, 1, 2000, 1, 1, 0, 0, 1,2000, 1, 1, 0, 1],
409
- [ 2000, 1, 1, 0,59, 2000, 1, 1, 0,50, 9,2000, 1, 1, 0,59],
410
- [ 2000, 1, 1, 9, 0, 2000, 1, 1, 8,50, 10,2000, 1, 1, 9, 0],
411
- [ 2000, 1, 1,23,59, 2000, 1, 1, 0, 0,1439,2000, 1, 1,23,59],
412
- [ 2000, 1, 2, 0, 0, 2000, 1, 1, 0, 0,1440,2000, 1, 2, 0, 0],
413
- [ 2000, 1, 2, 0, 1, 2000, 1, 1, 0, 0,1440,2000, 1, 2, 0, 0],
414
- [ 2010, 3,22, 6,11, 2000, 1, 1, 0, 0,1440,2000, 1, 2, 0, 0]
415
- ].each {|start_year, start_month, start_day, start_hour,start_min,
416
- finish_year, finish_month, finish_day, finish_hour,finish_min,result,
417
- y,m,d,h,n|
418
- start=DateTime.new(start_year, start_month, start_day, start_hour,start_min)
419
- finish=DateTime.new(finish_year, finish_month, finish_day, finish_hour,finish_min)
420
- expected_date=DateTime.new(y,m,d,h,n)
421
- duration, result_date=day.diff(start,finish)
422
- assert_equal result, duration,"duration diff(#{start}, #{finish})"
423
- assert_equal expected_date, result_date,"date diff(#{start}, #{finish})"
424
- }
400
+
401
+ def test_must_return_difference_to_end_of_day_using_different_days_in_working_day
402
+ start_date=DateTime.new(2013,1,1,23,30)
403
+ finish_date=DateTime.new(2013,1,2,8,1)
404
+ difference,result_date=@working_day.diff(start_date,finish_date)
405
+ assert_equal 30, difference
406
+ assert_equal DateTime.new(2013,1,2,0,0), result_date
425
407
  end
426
408
 
427
- def test_must_calculate_difference_between_times_in_resting_day
428
- day = Workpattern::Day.new(0)
429
-
430
- [
431
- [ 2000, 1, 1, 0, 0, 2000, 1, 1, 0, 0, 0,2000, 1, 1, 0, 0],
432
- [ 2000, 1, 1, 0, 0, 2000, 1, 1, 0, 1, 0,2000, 1, 1, 0, 1],
433
- [ 2000, 1, 1, 0,50, 2000, 1, 1, 0,59, 0,2000, 1, 1, 0,59],
434
- [ 2000, 1, 1, 8,50, 2000, 1, 1, 9, 0, 0,2000, 1, 1, 9, 0],
435
- [ 2000, 1, 1, 0, 0, 2000, 1, 1,23,59, 0,2000, 1, 1,23,59],
436
- [ 2000, 1, 1, 0, 0, 2000, 1, 2, 0, 0, 0,2000, 1, 2, 0, 0],
437
- [ 2000, 1, 1, 0, 0, 2000, 1, 2, 0, 1, 0,2000, 1, 2, 0, 0],
438
- [ 2000, 1, 1, 0, 0, 2010, 3,22, 6,11, 0,2000, 1, 2, 0, 0],
439
- [ 2000, 1, 1, 0, 1, 2000, 1, 1, 0, 0, 0,2000, 1, 1, 0, 1],
440
- [ 2000, 1, 1, 0,59, 2000, 1, 1, 0,50, 0,2000, 1, 1, 0,59],
441
- [ 2000, 1, 1, 9, 0, 2000, 1, 1, 8,50, 0,2000, 1, 1, 9, 0],
442
- [ 2000, 1, 1,23,59, 2000, 1, 1, 0, 0, 0,2000, 1, 1,23,59],
443
- [ 2000, 1, 2, 0, 0, 2000, 1, 1, 0, 0, 0,2000, 1, 2, 0, 0],
444
- [ 2000, 1, 2, 0, 1, 2000, 1, 1, 0, 0, 0,2000, 1, 2, 0, 0],
445
- [ 2010, 3,22, 6,11, 2000, 1, 1, 0, 0, 0,2000, 1, 2, 0, 0]
446
- ].each {|start_year, start_month, start_day, start_hour,start_min,
447
- finish_year, finish_month, finish_day, finish_hour,finish_min,result,
448
- y,m,d,h,n|
449
- start=DateTime.new(start_year, start_month, start_day, start_hour,start_min)
450
- finish=DateTime.new(finish_year, finish_month, finish_day, finish_hour,finish_min)
451
- expected_date=DateTime.new(y,m,d,h,n)
452
- duration, result_date=day.diff(start,finish)
453
- assert_equal result, duration,"duration diff(#{start}, #{finish})"
454
- assert_equal expected_date, result_date,"date diff(#{start}, #{finish})"
455
- }
456
- end
457
-
458
- def test_must_calculate_difference_between_times_in_pattern_day
459
-
460
- day = Workpattern::Day.new(1)
461
- [[0,0,8,59],
462
- [12,0,12,59],
463
- [17,0,22,59]
464
- ].each {|start_hour,start_min,finish_hour,finish_min|
465
- day.workpattern(clock(start_hour, start_min),
466
- clock(finish_hour, finish_min),
467
- 0)
468
- }
469
- assert_equal 480, day.total, "minutes in patterned day should be 480"
470
- assert_equal 1, day.minutes(16,59,16,59),"16:59 should be 1"
471
- assert_equal 0, day.minutes(17,0,17,0),"17:00 should be 0"
472
- assert_equal 0, day.minutes(22,59,22,59),"22:59 should be 0"
473
- assert_equal 1, day.minutes(23,0,23,0),"23:00 should be 1"
474
-
475
- [
476
- [ 2000, 1, 1, 0, 0, 2000, 1, 1, 0, 0, 0,2000, 1, 1, 0, 0],
477
- [ 2000, 1, 1, 0, 0, 2000, 1, 1, 0, 1, 0,2000, 1, 1, 0, 1],
478
- [ 2000, 1, 1, 0,50, 2000, 1, 1, 9,59, 59,2000, 1, 1, 9,59],
479
- [ 2000, 1, 1, 8,50, 2000, 1, 1, 9,10, 10,2000, 1, 1, 9,10],
480
- [ 2000, 1, 1, 0, 0, 2000, 1, 1,23,59, 479,2000, 1, 1,23,59],
481
- [ 2000, 1, 1, 0, 0, 2000, 1, 2, 0, 0, 480,2000, 1, 2, 0, 0],
482
- [ 2000, 1, 1, 0, 0, 2000, 1, 2, 0, 1, 480,2000, 1, 2, 0, 0],
483
- [ 2000, 1, 1, 0, 0, 2010, 3,22, 6,11, 480,2000, 1, 2, 0, 0],
484
- [ 2000, 1, 1, 0, 1, 2000, 1, 1, 0, 0, 0,2000, 1, 1, 0, 1],
485
- [ 2000, 1, 1, 9,59, 2000, 1, 1, 0,50, 59,2000, 1, 1, 9,59],
486
- [ 2000, 1, 1, 9, 0, 2000, 1, 1, 8,50, 0,2000, 1, 1, 9, 0],
487
- [ 2000, 1, 1,23,59, 2000, 1, 1, 0, 0, 479,2000, 1, 1,23,59],
488
- [ 2000, 1, 2, 0, 0, 2000, 1, 1, 0, 0, 480,2000, 1, 2, 0, 0],
489
- [ 2000, 1, 2, 0, 1, 2000, 1, 1, 0, 0, 480,2000, 1, 2, 0, 0],
490
- [ 2010, 3,22, 6,11, 2000, 1, 1, 0, 0, 480,2000, 1, 2, 0, 0]
491
- ].each {|start_year, start_month, start_day, start_hour,start_min,
492
- finish_year, finish_month, finish_day, finish_hour,finish_min,result,
493
- y,m,d,h,n|
494
- start=DateTime.new(start_year, start_month, start_day, start_hour,start_min)
495
- finish=DateTime.new(finish_year, finish_month, finish_day, finish_hour,finish_min)
496
- expected_date=DateTime.new(y,m,d,h,n)
497
- duration, result_date=day.diff(start,finish)
498
- assert_equal result, duration,"duration diff(#{start}, #{finish})"
499
- assert_equal expected_date, result_date,"date diff(#{start}, #{finish})"
500
- }
409
+ def test_must_return_difference_to_from_start_of_day_to_end_of_day_using_different_days_in_working_day
410
+ start_date=DateTime.new(2013,1,1,0,0)
411
+ finish_date=DateTime.new(2013,1,2,8,1)
412
+ difference,result_date=@working_day.diff(start_date,finish_date)
413
+ assert_equal 1440, difference
414
+ assert_equal DateTime.new(2013,1,2,0,0), result_date
415
+ end
501
416
 
417
+ def test_must_return_difference_from_start_of_day_in_working_day
418
+ start_date=DateTime.new(2013,1,1,0,0)
419
+ finish_date=DateTime.new(2013,1,1,3,1)
420
+ difference,result_date=@working_day.diff(start_date,finish_date)
421
+ assert_equal 181, difference
422
+ assert_equal finish_date, result_date
502
423
  end
503
-
504
- private
505
424
 
506
- def calc_test(day,tests,clue)
507
- tests.each{|y,m,d,h,n,dur,yr,mr,dr,hr,nr,rem, midnight, midnightr|
508
- start_date=DateTime.new(y,m,d,h,n)
509
- result_date,remainder, result_midnight = day.calc(start_date,dur, midnight)
510
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result_date, "result date calc(#{start_date},#{dur},#{midnight}) for #{clue}"
511
- assert_equal rem, remainder, "result remainder calc(#{start_date},#{dur},#{midnight}) for #{clue}"
512
- assert_equal midnightr,result_midnight, "result midnight calc(#{start_date},#{dur},#{midnight}) for #{clue}"
513
- }
514
-
425
+ def test_must_return_difference_between_two_times_in_working_day
426
+ start_date=DateTime.new(2013,1,1,2,11)
427
+ finish_date=DateTime.new(2013,1,1,9,15)
428
+ difference,result_date=@working_day.diff(start_date,finish_date)
429
+ assert_equal 424, difference
430
+ assert_equal finish_date, result_date
431
+ end
432
+
433
+ def test_must_return_0_difference_between_same_time_in_resting_day
434
+ start_date=DateTime.new(2013,1,1,8,32)
435
+ difference,result_date=@resting_day.diff(start_date,start_date)
436
+ assert_equal 0, difference
437
+ assert_equal start_date, result_date
438
+ end
439
+
440
+ def test_must_return_difference_to_end_of_day_using_different_days_in_resting_day
441
+ start_date=DateTime.new(2013,1,1,23,30)
442
+ finish_date=DateTime.new(2013,1,2,8,1)
443
+ difference,result_date=@resting_day.diff(start_date,finish_date)
444
+ assert_equal 0, difference
445
+ assert_equal DateTime.new(2013,1,2,0,0), result_date
446
+ end
447
+
448
+ def test_must_return_difference_to_from_start_of_day_to_end_of_day_using_different_days_in_resting_day
449
+ start_date=DateTime.new(2013,1,1,0,0)
450
+ finish_date=DateTime.new(2013,1,2,8,1)
451
+ difference,result_date=@resting_day.diff(start_date,finish_date)
452
+ assert_equal 0, difference
453
+ assert_equal DateTime.new(2013,1,2,0,0), result_date
454
+ end
455
+
456
+ def test_must_return_difference_from_start_of_day_in_resting_day
457
+ start_date=DateTime.new(2013,1,1,0,0)
458
+ finish_date=DateTime.new(2013,1,1,3,1)
459
+ difference,result_date=@resting_day.diff(start_date,finish_date)
460
+ assert_equal 0, difference
461
+ assert_equal finish_date, result_date
462
+ end
463
+
464
+ def test_must_return_difference_between_two_times_in_resting_day
465
+ start_date=DateTime.new(2013,1,1,2,11)
466
+ finish_date=DateTime.new(2013,1,1,9,15)
467
+ difference,result_date=@resting_day.diff(start_date,finish_date)
468
+ assert_equal 0, difference
469
+ assert_equal finish_date, result_date
470
+ end
515
471
 
472
+ ####
473
+
474
+ def test_must_return_0_difference_between_same_working_time_in_patterned_day
475
+ start_date=DateTime.new(2013,1,1,8,34)
476
+ difference,result_date=@pattern_day.diff(start_date,start_date)
477
+ assert_equal 0, difference
478
+ assert_equal start_date, result_date
516
479
  end
480
+
481
+ def test_must_return_0_difference_between_same_resting_time_in_patterned_day
482
+ start_date=DateTime.new(2013,1,1,8,32)
483
+ difference,result_date=@pattern_day.diff(start_date,start_date)
484
+ assert_equal 0, difference
485
+ assert_equal start_date, result_date
486
+ end
487
+
488
+ def test_must_return_difference_to_end_of_day_from_working_time_using_different_days_in_patterned_day
489
+ start_date=DateTime.new(2013,1,1,12,23)
490
+ finish_date=DateTime.new(2013,1,2,8,1)
491
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
492
+ assert_equal 307, difference
493
+ assert_equal DateTime.new(2013,1,2,0,0), result_date
494
+ end
495
+
496
+ def test_must_return_difference_to_end_of_day_from_resting_time_using_different_days_in_patterned_day
497
+ start_date=DateTime.new(2013,1,1,12,10)
498
+ finish_date=DateTime.new(2013,1,2,8,1)
499
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
500
+ assert_equal 308, difference
501
+ assert_equal DateTime.new(2013,1,2,0,0), result_date
502
+ end
503
+
504
+ def test_must_return_difference_to_from_start_of_day_to_end_of_day_using_different_days_in_pattern_day
505
+ start_date=DateTime.new(2013,1,1,0,0)
506
+ finish_date=DateTime.new(2013,1,2,8,1)
507
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
508
+ assert_equal 514, difference
509
+ assert_equal DateTime.new(2013,1,2,0,0), result_date
510
+ end
511
+
512
+ def test_must_return_difference_from_start_of_day_in_pattern_day
513
+ start_date=DateTime.new(2013,1,1,0,0)
514
+ finish_date=DateTime.new(2013,1,1,11,1)
515
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
516
+ assert_equal 147, difference
517
+ assert_equal finish_date, result_date
518
+ end
519
+
520
+ def test_must_return_difference_between_two_working_times_in_pattern_day
521
+ start_date=DateTime.new(2013,1,1,8,45)
522
+ finish_date=DateTime.new(2013,1,1,12,26)
523
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
524
+ assert_equal 199, difference
525
+ assert_equal finish_date, result_date
526
+ end
527
+
528
+ def test_must_return_difference_between_two_resting_times_in_pattern_day
529
+ start_date=DateTime.new(2013,1,1,8,20)
530
+ finish_date=DateTime.new(2013,1,1,12,40)
531
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
532
+ assert_equal 214, difference
533
+ assert_equal finish_date, result_date
534
+ end
535
+
536
+ def test_must_return_difference_between_working_and_resting_times_in_pattern_day
537
+ start_date=DateTime.new(2013,1,1,8,45)
538
+ finish_date=DateTime.new(2013,1,1,12,40)
539
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
540
+ assert_equal 203, difference
541
+ assert_equal finish_date, result_date
542
+ end
543
+
544
+ def test_must_return_difference_between_resting_and_working_times_in_pattern_day
545
+ start_date=DateTime.new(2013,1,1,12,15)
546
+ finish_date=DateTime.new(2013,1,1,23,30)
547
+ difference,result_date=@pattern_day.diff(start_date,finish_date)
548
+ assert_equal 278, difference
549
+ assert_equal finish_date, result_date
550
+ end
551
+
552
+ private
517
553
 
518
554
  def clock(hour,min)
519
555
  return Workpattern.clock(hour,min)