workpattern 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YWVlYjQ0YTY1NzVhMzRjN2QzZWZkNzZjZTBmOTM4ODAyNjFmZDFiYw==
5
- data.tar.gz: !binary |-
6
- NjBhMzUyNWZkYWYzMzk3ZmIyN2ZlNTM1ZjcwMGQ5YjZjM2QwYzFlNA==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- NDllNzljYmEyMzBiMjY3ZDIwYWNhMWE0YWQwNWUxNTMxZGQ3ZDQzNTdmNGU2
10
- YWI1OGYwNDZiOTU2NWViZWZmYjRkZmQzY2I5NDg1ODhmNjhjOGUyYjUwMDFh
11
- MzllYTIwNGQ3ODY4NTMxNWNmZTk1MDEwNjU2ZTlmNjliNjU2M2Y=
12
- data.tar.gz: !binary |-
13
- ZjgwZmM2ZTU1YjE0MzhkYTVkYzU2MTU0YmRhOWZkYzIyZDdhNzZmNmY0MWI3
14
- OWNkN2MwNmMzOWIxYjg1ODE5MDM3MzFhYWIzMTJjOTMwMjMwMzlkMWViZWU0
15
- MTMzYWFmMzRiZWEzMzA1NmE3YTllMTBhMmJlMzA3ZmJkYWQ0YTg=
2
+ SHA1:
3
+ metadata.gz: 1bf0371cc0f47c34f3ab9e7e740975077e3edbf6
4
+ data.tar.gz: bbd957d3fb41cedd503146cc8bb870e34c023994
5
+ SHA512:
6
+ metadata.gz: fc1f35fbb2e5a1cf1f0cdb357da3348343041f47b034d139f470590949116fb78e889c80798241f627f05a90259f6c99ea3c390969e6806d68756888faa992b8
7
+ data.tar.gz: 5f7cea5e6f7869a0da1a6cd9cdb92d9836867567514709b0a1792b6438976705d0c500c5584c9f21714475b1ef6082a9aed8ae95a8c3da4ae07b9f60188b499c
data/.travis.yml CHANGED
@@ -2,4 +2,4 @@ language: ruby
2
2
  rvm:
3
3
  - 1.9.3
4
4
  - jruby-19mode # JRuby in 1.9 mode
