forked from bokmann/business_time
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_time_extensions.rb
94 lines (77 loc) · 4.03 KB
/
test_time_extensions.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
require 'helper'
class TestTimeExtensions < Test::Unit::TestCase
should "know a weekend day is not a workday" do
assert( Time.workday?(Time.parse("April 9, 2010 10:45 am")))
assert(!Time.workday?(Time.parse("April 10, 2010 10:45 am")))
assert(!Time.workday?(Time.parse("April 11, 2010 10:45 am")))
assert( Time.workday?(Time.parse("April 12, 2010 10:45 am")))
end
should "know a weekend day is not a workday (with a configured work week)" do
BusinessTime::Config.work_week = %w[sun mon tue wed thu]
assert( Time.weekday?(Time.parse("April 8, 2010 10:30am")))
assert(!Time.weekday?(Time.parse("April 9, 2010 10:30am")))
assert(!Time.weekday?(Time.parse("April 10, 2010 10:30am")))
assert( Time.weekday?(Time.parse("April 11, 2010 10:30am")))
end
should "know a holiday is not a workday" do
BusinessTime::Config.reset
BusinessTime::Config.holidays << Date.parse("July 4, 2010")
BusinessTime::Config.holidays << Date.parse("July 5, 2010")
assert(!Time.workday?(Time.parse("July 4th, 2010 1:15 pm")))
assert(!Time.workday?(Time.parse("July 5th, 2010 2:37 pm")))
end
should "know the beginning of the day for an instance" do
first = Time.parse("August 17th, 2010, 11:50 am")
expecting = Time.parse("August 17th, 2010, 9:00 am")
assert_equal expecting, Time.beginning_of_workday(first)
end
should "know the end of the day for an instance" do
first = Time.parse("August 17th, 2010, 11:50 am")
expecting = Time.parse("August 17th, 2010, 5:00 pm")
assert_equal expecting, Time.end_of_workday(first)
end
# ===================
should "calculate business time between different times on the same date (clockwise)" do
time_a = Time.parse('2012-02-01 10:00')
time_b = Time.parse('2012-02-01 14:20')
assert_equal time_a.business_time_until(time_b), 260.minutes
end
should "calculate business time between different times on the same date (counter clockwise)" do
time_a = Time.parse('2012-02-01 10:00')
time_b = Time.parse('2012-02-01 14:20')
assert_equal time_b.business_time_until(time_a), -260.minutes
end
should "calculate business time only within business hours even if second endpoint is out of business time" do
time_a = Time.parse('2012-02-01 10:00')
time_b = Time.parse("2012-02-01 " + BusinessTime::Config.end_of_workday) + 24.minutes
first_result = time_a.business_time_until(time_b)
time_b = Time.parse('2012-02-01 '+ BusinessTime::Config.end_of_workday)
second_result = time_a.business_time_until(time_b)
assert_equal first_result, second_result
assert_equal first_result, 7.hours
end
should "calculate business time only within business hours even if the first endpoint is out of business time" do
time_a = Time.parse("2012-02-01 7:25")
time_b = Time.parse("2012-02-01 15:30")
first_result = time_a.business_time_until(time_b)
assert_equal first_result, 390.minutes
end
should "return correct time between two consecutive days" do
time_a = Time.parse('2012-02-01 10:00')
time_b = Time.parse('2012-02-02 10:00')
working_hours = Time.parse(BusinessTime::Config.end_of_workday) - Time.parse(BusinessTime::Config.beginning_of_workday)
assert_equal time_a.business_time_until(time_b), working_hours
end
should "calculate proper timing if there are several days between" do
time_a = Time.parse('2012-02-01 10:00')
time_b = Time.parse('2012-02-09 11:00')
duration_of_working_day = Time.parse(BusinessTime::Config.end_of_workday) - Time.parse(BusinessTime::Config.beginning_of_workday)
assert_equal time_a.business_time_until(time_b), 6 * duration_of_working_day + 1.hour
assert_equal time_b.business_time_until(time_a), -(6 * duration_of_working_day + 1.hour)
end
should "example provided in the documentation be correct :)" do
ticket_reported = Time.parse("February 3, 2012, 10:40 am")
ticket_resolved = Time.parse("February 4, 2012, 10:50 am")
assert_equal ticket_reported.business_time_until(ticket_resolved), 8.hours + 10.minutes
end
end