workpattern 0.3.4 → 0.6.0

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.
@@ -1,276 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestWorkpattern < MiniTest::Unit::TestCase #:nodoc:
4
-
5
- def setup
6
- Workpattern.clear()
7
- end
8
-
9
- def test_can_diff_between_working_period_and_resting_day
10
- # This is the test for issue 15
11
- mywp=Workpattern.new('My Workpattern',2013,3)
12
- mywp.resting(:days => :weekend)
13
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(0,0),:to_time=>Workpattern.clock(8,59))
14
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(12,0),:to_time=>Workpattern.clock(12,59))
15
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(18,0),:to_time=>Workpattern.clock(23,59))
16
-
17
- mydate1=DateTime.civil(2013,9,27,0,0,0)
18
- mydate2=DateTime.civil(2013,9,27,23,59,59)
19
-
20
- mywp.resting(:start=>mydate1,:finish=>mydate2, :days =>:all, :from_time=>Workpattern.clock(0,0), :to_time=>Workpattern.clock(23,59))
21
-
22
- assert_equal 60, mywp.diff(DateTime.civil(2013,9,26,17,0),DateTime.civil(2013,9,27,10,0))
23
- end
24
-
25
- def test_must_create_a_working_workpattern
26
- name='mywp'
27
- base=2001
28
- span=11
29
- wp=Workpattern.new(name,base,span)
30
- assert_equal name, wp.name
31
- assert_equal base, wp.base
32
- assert_equal span, wp.span
33
- assert_equal DateTime.new(base), wp.from
34
- assert_equal DateTime.new(base+span-1,12,31,23,59), wp.to
35
- end
36
-
37
- def test_must_set_patterns_correctly
38
- name='mypattern'
39
- base=2000
40
- span=11
41
- wp=Workpattern.new(name,base,span)
42
-
43
- start=clock(0,0)
44
- finish=clock(8,59)
45
- assert_equal 10080, get_week(wp.weeks).week_total
46
- wp.workpattern(:days=>:all,:from_time=>start,:to_time=>finish,:work_type=>0)
47
- assert_equal 6300, get_week(wp.weeks).week_total
48
- wp.workpattern(:days=>:sun,:from_time=>start,:to_time=>finish,:work_type=>1)
49
- assert_equal 6840, get_week(wp.weeks).week_total
50
- wp.workpattern(:days=>:mon,:from_time=>start,:to_time=>finish,:work_type=>1)
51
- assert_equal 7380, get_week(wp.weeks).week_total
52
- wp.workpattern(:days=>:all,:from_time=>clock(18,0),:to_time=>clock(18,19),:work_type=>0)
53
- assert_equal 7240, get_week(wp.weeks).week_total
54
- wp.workpattern(:days=>:all,:from_time=>clock(0,0),:to_time=>clock(23,59),:work_type=>0)
55
- assert_equal 0, get_week(wp.weeks).week_total
56
- wp.workpattern(:days=>:all,:from_time=>clock(0,0),:to_time=>clock(0,0),:work_type=>1)
57
- assert_equal 7, get_week(wp.weeks).week_total
58
- wp.workpattern(:days=>:all,:from_time=>clock(23,59),:to_time=>clock(23,59),:work_type=>1)
59
- assert_equal 14, get_week(wp.weeks).week_total
60
- wp.workpattern(:days=>:all,:from_time=>clock(0,0),:to_time=>clock(23,59),:work_type=>1)
61
- assert_equal 10080, get_week(wp.weeks).week_total
62
- wp.workpattern(:days=>:weekend,:from_time=>clock(0,0),:to_time=>clock(23,59),:work_type=>0)
63
- assert_equal 7200, get_week(wp.weeks).week_total
64
-
65
- end
66
-
67
- def test_must_add_minutes_in_a_working_workpattern
68
- name='mypattern'
69
- base=1999
70
- span=11
71
- wp=Workpattern.new(name,base,span)
72
- tests=[[2000,1,1,0,0,3,2000,1,1,0,3],
73
- [2000,1,1,23,59,0,2000,1,1,23,59],
74
- [2000,1,1,23,59,1,2000,1,2,0,0],
75
- [2000,1,1,23,59,2,2000,1,2,0,1],
76
- [2000,1,1,9,10,33,2000,1,1,9,43],
77
- [2000,1,1,9,10,60,2000,1,1,10,10],
78
- [2000,1,1,9,0,931,2000,1,2,0,31],
79
- [2000,1,1,0,0,3,2000,1,1,0,3]
80
- ]
81
- clue="add minutes in a working workpattern"
82
- calc_test(wp,tests,clue)
83
- end
84
-
85
- def test_must_add_minutes_in_a_resting_workpattern
86
- name='mypattern'
87
- base=1999
88
- span=11
89
- wp=Workpattern.new(name,base,span)
90
- start=DateTime.new(1999,6,11,0,0)
91
- finish=DateTime.new(2003,6,8,0,0)
92
- wp.workpattern(:days=>:all,:start=> start, :finish=>finish, :work_type=>0 )
93
- tests=[[2000,1,1,0,0,3,2003,6,9,0,3],
94
- [2000,1,1,23,59,0,2000,1,1,23,59],
95
- [2000,1,1,23,59,1,2003,6,9,0,1],
96
- [2000,1,1,23,59,2,2003,6,9,0,2],
97
- [2000,1,1,9,10,33,2003,6,9,0,33],
98
- [2000,1,1,9,10,60,2003,6,9,1,0],
99
- [2000,1,1,9,0,931,2003,6,9,15,31],
100
- [2000,1,1,0,0,3,2003,6,9,0,3]
101
- ]
102
- clue="add minutes in a resting workpattern"
103
- calc_test(wp,tests,clue)
104
- end
105
-
106
- def test_must_add_minutes_in_a_patterned_workpattern
107
- assert true
108
- end
109
-
110
- def test_must_subtract_minutes_in_a_working_workpattern
111
- name='mypattern'
112
- base=1999
113
- span=11
114
- wp=Workpattern.new(name,base,span)
115
- tests=[[2000,1,1,0,0,-3,1999,12,31,23,57],
116
- [2000,1,1,23,59,0,2000,1,1,23,59],
117
- [2000,1,1,23,59,-1,2000,1,1,23,58],
118
- [2000,1,1,23,59,-2,2000,1,1,23,57],
119
- [2000,1,1,9,10,-33,2000,1,1,8,37],
120
- [2000,1,1,9,10,-60,2000,1,1,8,10],
121
- [2000,1,1,9,0,-931,1999,12,31,17,29],
122
- [2000,1,1,0,0,-3,1999,12,31,23,57]
123
- ]
124
- clue="subtract minutes in a working workpattern"
125
- calc_test(wp,tests,clue)
126
- end
127
-
128
- def test_must_subtract_minutes_in_a_resting_workpattern
129
- name='mypattern'
130
- base=1999
131
- span=11
132
- wp=Workpattern.new(name,base,span)
133
- start=DateTime.new(1999,6,11,0,0)
134
- finish=DateTime.new(2003,6,8,0,0)
135
- wp.workpattern(:days=>:all,:start=> start, :finish=>finish, :work_type=>0 )
136
- tests=[[2000,1,1,0,0,-3,1999,6,10,23,57],
137
- [2000,1,1,23,59,0,2000,1,1,23,59],
138
- [2000,1,1,23,59,-1,1999,6,10,23,59],
139
- [2000,1,1,23,59,-2,1999,6,10,23,58],
140
- [2000,1,1,9,10,-33,1999,6,10,23,27],
141
- [2000,1,1,9,10,-60,1999,6,10,23,0],
142
- [2000,1,1,9,0,-931,1999,6,10,8,29],
143
- [2000,1,1,0,0,-3,1999,6,10,23,57]
144
- ]
145
- clue="subtract minutes in a resting workpattern"
146
- calc_test(wp,tests,clue)
147
- end
148
-
149
- def test_must_subtract_minutes_in_a_patterned_workpattern
150
- assert true
151
- end
152
-
153
-
154
- def test_must_calculate_difference_between_dates_in_working_calender
155
- name='mypattern'
156
- base=1999
157
- span=40
158
- wp=Workpattern.new(name,base,span)
159
-
160
- [
161
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 0, 0],
162
- [ 2012,10, 1, 0, 0, 2012,10, 1, 0, 1, 1],
163
- [ 2012,10, 1, 0,50, 2012,10, 1, 0,59, 9],
164
- [ 2012,10, 1, 8,50, 2012,10, 1, 9, 0, 10],
165
- [ 2012,10, 1, 0, 0, 2012,10, 1,23,59, 1439],
166
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 0, 1440],
167
- [ 2012,10, 1, 0, 0, 2012,10, 2, 0, 1, 1441],
168
- [ 2012,10, 1, 0, 0, 2013, 3,22, 6,11,248051],
169
- [ 2012,10, 1, 0, 1, 2012,10, 1, 0, 0, 1],
170
- [ 2012,10, 1, 0,59, 2012,10, 1, 0,50, 9],
171
- [ 2012,10, 1, 9, 0, 2012,10, 1, 8,50, 10],
172
- [ 2012,10, 1,23,59, 2012,10, 1, 0, 0, 1439],
173
- [ 2012,10, 2, 0, 0, 2012,10, 1, 0, 0, 1440],
174
- [ 2012,10, 2, 0, 1, 2012,10, 1, 0, 0, 1441],
175
- [ 2013, 3,22, 6,11, 2012,10, 1, 0, 0,248051],
176
- [ 2012,10, 2, 6,11, 2012,10, 4, 8, 9, 2998]
177
- ].each {|start_year, start_month, start_day, start_hour,start_min,
178
- finish_year, finish_month, finish_day, finish_hour,finish_min,result|
179
- start=DateTime.new(start_year, start_month, start_day, start_hour,start_min)
180
- finish=DateTime.new(finish_year, finish_month, finish_day, finish_hour,finish_min)
181
- duration, result_date=wp.diff(start,finish)
182
- assert_equal result, duration,"duration diff(#{start}, #{finish})"
183
- }
184
- end
185
-
186
- def test_must_calculate_difference_between_minutes_in_resting_workpattern
187
- assert true
188
- end
189
-
190
- def test_must_calculate_difference_between_minutes_in_pattern_workpattern
191
- assert true
192
- end
193
-
194
- def test_must_follow_the_example_in_workpattern
195
- mywp=Workpattern.new('My Workpattern',2011,10)
196
- mywp.resting(:days => :weekend)
197
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(0,0),:to_time=>Workpattern.clock(8,59))
198
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(12,0),:to_time=>Workpattern.clock(12,59))
199
- mywp.resting(:days =>:weekday, :from_time=>Workpattern.clock(18,0),:to_time=>Workpattern.clock(23,59))
200
- mydate=DateTime.civil(2011,9,1,9,0)
201
- result_date = mywp.calc(mydate,1920) # => 6/9/11@18:00
202
- assert_equal DateTime.civil(2011,9,6,18,0), result_date, 'example in workpattern'
203
- end
204
-
205
- def test_must_calculate_across_week_patterns
206
- name='mypattern'
207
- base=2011
208
- span=11
209
- wp=Workpattern.new(name,base,span)
210
- start=DateTime.new(2012,9,24,0,0)
211
- finish=DateTime.new(2012,10,14,0,0)
212
- wp.resting(:days =>:all,:start=> start, :finish=>finish)
213
- wp.working(:days =>:mon,:start=> start, :finish=>finish, :from_time=>Workpattern.clock(1,0),:to_time=>Workpattern.clock(1,59))
214
- wp.working(:days =>:tue,:start=> start, :finish=>finish, :from_time=>Workpattern.clock(2,0),:to_time=>Workpattern.clock(2,59))
215
- wp.working(:days =>:wed,:start=> start, :finish=>finish, :from_time=>Workpattern.clock(3,0),:to_time=>Workpattern.clock(3,59))
216
- wp.working(:days =>:thu,:start=> start, :finish=>finish, :from_time=>Workpattern.clock(4,0),:to_time=>Workpattern.clock(4,59))
217
- wp.working(:days =>:fri,:start=> start, :finish=>finish, :from_time=>Workpattern.clock(5,0),:to_time=>Workpattern.clock(5,59))
218
- wp.working(:days =>:sat,:start=> start, :finish=>finish, :from_time=>Workpattern.clock(6,0),:to_time=>Workpattern.clock(6,59))
219
- wp.working(:days =>:sun,:start=> start, :finish=>finish, :from_time=>Workpattern.clock(0,0),:to_time=>Workpattern.clock(23,59))
220
-
221
- # Mon Tue Wed Thu Fri Sat Sun
222
- # 24 25 26 27 28 29 30
223
- # 1 2 3 4 5 6 7
224
- # 8 9 10 11 12 13 14
225
- # Mon 01:00 - 01:59
226
- # Tue 02:00 - 02:59
227
- # Wed 03:00 - 03:59
228
- # Thu 04:00 - 04:59
229
- # Fri 05:00 - 05:59
230
- # Sat 06:00 - 06:59
231
- # Sun 00:00 - 23:59
232
- #
233
- tests=[[2012,10,1,1,0,1,2012,10,1,1,1],
234
- [2012,10,14,23,59,1,2012,10,15,0,0],
235
- [2012,10,1,1,0,60*60+1,2012,10,15,0,1],
236
- [2012,10,1,2,0,-1,2012,10,1,1,59],
237
- [2012,10,2,3,0,-61,2012,10,1,1,59],
238
- [2012,9,24,1,1,-2,2012,9,23,23,59],
239
- [2012,10,1,1,59,61,2012,10,2,3,0],
240
- [2012,10,1,1,1,-1,2012,10,1,1,0],
241
- [2012,10,1,1,0,-1,2012,9,30,23,59]
242
- ]
243
- clue="calculate across week patterns"
244
- calc_test(wp,tests,clue)
245
- end
246
-
247
- def test_must_know_whether_a_time_is_working_or_resting
248
- name='working?'
249
- base=2011
250
- span=11
251
- wp=Workpattern.new(name,base,span)
252
- wp.resting(:to_time=>Workpattern.clock(8,59))
253
- assert wp.working?(DateTime.new(2012,1,1,9,0))
254
- assert !wp.working?(DateTime.new(2012,1,1,8,59))
255
- end
256
-
257
-
258
- private
259
-
260
- def get_week(ss)
261
- ss.each {|obj| return obj}
262
- end
263
-
264
-
265
- def calc_test(wp,tests,clue)
266
-
267
- tests.each{|y,m,d,h,n,add,yr,mr,dr,hr,nr|
268
- start_date=DateTime.new(y,m,d,h,n)
269
- result_date = wp.calc(start_date,add)
270
- assert_equal DateTime.new(yr,mr,dr,hr,nr), result_date, "result date calc(#{start_date},#{add}) for #{clue}"
271
- }
272
- end
273
- def clock(hour,min)
274
- return Workpattern.clock(hour,min)
275
- end
276
- end
@@ -1,93 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper.rb'
2
-
3
- class TestWorkpatternModule < MiniTest::Unit::TestCase #:nodoc:
4
-
5
- def setup
6
- Workpattern.clear()
7
- end
8
-
9
- def test_must_create_workpattern_with_given_name
10
-
11
- wp = Workpattern.new()
12
- assert_equal Workpattern::DEFAULT_WORKPATTERN_NAME, wp.name, 'not returned the default workpattern name'
13
- assert_equal Workpattern::DEFAULT_BASE_YEAR, wp.from.year, 'not returned the default workpattern base year'
14
- assert_equal Workpattern::DEFAULT_SPAN, wp.span, 'not returned the default workpattern span'
15
-
16
- mywp_name='barrie callender'
17
- mywp_base=1963
18
- mywp_span=48
19
- mywp = Workpattern.new(mywp_name, mywp_base,mywp_span)
20
- assert_equal mywp_name, mywp.name, 'not returned the supplied workpattern name'
21
- assert_equal mywp_base, mywp.from.year, 'not returned the supplied workpattern base year'
22
- assert_equal mywp_span, mywp.span, 'not returned the supplied workpattern span'
23
-
24
- end
25
-
26
- def test_must_raise_error_when_creating_workpattern_with_existing_name
27
-
28
- assert_raises NameError do
29
- mywp_name='duplicate'
30
- wp=Workpattern.new(mywp_name)
31
- wp=Workpattern.new(mywp_name)
32
- end
33
-
34
- end
35
-
36
- def test_must_return_an_array_of_all_known_workpattern_objects
37
-
38
- names =%w{fred harry sally}
39
- names.each {|name| wp=Workpattern.new(name)}
40
- wp_names = Workpattern.to_a
41
-
42
- assert_equal names.size, wp_names.size, "lists are not the same size"
43
-
44
- wp_names.each {|name, wp| assert names.include?(name)}
45
- end
46
-
47
- def test_must_return_empty_array_when_no_workpatterns_exist
48
-
49
- assert Workpattern.to_a.empty?
50
- end
51
-
52
- def test_must_return_existing_workpattern
53
-
54
- names =%w{fred harry sally}
55
- names.each {|name| wp=Workpattern.new(name)}
56
-
57
- names.each {|name|
58
- wp=Workpattern.get(name)
59
- }
60
- end
61
-
62
- def test_must_raise_error_when_workpattern_does_not_exist
63
-
64
- names =%w{fred harry sally}
65
- names.each {|name| wp=Workpattern.new(name)}
66
- assert_raises NameError do
67
- wp=Workpattern.get('missing')
68
- end
69
- end
70
-
71
- def test_must_delete_existing_workpattern_returning_true
72
-
73
- names =%w{fred harry sally}
74
- names.each {|name| wp=Workpattern.new(name)}
75
- names.each {|name| assert Workpattern.delete(name)}
76
- end
77
-
78
- def test_must_return_false_deleting_workpattern_that_does_not_exist
79
- names =%w{fred harry sally}
80
- names.each {|name| wp=Workpattern.new(name)}
81
- assert !Workpattern.delete('missing')
82
- end
83
-
84
- def test_must_delete_all_workpatterns
85
-
86
- names =%w{fred harry sally}
87
- names.each {|name| wp=Workpattern.new(name)}
88
- Workpattern.clear
89
- assert Workpattern.to_a.empty?
90
- end
91
-
92
-
93
- end