workpattern 0.3.2 → 0.3.3

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 CHANGED
@@ -1,25 +1,3 @@
1
1
  require 'stringio'
2
- require 'test/unit'
2
+ require 'minitest/autorun'
3
3
  require File.dirname(__FILE__) + '/../lib/workpattern.rb'
4
-
5
- module Test::Unit
6
- # Used to fix a minor minitest/unit incompatibility in flexmock
7
- #AssertionFailedError = Class.new(StandardError)
8
-
9
- class TestCase
10
-
11
- def self.must(name, &block)
12
- test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
13
- defined = instance_method(test_name) rescue false
14
- raise "#{test_name} is already defined in #{self}" if defined
15
- if block_given?
16
- define_method(test_name, &block)
17
- else
18
- define_method(test_name) do
19
- flunk "No implementation provided for #{name}"
20
- end
21
- end
22
- end
23
-
24
- end
25
- end
data/test/test_hour.rb CHANGED
@@ -1,252 +1,389 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
- class TestHour < Test::Unit::TestCase #:nodoc:
3
+ class TestHour < MiniTest::Unit::TestCase #:nodoc:
4
4
 
5
5
  def setup
6
6
  @working_hour = Workpattern::WORKING_HOUR
7
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
+
8
13
  end
9
14
 
10
- must "ceate a working hour" do
11
- working_hour = Workpattern::WORKING_HOUR
12
- assert_equal 60, working_hour.wp_total,"working total minutes"
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"
13
19
  end
14
-
15
- must "ceate a resting hour" do
16
- resting_hour = Workpattern::RESTING_HOUR
17
- assert_equal 0, resting_hour.wp_total,"resting total minutes"
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"
18
25
  end
19
-
20
- must "set patterns correctly" do
21
- working_hour = Workpattern::WORKING_HOUR
22
- working_hour = working_hour.wp_workpattern(0,0,0)
23
- working_hour = working_hour.wp_workpattern(59,59,0)
24
- working_hour = working_hour.wp_workpattern(11,30,0)
25
- assert_equal 38,working_hour.wp_total, "total working minutes"
26
- assert_equal 1, working_hour.wp_first, "first minute of the day"
27
- assert_equal 58, working_hour.wp_last, "last minute of the day"
28
- assert !working_hour.wp_working?(0)
29
- assert working_hour.wp_working?(1)
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)
30
33
  end
31
-
32
- must 'add minutes in a working hour' do
33
-
34
- working_hour = Workpattern::WORKING_HOUR
35
- [
36
- [2000,1,1,0,0,3,2000,1,1,0,3,0],
37
- [2000,1,1,0,0,0,2000,1,1,0,0,0],
38
- [2000,1,1,0,59,0,2000,1,1,0,59,0],
39
- [2000,1,1,0,11,3,2000,1,1,0,14,0],
40
- [2000,1,1,0,0,60,2000,1,1,1,0,0],
41
- [2000,1,1,0,0,61,2000,1,1,1,0,1],
42
- [2000,1,1,0,30,60,2000,1,1,1,0,30],
43
- [2000,12,31,23,59,1,2001,1,1,0,0,0]
44
- ].each{|y,m,d,h,n,add,yr,mr,dr,hr,nr,rem|
45
- start=DateTime.new(y,m,d,h,n)
46
- result,remainder = working_hour.wp_calc(start,add)
47
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result, "result calc(#{start},#{add})"
48
- assert_equal rem, remainder, "remainder calc(#{start},#{add})"
49
- }
50
-
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
51
45
  end
52
-
53
- must 'add minutes in a resting hour' do
54
- resting_hour = Workpattern::RESTING_HOUR
55
- [
56
- [2000,1,1,0,0,3,2000,1,1,1,0,3],
57
- [2000,1,1,0,0,0,2000,1,1,0,0,0],
58
- [2000,1,1,0,59,0,2000,1,1,0,59,0],
59
- [2000,1,1,0,11,3,2000,1,1,1,0,3],
60
- [2000,1,1,0,0,60,2000,1,1,1,0,60],
61
- [2000,1,1,0,0,61,2000,1,1,1,0,61],
62
- [2000,1,1,0,30,60,2000,1,1,1,0,60],
63
- [2000,12,31,23,59,1,2001,1,1,0,0,1]
64
- ].each{|y,m,d,h,n,add,yr,mr,dr,hr,nr,rem|
65
- start=DateTime.new(y,m,d,h,n)
66
- result,remainder = resting_hour.wp_calc(start,add)
67
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result, "result calc(#{start},#{add})"
68
- assert_equal rem, remainder, "remainder calc(#{start},#{add})"
69
- }
70
-
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
71
52
  end