5
- - rbx-19mode
5
+ - 2.0.0
data/CHANGELOG CHANGED
@@ -1,6 +1,18 @@
1
+ ## Workpattern v0.3.4 (Sep 23, 2013) ##
2
+
3
+ * Failed to subtract 1 minute from end of resting hour (#12) * Barrie Callender *
4
+ * Failed to add minutes starting from a resting period in a patterned hour (#13) * Barrie Callender *
5
+ * Failed to subtract the exact amount of minutes from a patterned hour (#14) * Barrie Callender *
6
+
7
+
8
+ ## Workpattern v0.3.3 (Aug 21, 2013) ##
9
+
10
+ * The two tests no longer fail with Ruby 2.0 (#11) * Barrie Callender *
11
+
12
+
1
13
  ## Workpattern v0.3.2 (Mar 14, 2013) ##
2
14
 
3
- * Changed methods on Hour module so as to not clash with Rails (#10) * Barrie Callender *
15
+ * Changed methods on Hour module so as to not clash with Rails (#10) * Barrie Callender *
4
16
  * Applied DRY principle to workpattern method in Workpattern class * Barrie Callender *
5
17
  * Removed file from emacs backup * Barrie Callender *
6
18
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- workpattern (0.3.2)
4
+ workpattern (0.3.3)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
@@ -20,7 +20,7 @@ module Workpattern
20
20
  # @param [Integer] finish minute at end of range
21
21
  # @param [Integer] type defines whether working (1) or resting (0)
22
22
  #
23
- def wp_workpattern(start,finish,type)
23
+ def wp_workpattern(start,finish,type=1)
24
24
  return wp_working(start,finish) if type==1
25
25
  return wp_resting(start,finish) if type==0
26
26
  end
@@ -60,7 +60,6 @@ module Workpattern
60
60
  # @return [Integer] number of minutes from <tt>start</tt> to <tt>finish</tt> inclusive
61
61
  #
62
62
  def wp_minutes(start,finish)
63
- start,finish=finish,start if start > finish
64
63
  return (self & wp_mask(start,finish)).to_s(2).count('1')
65
64
  end
66
65
 
@@ -73,14 +72,9 @@ module Workpattern
73
72
  # @return [DateTime,Integer,Boolean] The <tt>DateTime</tt> calculated along with remaining minutes and a flag indicating if starting point is next hour
74
73
  #
75
74
  def wp_calc(time,duration,next_hour=false)
76
-
77
- if (duration<0)
78
- return wp_subtract(time,duration, next_hour)
79
- elsif (duration>0)
80
- return wp_add(time,duration)
81
- else
82
- return time,duration
83
- end
75
+ return wp_subtract(time,duration, next_hour) if duration < 0
76
+ return wp_add(time,duration) if duration > 0
77
+ return time,duration
84
78
  end
85
79
 
86
80
  # Returns the number of minutes between two minutes
@@ -133,16 +127,13 @@ module Workpattern
133
127
  start = time.min
134
128
  available_minutes=wp_minutes(start,59)
135
129
 
136
- if ((duration-available_minutes)>=0)
130
+ if not_enough_minutes duration, available_minutes
137
131
  result_date = time + HOUR - (MINUTE*start)
138
132
  result_remainder = duration-available_minutes
139
- elsif ((duration-available_minutes)==0)
140
- result_date = time - (MINUTE*start) + last + 1
141
- result_remainder = 0
142
- elsif (wp_minutes(start,start+duration-1)==duration)
133
+ elsif exact_amount_of_minutes(start,duration)
143
134
  result_date = time + (MINUTE*duration)
144
135
  result_remainder = 0
145
- else
136
+ else # more than enough minutes
146
137
  step = start + duration
147
138
  duration-=wp_minutes(start,step)
148
139
  until (duration==0)
@@ -150,7 +141,7 @@ module Workpattern
150
141
  duration-=wp_minutes(step,step)
151
142
  end
152
143
  step+=1
153
- result_date = time + (MINUTE*step)
144
+ result_date = time - (MINUTE*time.min) + (MINUTE*step)
154
145
  result_remainder = 0
155
146
  end
156
147
  return result_date, result_remainder
@@ -169,17 +160,18 @@ module Workpattern
169
160
  time=time+(MINUTE*59)
170
161
  return wp_calc(time,duration)
171
162
  end
163
+ return time, duration if wp_total==0
172
164
  else
173
165
  start=time.min
174
166
  available_minutes=0
175
167
  available_minutes = wp_minutes(0,start-1) if start > 0
176
168
  end
177
169
 
178
- if ((duration + available_minutes)<=0)
170
+ if not_enough_minutes duration,available_minutes
179
171
  result_date = time - (MINUTE*start)
180
172
  result_remainder = duration+available_minutes
181
- elsif (wp_minutes(start+duration,start-1)==duration.abs)
182
- result_date = time + (MINUTE*duration)
173
+ elsif duration.abs==available_minutes
174
+ result_date = time - (MINUTE*(start-wp_first))
183
175
  result_remainder = 0
184
176
  else
185
177
  step = start + duration
@@ -194,6 +186,18 @@ module Workpattern
194
186
  return result_date, result_remainder
195
187
 
196
188
  end
189
+
190
+ private
191
+
192
+ def not_enough_minutes(duration,available_minutes)
193
+ return true if (duration.abs-available_minutes)>0
194
+ return false
195
+ end
196
+
197
+ def exact_amount_of_minutes(start,duration)
198
+ return true if wp_minutes(start,start+duration-1)==duration
199
+ false
200
+ end
197
201
  end
198
202
  end
199
203
 
@@ -1,5 +1,5 @@
1
1
  module Workpattern
2
2
  # Version Number for Workpattern gem
3
3
  # @since 0.0.1
4
- VERSION = '0.3.2'
4
+ VERSION = '0.3.3'
5
5
  end
data/test/test_clock.rb CHANGED
@@ -1,11 +1,11 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
- class TestClock < Test::Unit::TestCase #:nodoc:
3
+ class TestClock < MiniTest::Unit::TestCase #:nodoc:
4
4
 
5
5
  def setup
6
6
  end
7
7
 
8
- must "create midnight default" do
8
+ def test_must_create_midnight_default
9
9
  clock=Workpattern::Clock.new()
10
10
 
11
11
  assert_equal 0, clock.minutes, "total default minutes"
@@ -17,7 +17,7 @@ class TestClock < Test::Unit::TestCase #:nodoc:
17
17
  assert_equal 0, time.min, "minute in the day must be zero"
18
18
  end
19
19
 
20
- must "account for out of range values" do
20
+ def test_must_account_for_out_of_range_values
21
21
  clock=Workpattern::Clock.new(27,80)
22
22
 
23
23
  assert_equal 1700, clock.minutes, "total minutes"
data/test/test_day.rb CHANGED
@@ -1,234 +1,353 @@
1
1
  require File.dirname(__FILE__) + '/test_helper.rb'
2
2
 
3
- class TestDay < Test::Unit::TestCase #:nodoc:
3
+ class TestDay < MiniTest::Unit::TestCase #:nodoc:
4
4
 
5
5
  def setup
6
+ @working_day = Workpattern::Day.new(1)
7
+ @resting_day = Workpattern::Day.new(0)
8
+ @pattern_day = Workpattern::Day.new(1)
9
+ @pattern_day.workpattern(clock(0,0),clock(8,33),0)
10
+ @pattern_day.workpattern(clock(12,0),clock(12,21),0)
11
+ @pattern_day.workpattern(clock(12,30),clock(12,59),0)
12
+ @pattern_day.workpattern(clock(17,0),clock(22,59),0)
6
13
  end
7
14
 
8
- must "create a working day" do
9
-
10
- working_day = Workpattern::Day.new(1)
11
- assert_equal 1440, working_day.total,"24 hour working total minutes"
15
+ def test_must_create_a_working_day
16
+ assert_equal 1440, @working_day.total,"24 hour working total minutes"
12
17
  end
13
18
 
14
- must "ceate a resting day" do
15
-
16
- resting_day = Workpattern::Day.new(0)
17
- assert_equal 0, resting_day.total,"24 hour resting total minutes"
19
+ def test_must_ceate_a_resting_day
20
+ assert_equal 0, @resting_day.total,"24 hour resting total minutes"
18
21
  end
19
22
 
20
- must "set patterns correctly" do
21
-
22
- times=Array.new()
23
- [[0,0,8,59],
24
- [12,0,12,59],
25
- [17,0,22,59]
26
- ].each {|start_hour,start_min,finish_hour,finish_min|
27
- times<<[clock(start_hour,start_min),clock(finish_hour,finish_min)]
23
+ def test_must_set_patterns_correctly
24
+ mins=[0,0,0,0,0,0,0,0,26,60,60,60,8,60,60,60,60,0,0,0,0,0,0,60]
25
+ mins.each_index {|index|
26
+ assert_equal mins[index],@pattern_day.values[index].wp_total,"#{index} hour should be #{mins[index]} minutes"
28
27
  }
29
-
30
- [[24,480,clock(9,0),clock(23,59)]
31
- ].each{|hours_in_day,total,first_time,last_time|
32
- working_day=Workpattern::Day.new(1)
33
- times.each{|start_time,finish_time|
34
- working_day.workpattern(start_time,finish_time,0)
35
- }
36
- assert_equal total,working_day.total, "#{hours_in_day} hour total working minutes"
37
- assert_equal first_time.hour, working_day.first_hour, "#{hours_in_day} hour first hour of the day"
38
- assert_equal first_time.min, working_day.first_min, "#{hours_in_day} hour first minute of the day"
39
- assert_equal last_time.hour, working_day.last_hour, "#{hours_in_day} hour last hour of the day"
40
- assert_equal last_time.min, working_day.last_min, "#{hours_in_day} hour last minute of the day"
28
+ assert_equal 514, @pattern_day.total, "total working minutes"
29
+ assert_equal 8, @pattern_day.first_hour, "first hour of the day"
30
+ assert_equal 34, @pattern_day.first_min, "first minute of the day"
31
+ assert_equal 23, @pattern_day.last_hour, "last hour of the day"
32
+ assert_equal 59, @pattern_day.last_min, "last minute of the day"
33
+ end
34
+
35
+ def test_must_duplicate_a_working_day
36
+ dup_day = @working_day.duplicate
37
+ assert_equal 1440, dup_day.total
38
+ assert_equal 0, dup_day.first_hour
39
+ assert_equal 0, dup_day.first_min
40
+ assert_equal 23, dup_day.last_hour
41
+ assert_equal 59, dup_day.last_min
42
+ hour=Workpattern::WORKING_HOUR
43
+ dup_day.values.each {|item|
44
+ assert_equal hour, item
41
45
  }
42
46
  end
43
-
44
- must "duplicate all of day" do
45
- day=Workpattern::Day.new(1)
46
- new_day = day.duplicate
47
- assert_equal 1440, new_day.total,"24 hour duplicate working total minutes"
48
- # y m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight, midnightr
49
- tests=[
50
- [2000,1 ,1 ,0 , 0,3 ,2000,1 ,1 ,0 ,3 ,0 ,false ,false],
51
- [2000,1 ,1 ,23,59,0 ,2000,1 ,1 ,23,59,0 ,false ,false],
52
- [2000,1 ,1 ,23,59,1 ,2000,1 ,2 ,0 ,0 ,0 ,false ,false],
53
- [2000,1 ,1 ,23,59,2 ,2000,1 ,2 ,0 ,0 ,1 ,false ,false],
54
- [2000,1 ,1 ,9 ,10,33 ,2000,1 ,1 ,9 ,43,0 ,false ,false],
55
- [2000,1 ,1 ,9 ,10,60 ,2000,1 ,1 ,10,10,0 ,false ,false],
56
- [2000,1 ,1 ,9 , 0,931 ,2000,1 ,2 ,0 ,0 ,31 ,false ,false]
57
- ]
58
- clue="duplicate working pattern"
59
- calc_test(new_day,tests,clue)
60
-
61
- day = Workpattern::Day.new(0)
62
- new_day=day.duplicate
63
- assert_equal 0, new_day.total,"24 hour resting total minutes"
64
- # y m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight, midnightr
65
- tests=[
66
- [2000,1,1,0,0,3,2000,1,2,0,0,3,false,false],
67
- [2000,1,1,23,59,0,2000,1,1,23,59,0,false,false],
68
- [2000,1,1,23,59,1,2000,1,2,0,0,1,false,false],
69
- [2000,1,1,23,59,2,2000,1,2,0,0,2,false,false],
70
- [2000,1,1,9,10,33,2000,1,2,0,0,33,false,false],
71
- [2000,1,1,9,10,60,2000,1,2,0,0,60,false,false],
72
- [2000,1,1,9,0,931,2000,1,2,0,0,931,false,false]
73
- ]
74
- clue="duplicate resting pattern"
75
- calc_test(new_day,tests,clue)
76
-
77
-
78
- times=Array.new()
79
- [[0,0,8,59],
80
- [12,0,12,59],
81
- [17,0,22,59]
82
- ].each {|start_hour,start_min,finish_hour,finish_min|
83
- times<<[Workpattern::Clock.new(start_hour,start_min),Workpattern::Clock.new(finish_hour,finish_min)]
47
+
48
+ def test_must_duplicate_a_resting_day
49
+ dup_day = @resting_day.duplicate
50
+ assert_equal 0, dup_day.total
51
+ assert_nil dup_day.first_hour
52
+ assert_nil dup_day.first_min
53
+ assert_nil dup_day.last_hour
54
+ assert_nil dup_day.last_min
55
+ hour=Workpattern::RESTING_HOUR
56
+ dup_day.values.each {|item|
57
+ assert_equal hour, item
84
58
  }
85
-
86
- [[24,480,clock(9,0),clock(23,59)]
87
- ].each{|hours_in_day,total,first_time,last_time|
88
- day=Workpattern::Day.new(1)
89
- times.each{|start_time,finish_time|
90
- day.workpattern(start_time,finish_time,0)
91
- }
92
- new_day=day.duplicate
93
-
94
- assert_equal total,new_day.total, "#{hours_in_day} hour total working minutes"
95
- assert_equal first_time.hour, new_day.first_hour, "#{hours_in_day} hour first hour of the day"
96
- assert_equal first_time.min, new_day.first_min, "#{hours_in_day} hour first minute of the day"
97
- assert_equal last_time.hour, new_day.last_hour, "#{hours_in_day} hour last hour of the day"
98
- assert_equal last_time.min, new_day.last_min, "#{hours_in_day} hour last minute of the day"
99
-
100
- new_day.workpattern(clock(13,0),clock(13,0),0)
101
-
102
- assert_equal total,day.total, "#{hours_in_day} hour total original working minutes"
103
-
104
- assert_equal total-1,new_day.total, "#{hours_in_day} hour total new working minutes"
105
-
59
+ end
60
+
61
+ def test_must_duplicate_a_patterned_day
62
+ dup_day = @pattern_day.duplicate
63
+
64
+ mins=[0,0,0,0,0,0,0,0,26,60,60,60,8,60,60,60,60,0,0,0,0,0,0,60]
65
+ mins.each_index {|index|
66
+ assert_equal mins[index],dup_day.values[index].wp_total,"#{index} hour should be #{mins[index]} minutes"
106
67
  }
107
-
68
+
69
+ assert_equal 514, dup_day.total, "total working minutes"
70
+ assert_equal 8, dup_day.first_hour, "first hour of the day"
71
+ assert_equal 34, dup_day.first_min, "first minute of the day"
72
+ assert_equal 23, dup_day.last_hour, "last hour of the day"
73
+ assert_equal 59, dup_day.last_min, "last minute of the day"
74
+
108
75
  end
109
-
110
- must 'add minutes in a working day' do
111
-
112
- day = Workpattern::Day.new(1)
113
- # y m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight, midnightr
114
- tests=[
115
- [2000,1,1,0,0,3,2000,1,1,0,3,0,false,false],
116
- [2000,1,1,0,0,0,2000,1,1,0,0,0,false,false],
117
- [2000,1,1,0,59,0,2000,1,1,0,59,0,false,false],
118
- [2000,1,1,0,11,3,2000,1,1,0,14,0,false,false],
119
- [2000,1,1,0,0,60,2000,1,1,1,0,0,false,false],
120
- [2000,1,1,0,0,61,2000,1,1,1,1,0,false,false],
121
- [2000,1,1,0,30,60,2000,1,1,1,30,0,false,false],
122
- [2000,12,31,23,59,1,2001,1,1,0,0,0,false,false],
123
- [2000,1,1,9,10,33,2000,1,1,9,43,0,false,false],
124
- [2000,1,1,9,10,60,2000,1,1,10,10,0,false,false],
125
- [2000,1,1,9,0,931,2000,1,2,0,0,31,false,false]
126
- ]
127
- clue = "add minutes in a working day"
128
- calc_test(day,tests,clue)
129
-
76
+
77
+ def test_must_add_more_than_available_minutes_to_a_working_day
78
+ start_date=DateTime.new(2013,1,1,8,15)
79
+ result, remainder=@working_day.calc(start_date,946)
80
+ assert_equal DateTime.new(2013,1,2,0,0), result
81
+ assert_equal 1,remainder
130
82
  end
131
-
132
- must 'add minutes in a resting day' do
133
83
 
134
- day = Workpattern::Day.new(0)
135
- # y m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight, midnightr
136
- tests=[
137
- [2000,1,1,0,0,3,2000,1,2,0,0,3,false,false],
138
- [2000,1,1,23,59,0,2000,1,1,23,59,0,false,false],
139
- [2000,1,1,23,59,1,2000,1,2,0,0,1,false,false],
140
- [2000,1,1,23,59,2,2000,1,2,0,0,2,false,false],
141
- [2000,1,1,9,10,33,2000,1,2,0,0,33,false,false],
142
- [2000,1,1,9,10,60,2000,1,2,0,0,60,false,false],
143
- [2000,1,1,9,0,931,2000,1,2,0,0,931,false,false]
144
- ]
145
- clue="add minutes in a resting day"
146
- calc_test(day,tests,clue)
84
+ def test_must_add_less_than_available_minutes_to_a_working_day
85
+ start_date=DateTime.new(2013,1,1,8,15)
86
+ result, remainder=@working_day.calc(start_date,944)
87
+ assert_equal DateTime.new(2013,1,1,23,59), result
88
+ assert_equal 0,remainder
89
+ end
90
+
91
+ def test_must_add_exactly_the_available_minutes_to_a_working_day
92
+ start_date=DateTime.new(2013,1,1,8,15)
93
+ result, remainder=@working_day.calc(start_date,945)
94
+ assert_equal DateTime.new(2013,1,2,0,0), result
95
+ assert_equal 0,remainder
96
+ end
97
+
98
+ def test_must_add_zero_minutes_to_a_working_day
99
+ start_date=DateTime.new(2013,1,1,8,15)
100
+ result, remainder=@working_day.calc(start_date,0)
101
+ assert_equal start_date, result
102
+ assert_equal 0,remainder
103
+ end
104
+
105
+ def test_must_add_1_minute_to_0_in_working_day
106
+ start_date=DateTime.new(2013,1,1,0,0)
107
+ result, remainder=@working_day.calc(start_date,1)
108
+ assert_equal DateTime.new(2013,1,1,0,1), result
109
+ assert_equal 0,remainder
110
+ end
111
+
112
+ def test_must_add_1_hour_to_0_in_working_day
113
+ start_date=DateTime.new(2013,1,1,0,0)
114
+ result, remainder=@working_day.calc(start_date,60)
115
+ assert_equal DateTime.new(2013,1,1,1,0), result
116
+ assert_equal 0,remainder
147
117
  end
148
118
 
149
- must 'add minutes in a patterned day' do
119
+ def test_must_add_1_hour_1_minute_to_0_in_working_day
120
+ start_date=DateTime.new(2013,1,1,0,0)
121
+ result, remainder=@working_day.calc(start_date,61)
122
+ assert_equal DateTime.new(2013,1,1,1,1), result
123
+ assert_equal 0,remainder
124
+ end
125
+
126
+ def test_must_add_1_day_to_0_in_working_day
127
+ start_date=DateTime.new(2013,1,1,0,0)
128
+ result, remainder=@working_day.calc(start_date,1440)
129
+ assert_equal DateTime.new(2013,1,2,0,0), result
130
+ assert_equal 0,remainder
131
+ end
150
132
 
151
- day = Workpattern::Day.new(1)
152
- [[0,0,8,59],
153
- [12,0,12,59],
154
- [17,0,22,59]
155
- ].each {|start_hour,start_min,finish_hour,finish_min|
156
- day.workpattern(clock(start_hour, start_min),
157
- clock(finish_hour, finish_min),
158
- 0)
159
- }
160
- assert_equal 480, day.total, "minutes in patterned day should be 480"
161
- # y m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight, midnightr
162
- tests=[
163
- [2000,1,1,0,0,3,2000,1,1,9,3,0,false,false],
164
- [2000,1,1,0,0,0,2000,1,1,0,0,0,false,false],
165
- [2000,1,1,0,59,0,2000,1,1,0,59,0,false,false],
166
- [2000,1,1,0,11,3,2000,1,1,9,3,0,false,false],
167
- [2000,1,1,0,0,60,2000,1,1,10,0,0,false,false],
168
- [2000,1,1,0,0,61,2000,1,1,10,1,0,false,false],
169
- [2000,1,1,9,30,60,2000,1,1,10,30,0,false,false],
170
- [2000,12,31,22,59,1,2000,12,31,23,1,0,false,false],
171
- [2000,1,1,9,10,33,2000,1,1,9,43,0,false,false],
172
- [2000,1,1,9,10,60,2000,1,1,10,10,0,false,false],
173
- [2000,1,1,9,0,931,2000,1,2,0,0,451,false,false],
174
- [2000,1,1,12,0,1,2000,1,1,13,1,0,false,false],
175
- [2000,1,1,12,59,1,2000,1,1,13,1,0,false,false]
176
- ]
177
- clue = "add minutes in a patterned day"
178
- calc_test(day,tests,clue)
133
+ def test_must_add_1_day_1_minute_to_0_in_working_day
134
+ start_date=DateTime.new(2013,1,1,0,0)
135
+ result, remainder=@working_day.calc(start_date,1441)
136
+ assert_equal DateTime.new(2013,1,2,0,0), result
137
+ assert_equal 1,remainder
138
+ end
139
+
140
+ def test_must_add_more_than_available_minutes_to_a_resting_day
141
+ start_date=DateTime.new(2013,1,1,8,15)
142
+ result, remainder=@resting_day.calc(start_date,946)
143
+ assert_equal DateTime.new(2013,1,2,0,0), result
144
+ assert_equal 946,remainder
145
+ end
146
+
147
+ def test_must_add_less_than_available_minutes_to_a_resting_day
148
+ start_date=DateTime.new(2013,1,1,8,15)
149
+ result, remainder=@resting_day.calc(start_date,944)
150
+ assert_equal DateTime.new(2013,1,2,0,0), result
151
+ assert_equal 944,remainder
152
+ end
153
+
154
+ def test_must_add_exactly_the_available_minutes_to_a_resting_day
155
+ start_date=DateTime.new(2013,1,1,8,15)
156
+ result, remainder=@resting_day.calc(start_date,945)
157
+ assert_equal DateTime.new(2013,1,2,0,0), result
158
+ assert_equal 945,remainder
159
+ end
160
+
161
+ def test_must_add_zero_minutes_to_a_resting_day
162
+ start_date=DateTime.new(2013,1,1,8,15)
163
+ result, remainder=@resting_day.calc(start_date,0)
164
+ assert_equal start_date, result
165
+ assert_equal 0,remainder
166
+ end
167
+
168
+ def test_must_add_1_minute_to_0_in_resting_day
169
+ start_date=DateTime.new(2013,1,1,0,0)
170
+ result, remainder=@resting_day.calc(start_date,1)
171
+ assert_equal DateTime.new(2013,1,2,0,0), result
172
+ assert_equal 1,remainder
173
+ end
174
+
175
+ def test_must_add_1_hour_to_0_in_resting_day
176
+ start_date=DateTime.new(2013,1,1,0,0)
177
+ result, remainder=@resting_day.calc(start_date,60)
178
+ assert_equal DateTime.new(2013,1,2,0,0), result
179
+ assert_equal 60,remainder
179
180
  end
180
181
 
181
- must 'subtract minutes in a working day' do
182
+ def test_must_add_1_hour_1_minute_to_0_in_resting_day
183
+ start_date=DateTime.new(2013,1,1,0,0)
184
+ result, remainder=@resting_day.calc(start_date,61)
185
+ assert_equal DateTime.new(2013,1,2,0,0), result
186
+ assert_equal 61,remainder
187
+ end
182
188
 
183
- day = Workpattern::Day.new(1)
184
- # y ,m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight,midnightr
185
- tests=[
186
- [2000,1 ,1 ,0 ,0 ,-3 ,1999,12,31,0 ,0 ,-3 ,false ,true],
187
- [2000,1 ,1 ,0 ,1 ,-2 ,1999,12,31,0 ,0 ,-1 ,false ,true], #Issue 6 - available minutes not calculating correctly for a time of 00:01
188
- [2000,1 ,1 ,23,59,0 ,2000,1 ,1 ,23,59,0 ,false ,false],
189
- [2000,1 ,1 ,23,59,-1 ,2000,1 ,1 ,23,58,0 ,false ,false],
190
- [2000,1 ,1 ,23,59,-2 ,2000,1 ,1 ,23,57,0 ,false ,false],
191
- [2000,1 ,1 ,9 ,10,-33 ,2000,1 ,1 ,8 ,37,0 ,false ,false],
192
- [2000,1 ,1 ,9 ,10,-60 ,2000,1 ,1 ,8 ,10,0 ,false ,false],
193
- [2000,1 ,1 ,9 ,4 ,-3 ,2000,1 ,1 ,9 ,1 ,0 ,false ,false],
194
- [2000,1 ,1 ,9 ,0 ,-931,1999,12,31,0 ,0 ,-391,false ,true],
195
- [2000,1 ,1 ,0 ,0 ,-3 ,2000,1 ,1 ,23,57,0 ,true ,false],
196
- [2000,1 ,1 ,23,59,0 ,2000,1 ,1 ,23,59,0 ,true ,false],
197
- [2000,1 ,1 ,23,59,-1 ,2000,1 ,1 ,23,58,0 ,true ,false],
198
- [2000,1 ,1 ,0 ,0 ,-2 ,2000,1 ,1 ,23,58,0 ,true ,false],
199
- [2000,1 ,1 ,0 ,0 ,-33 ,2000,1 ,1 ,23,27,0 ,true ,false],
200
- [2000,1 ,1 ,0 ,0 ,-60 ,2000,1 ,1 ,23,0 ,0 ,true ,false],
201
- [2000,1 ,1 ,0 ,0 ,-931,2000,1 ,1 ,8 ,29,0 ,true ,false]
202
- ]
203
- clue="subtract minutes in a working day"
204
- calc_test(day,tests,clue)
189
+ def test_must_add_1_day_to_0_in_resting_day
190
+ start_date=DateTime.new(2013,1,1,0,0)
191
+ result, remainder=@resting_day.calc(start_date,1440)
192
+ assert_equal DateTime.new(2013,1,2,0,0), result
193
+ assert_equal 1440,remainder
194
+ end
195
+
196
+ def test_must_add_1_day_1_minute_to_0_in_resting_day
197
+ start_date=DateTime.new(2013,1,1,0,0)
198
+ result, remainder=@resting_day.calc(start_date,1441)
199
+ assert_equal DateTime.new(2013,1,2,0,0), result
200
+ assert_equal 1441,remainder
201
+ end
202
+
203
+ def test_must_add_more_than_available_minutes_to_a_pattern_day
204
+ start_date=DateTime.new(2013,1,1,8,15)
205
+ result, remainder=@pattern_day.calc(start_date,515)
206
+ assert_equal DateTime.new(2013,1,2,0,0), result
207
+ assert_equal 1,remainder
208
+ end
209
+
210
+ def test_must_add_less_than_available_minutes_to_a_pattern_day
211
+ start_date=DateTime.new(2013,1,1,8,15)
212
+ result, remainder=@pattern_day.calc(start_date,513)
213
+ assert_equal DateTime.new(2013,1,1,23,59), result
214
+ assert_equal 0,remainder
215
+ end
216
+
217
+ def test_must_add_exactly_the_available_minutes_to_a_pattern_day
218
+ start_date=DateTime.new(2013,1,1,8,15)
219
+ result, remainder=@pattern_day.calc(start_date,514)
220
+ assert_equal DateTime.new(2013,1,2,0,0), result
221
+ assert_equal 0,remainder
222
+ end
223
+
224
+ def test_must_add_zero_minutes_to_a_pattern_day
225
+ start_date=DateTime.new(2013,1,1,8,15)
226
+ result, remainder=@pattern_day.calc(start_date,0)
227
+ assert_equal start_date, result
228
+ assert_equal 0,remainder
229
+ end
230
+
231
+ def test_must_add_1_minute_to_0_in_pattern_day
232
+ start_date=DateTime.new(2013,1,1,0,0)
233
+ result, remainder=@pattern_day.calc(start_date,1)
234
+ assert_equal DateTime.new(2013,1,1,8,35), result
235
+ assert_equal 0,remainder
236
+ end
237
+
238
+ def test_must_add_1_hour_to_0_in_pattern_day
239
+ start_date=DateTime.new(2013,1,1,0,0)
240
+ result, remainder=@pattern_day.calc(start_date,60)
241
+ assert_equal DateTime.new(2013,1,1,9,34), result
242
+ assert_equal 0,remainder
205
243
  end
206
244
 
207
- must 'subtract minutes in a resting day' do
208
-
209
- day = Workpattern::Day.new(0)
210
- # y ,m ,d ,h ,n ,dur ,yr ,mr,dr,hr,nr,rem ,midnight,midnightr
211
- tests=[
212
- [2000,1 ,1 ,0 ,0 ,-3 ,1999,12,31,0 ,0 ,-3 ,false ,true],
213
- [2000,1 ,1 ,23,59,0 ,2000,1 ,1 ,23,59,0 ,false ,false],
214
- [2000,1 ,1 ,23,59,-1 ,1999,12,31,0 ,0 ,-1 ,false ,true],
215
- [2000,1 ,1 ,23,59,-2 ,1999,12,31,0 ,0 ,-2 ,false ,true],
216
- [2000,1 ,1 ,9 ,10,-33 ,1999,12,31,0 ,0 ,-33 ,false ,true],
217
- [2000,1 ,1 ,9 ,10,-60 ,1999,12,31,0 ,0 ,-60 ,false ,true],
218
- [2000,1 ,1 ,9 ,0 ,-931,1999,12,31,0 ,0 ,-931,false ,true],
219
- [2000,1 ,1 ,0 ,0 ,-3 ,1999,12,31,0 ,0 ,-3 ,true ,true],
220
- [2000,1 ,1 ,23,59,0 ,2000,1 ,1 ,23,59,0 ,true ,false],
221
- [2000,1 ,1 ,23,59,-1 ,1999,12,31,0 ,0 ,-1 ,true ,true],
222
- [2000,1 ,1 ,23,59,-2 ,1999,12,31,0 ,0 ,-2 ,true ,true],
223
- [2000,1 ,1 ,9 ,10,-33 ,1999,12,31,0 ,0 ,-33 ,true ,true],
224
- [2000,1 ,1 ,9 ,10,-60 ,1999,12,31,0 ,0 ,-60 ,true ,true],
225
- [2000,1 ,1 ,9 ,0 ,-931,1999,12,31,0 ,0 ,-931,true ,true]
226
- ]
227
- clue="subtract minutes in a resting day"
228
- calc_test(day,tests,clue)
245
+ def test_must_add_1_hour_1_minute_to_0_in_pattern_day
246
+ start_date=DateTime.new(2013,1,1,0,0)
247
+ result, remainder=@pattern_day.calc(start_date,61)
248
+ assert_equal DateTime.new(2013,1,1,9,35), result
249
+ assert_equal 0,remainder
250
+ end
251
+
252
+ def test_must_add_1_day_to_0_in_pattern_day
253
+ start_date=DateTime.new(2013,1,1,0,0)
254
+ result, remainder=@pattern_day.calc(start_date,1440)
255
+ assert_equal DateTime.new(2013,1,2,0,0), result
256
+ assert_equal 926,remainder
257
+ end
258
+
259
+ def test_must_add_1_day_1_minute_to_0_in_pattern_day
260
+ start_date=DateTime.new(2013,1,1,0,0)
261
+ result, remainder=@pattern_day.calc(start_date,1441)
262
+ assert_equal DateTime.new(2013,1,2,0,0), result
263
+ assert_equal 927,remainder
229
264
  end
265
+
266
+ def test_must_subtract_more_than_available_minutes_in_working_day
267
+ start_date=DateTime.new(2013,1,1,12,23)
268
+ result, remainder, midnight=@working_day.calc(start_date,-744)
269
+ assert_equal DateTime.new(2012,12,31,0,0), result
270
+ assert_equal -1,remainder
271
+ assert midnight
272
+ end
273
+
274
+ def test_must_subtract_less_than_available_minutes_in_working_day
275
+ start_date=DateTime.new(2013,1,1,12,23)
276
+ result, remainder, midnight=@working_day.calc(start_date,-742)
277
+ assert_equal DateTime.new(2013,1,1,0,1), result
278
+ assert_equal 0,remainder
279
+ refute midnight
280
+ end
281
+
282
+ def test_must_subtract_available_minutes_in_working_day
283
+ start_date=DateTime.new(2013,1,1,12,23)
284
+ result, remainder, midnight=@working_day.calc(start_date,-743)
285
+ assert_equal DateTime.new(2013,1,1,0,0), result
286
+ assert_equal 0,remainder
287
+ refute midnight
288
+ end
289
+
290
+ def test_must_subtract_1_minute_from_start_of_working_day
291
+ start_date=DateTime.new(2013,1,1,0,0)
292
+ result, remainder, midnight=@working_day.calc(start_date,-1)
293
+ assert_equal DateTime.new(2012,12,31,0,0), result
294
+ assert_equal -1,remainder
295
+ assert midnight
296
+ end
297
+
298
+ def test_must_subtract_1_minute_from_start_of_next_working_day
299
+ start_date=DateTime.new(2013,1,1,0,0)
300
+ result, remainder, midnight=@working_day.calc(start_date,-1,true)
301
+ assert_equal DateTime.new(2013,1,1,23,59), result
302
+ assert_equal 0,remainder
303
+ refute midnight
304
+ end
305
+
306
+ def test_must_subtract_1_day_from_start_of_next_working_day
307
+ start_date=DateTime.new(2013,1,1,0,0)
308
+ result, remainder, midnight=@working_day.calc(start_date,-1440,true)
309
+ assert_equal DateTime.new(2013,1,1,0,0), result
310
+ assert_equal 0,remainder
311
+ refute midnight
312
+ end
313
+
314
+ def test_must_subtract_1_from_zero_minutes_from_resting_day
315
+ start_date=DateTime.new(2013,1,1,0,0)
316
+ result, remainder, midnight=@resting_day.calc(start_date,-1,true)
317
+ assert_equal DateTime.new(2012,12,31,0,0), result
318
+ assert_equal -1,remainder
319
+ assert midnight
320
+ end
321
+
322
+ def test_must_subtract_1_from_resting_day
323
+ start_date=DateTime.new(2013,1,1,4,13)
324
+ result, remainder, midnight=@resting_day.calc(start_date,-1,true)
325
+ assert_equal DateTime.new(2012,12,31,0,0), result
326
+ assert_equal -1,remainder
327
+ assert midnight
328
+ end
329
+
330
+ def test_must_subtract_1_from_zero_minutes_from_resting_day
331
+ start_date=DateTime.new(2013,1,1,0,0)
332
+ result, remainder, midnight=@resting_day.calc(start_date,-1,false)
333
+ assert_equal DateTime.new(2012,12,31,0,0), result
334
+ assert_equal -1,remainder
335
+ assert midnight
336
+ end
337
+
338
+ def test_must_subtract_1_from_somewhere_in_resting_day
339
+ start_date=DateTime.new(2013,1,1,4,13)
340
+ result, remainder, midnight=@resting_day.calc(start_date,-1,false)
341
+ assert_equal DateTime.new(2012,12,31,0,0), result
342
+ assert_equal -1,remainder
343
+ assert midnight
344
+ end
345
+
346
+ ############################################################################
347
+ ############################################################################
348
+ ############################################################################
230
349
 
231
- must 'subtract minutes in a patterned day' do
350
+ def test_must_subtract_minutes_in_a_patterned_day
232
351
 
233
352
  day = Workpattern::Day.new(1)
234
353
  [[0,0,8,59],
@@ -274,7 +393,7 @@ class TestDay < Test::Unit::TestCase #:nodoc:
274
393
  end
275
394
 
276
395
 
277
- must "calculate difference between times in working day" do
396
+ def test_must_calculate_difference_between_times_in_working_day
278
397
  day = Workpattern::Day.new(1)
279
398
 
280
399
  [
@@ -305,7 +424,7 @@ class TestDay < Test::Unit::TestCase #:nodoc:
305
424
  }
306
425
  end
307
426
 
308
- must "calculate difference between times in resting day" do
427
+ def test_must_calculate_difference_between_times_in_resting_day
309
428
  day = Workpattern::Day.new(0)
310
429
 
311
430
  [
@@ -336,7 +455,7 @@ class TestDay < Test::Unit::TestCase #:nodoc:
336
455
  }
337
456
  end
338
457
 
339
- must "calculate difference between times in pattern day" do
458
+ def test_must_calculate_difference_between_times_in_pattern_day
340
459
 
341
460
  day = Workpattern::Day.new(1)
342
461
  [[0,0,8,59],