Improved TimeCalculation, added unit tests.
This commit is contained in:
parent
c6e32501f6
commit
dfcfc7ab28
2 changed files with 47 additions and 2 deletions
|
@ -236,6 +236,8 @@ put working hours matrix and timezone in function, returns UTC working hours mat
|
||||||
start_time = Time.parse( start_time.to_s + ' UTC' )
|
start_time = Time.parse( start_time.to_s + ' UTC' )
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return start_time if diff_in_min == 0
|
||||||
|
|
||||||
# if no config is given, just return calculation directly
|
# if no config is given, just return calculation directly
|
||||||
if !config
|
if !config
|
||||||
return start_time + (diff_in_min * 60)
|
return start_time + (diff_in_min * 60)
|
||||||
|
@ -288,8 +290,12 @@ put working hours matrix and timezone in function, returns UTC working hours mat
|
||||||
# fillup to first full hour
|
# fillup to first full hour
|
||||||
if first_loop
|
if first_loop
|
||||||
|
|
||||||
# get rest of this hour
|
# get rest of this hour if diff_in_min in lower the one hour
|
||||||
diff = 3600 - (start_time - start_time.beginning_of_hour)
|
diff_to_count = 3600
|
||||||
|
if diff_to_count > (diff_in_min * 60)
|
||||||
|
diff_to_count = diff_in_min * 60
|
||||||
|
end
|
||||||
|
diff = diff_to_count - (start_time - start_time.beginning_of_hour)
|
||||||
start_time += diff
|
start_time += diff
|
||||||
|
|
||||||
# check if it's countable hour
|
# check if it's countable hour
|
||||||
|
@ -318,6 +324,7 @@ put working hours matrix and timezone in function, returns UTC working hours mat
|
||||||
|
|
||||||
# check if it's business hour and count
|
# check if it's business hour and count
|
||||||
if working_hours[ week_day_map[week_day] ][ next_hour ]
|
if working_hours[ week_day_map[week_day] ][ next_hour ]
|
||||||
|
|
||||||
# check if count is within this hour
|
# check if count is within this hour
|
||||||
if count > 59 * 60
|
if count > 59 * 60
|
||||||
diff = 3600
|
diff = 3600
|
||||||
|
|
|
@ -509,6 +509,44 @@ class WorkingTimeTest < ActiveSupport::TestCase
|
||||||
:diff => 119,
|
:diff => 119,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# test 18
|
||||||
|
{
|
||||||
|
:start => '2013-10-21 04:01:00',
|
||||||
|
:dest_time => '2013-10-21 04:01:00',
|
||||||
|
:diff => 0,
|
||||||
|
},
|
||||||
|
|
||||||
|
# test 19
|
||||||
|
{
|
||||||
|
:start => '2013-04-12 21:20:15',
|
||||||
|
:dest_time => '2013-04-12 21:20:15',
|
||||||
|
:diff => 0,
|
||||||
|
:config => {
|
||||||
|
'Mon' => true,
|
||||||
|
'Tue' => true,
|
||||||
|
'Wed' => true,
|
||||||
|
'Thu' => true,
|
||||||
|
'Fri' => true,
|
||||||
|
'beginning_of_workday' => '8:00 am',
|
||||||
|
'end_of_workday' => '6:00 pm',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
# test 20
|
||||||
|
{
|
||||||
|
:start => '2013-04-12 11:20:15',
|
||||||
|
:dest_time => '2013-04-12 11:21:15',
|
||||||
|
:diff => 1,
|
||||||
|
:config => {
|
||||||
|
'Mon' => true,
|
||||||
|
'Tue' => true,
|
||||||
|
'Wed' => true,
|
||||||
|
'Thu' => true,
|
||||||
|
'Fri' => true,
|
||||||
|
'beginning_of_workday' => '8:00 am',
|
||||||
|
'end_of_workday' => '6:00 pm',
|
||||||
|
},
|
||||||
|
},
|
||||||
]
|
]
|
||||||
tests.each { |test|
|
tests.each { |test|
|
||||||
dest_time = TimeCalculation.dest_time( test[:start] + ' UTC', test[:diff], test[:config], test[:timezone] )
|
dest_time = TimeCalculation.dest_time( test[:start] + ' UTC', test[:diff], test[:config], test[:timezone] )
|
||||||
|
|
Loading…
Reference in a new issue