72
-
73
- must 'add minutes in a patterned hour' do
74
-
75
- pattern_hour = Workpattern::WORKING_HOUR
76
- pattern_hour = pattern_hour.wp_workpattern(1,10,0)
77
- pattern_hour = pattern_hour.wp_workpattern(55,59,0)
78
- [
79
- [2000,1,1,0,0,3,2000,1,1,0,13,0],
80
- [2000,1,1,0,0,0,2000,1,1,0,0,0],
81
- [2000,1,1,0,59,0,2000,1,1,0,59,0],
82
- [2000,1,1,0,11,3,2000,1,1,0,14,0],
83
- [2000,1,1,0,0,60,2000,1,1,1,0,15],
84
- [2000,1,1,0,0,61,2000,1,1,1,0,16],
85
- [2000,1,1,0,30,60,2000,1,1,1,0,35],
86
- [2000,12,31,23,59,1,2001,1,1,0,0,1]
87
- ].each{|y,m,d,h,n,add,yr,mr,dr,hr,nr,rem|
88
- start=DateTime.new(y,m,d,h,n)
89
- result,remainder = pattern_hour.wp_calc(start,add)
90
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result, "result calc(#{start},#{add})"
91
- assert_equal rem, remainder, "remainder calc(#{start},#{add})"
92
- }
93
-
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
94
59
  end
95
60
 
96
- must 'subtract minutes in a working hour' do
97
- working_hour = Workpattern::WORKING_HOUR
98
- [
99
- [2000,1,1,0,10,-3,2000,1,1,0,7,0],
100
- [2000,1,1,0,10,0,2000,1,1,0,10,0],
101
- [2000,1,1,0,59,0,2000,1,1,0,59,0],
102
- [2000,1,1,0,11,-3,2000,1,1,0,8,0],
103
- [2000,1,1,0,10,-60,2000,1,1,0,0,-50],
104
- [2000,1,1,0,10,-61,2000,1,1,0,0,-51],
105
- [2000,1,1,0,30,-60,2000,1,1,0,0,-30],
106
- [2001,1,1,0,0,-1,2001,1,1,0,0,-1]
107
- ].each{|y,m,d,h,n,add,yr,mr,dr,hr,nr,rem|
108
- start=DateTime.new(y,m,d,h,n)
109
- result,remainder = working_hour.wp_calc(start,add)
110
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result, "result calc(#{start},#{add})"
111
- assert_equal rem, remainder, "remainder calc(#{start},#{add})"
112
- }
113
-
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
114
66
  end
115
-
116
- must 'subtract minutes in a resting hour' do
117
- resting_hour = Workpattern::RESTING_HOUR
118
- [
119
- [2000,1,1,0,10,-3,2000,1,1,0,0,-3],
120
- [2000,1,1,0,10,0,2000,1,1,0,10,0],
121
- [2000,1,1,0,59,0,2000,1,1,0,59,0],
122
- [2000,1,1,0,11,-3,2000,1,1,0,0,-3],
123
- [2000,1,1,0,10,-60,2000,1,1,0,0,-60],
124
- [2000,1,1,0,10,-61,2000,1,1,0,0,-61],
125
- [2000,1,1,0,30,-60,2000,1,1,0,0,-60],
126
- [2001,1,1,0,0,-1,2001,1,1,0,0,-1]
127
- ].each{|y,m,d,h,n,add,yr,mr,dr,hr,nr,rem|
128
- start=DateTime.new(y,m,d,h,n)
129
- result,remainder = resting_hour.wp_calc(start,add)
130
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result, "result calc(#{start},#{add})"
131
- assert_equal rem, remainder, "remainder calc(#{start},#{add})"
132
- }
133
-
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
134
129
  end
135
130
 
