workpattern 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
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