136
- must 'subtract minutes in a patterned hour' do
137
-
138
- pattern_hour = Workpattern::WORKING_HOUR
139
- pattern_hour = pattern_hour.wp_workpattern(1,10,0)
140
- pattern_hour = pattern_hour.wp_workpattern(55,59,0)
141
- [
142
- [2000,1,1,0,0,-3,2000,1,1,0,0,-3],
143
- [2000,1,1,0,0,0,2000,1,1,0,0,0],
144
- [2000,1,1,0,59,0,2000,1,1,0,59,0],
145
- [2000,1,1,0,11,-2,2000,1,1,0,0,-1],
146
- [2000,1,1,0,0,-60,2000,1,1,0,0,-60],
147
- [2000,1,1,0,0,-61,2000,1,1,0,0,-61],
148
- [2000,1,1,0,30,-60,2000,1,1,0,0,-40],
149
- [2001,1,1,23,59,-1,2001,1,1,23,54,0]
150
- ].each{|y,m,d,h,n,add,yr,mr,dr,hr,nr,rem|
151
- start=DateTime.new(y,m,d,h,n)
152
- result,remainder = pattern_hour.wp_calc(start,add)
153
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result, "result calc(#{start},#{add})"
154
- assert_equal rem, remainder, "remainder calc(#{start},#{add})"
155
- }
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
156
136
  end
157
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
158
144
 
159
- must 'create complex patterns' do
160
- working_hour = Workpattern::WORKING_HOUR
161
- control=Array.new(60) {|i| 1}
162
- j=0
163
- [[0,0,0,59,1,59],
164
- [59,59,0,58,1,58],
165
- [11,30,0,38,1,58],
166
- [1,15,0,28,31,58],
167
- [2,5,1,32,2,58],
168
- [0,59,1,60,0,59],
169
- [0,59,0,0,nil,nil],
170
- [0,0,1,1,0,0],
171
- [59,59,1,2,0,59]
172
- ].each{|start,finish,type,total,first,last|
173
- working_hour = working_hour.wp_workpattern(start,finish,type)
174
- assert_equal total,working_hour.wp_total, "total working minutes #{j}"
175
- assert_equal first, working_hour.wp_first, "first minute of the day #{j}"
176
- assert_equal last, working_hour.wp_last, "last minute of the day #{j}"
177
- start.upto(finish) {|i| control[i]=type}
178
- 0.upto(59) {|i|
179
- if (control[i]==0)
180
- assert !working_hour.wp_working?(i)
181
- else
182
- assert working_hour.wp_working?(i)
183
- end
184
- }
185
- j+=1
186
- }
187
- end
188
-
189
- must "calculate difference between minutes in working hour" do
190
-
191
- working_hour = Workpattern::WORKING_HOUR
192
- [[0,0,0],
193
- [0,1,1],
194
- [50,59,9],
195
- [50,60,10],
196
- [0,59,59],
197
- [0,60,60],
198
- [1,0,1],
199
- [59,50,9],
200
- [60,50,10],
201
- [59,0,59],
202
- [60,0,60]
203
- ].each {|start,finish,result|
204
- assert_equal result, working_hour.wp_diff(start,finish),"diff(#{start},#{finish})"
205
- }
206
-
207
- end
208
-
209
- must "calculate difference between minutes in resting hour" do
210
- resting_hour = Workpattern::RESTING_HOUR
211
- [[0,0,0],
212
- [0,1,0],
213
- [50,59,0],
214
- [50,60,0],
215
- [0,59,0],
216
- [0,60,0],
217
- [1,0,0],
218
- [59,50,0],
219
- [60,50,0],
220
- [59,0,0],
221
- [60,0,0]
222
- ].each {|start,finish,result|
223
- assert_equal result, resting_hour.wp_diff(start,finish),"diff(#{start},#{finish})"
224
- }
225
-
226
- end
227
-
228
- must "calculate difference between minutes in pattern hour" do
229
-
230
- pattern_hour = Workpattern::WORKING_HOUR
231
- pattern_hour = pattern_hour.wp_workpattern(1,10,0)
232
- pattern_hour = pattern_hour.wp_workpattern(55,59,0)
233
- pattern_hour = pattern_hour.wp_workpattern(59,59,1)
234
-
235
- [[0,0,0],
236
- [0,1,1],
237
- [50,59,5],
238
- [50,60,6],
239
- [0,59,45],
240
- [0,60,46],
241
- [1,0,1],
242
- [59,50,5],
243
- [60,50,6],
244
- [59,0,45],
245
- [60,0,46]
246
- ].each {|start,finish,result|
247
- assert_equal result, pattern_hour.wp_diff(start,finish),"diff(#{start},#{finish})"
248
- }
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
249
150
  end
250
151
 
251
- end
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
252
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