lowang-whenever 0.7.0.1

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.
@@ -0,0 +1,268 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+
3
+ class OutputAtTest < Test::Unit::TestCase
4
+
5
+ context "weekday at a (single) given time" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ set :job_template, nil
10
+ every "weekday", :at => '5:02am' do
11
+ command "blahblah"
12
+ end
13
+ file
14
+ end
15
+
16
+ should "output the command using that time" do
17
+ assert_match '2 5 * * 1-5 blahblah', @output
18
+ end
19
+ end
20
+
21
+ context "weekday at a multiple diverse times, via an array" do
22
+ setup do
23
+ @output = Whenever.cron \
24
+ <<-file
25
+ set :job_template, nil
26
+ every "weekday", :at => %w(5:02am 3:52pm) do
27
+ command "blahblah"
28
+ end
29
+ file
30
+ end
31
+
32
+ should "output the commands for both times given" do
33
+ assert_match '2 5 * * 1-5 blahblah', @output
34
+ assert_match '52 15 * * 1-5 blahblah', @output
35
+ end
36
+ end
37
+
38
+ context "weekday at a multiple diverse times, comma separated" do
39
+ setup do
40
+ @output = Whenever.cron \
41
+ <<-file
42
+ set :job_template, nil
43
+ every "weekday", :at => '5:02am, 3:52pm' do
44
+ command "blahblah"
45
+ end
46
+ file
47
+ end
48
+
49
+ should "output the commands for both times given" do
50
+ assert_match '2 5 * * 1-5 blahblah', @output
51
+ assert_match '52 15 * * 1-5 blahblah', @output
52
+ end
53
+ end
54
+
55
+ context "weekday at a multiple aligned times" do
56
+ setup do
57
+ @output = Whenever.cron \
58
+ <<-file
59
+ set :job_template, nil
60
+ every "weekday", :at => '5:02am, 3:02pm' do
61
+ command "blahblah"
62
+ end
63
+ file
64
+ end
65
+
66
+ should "output the command using one entry because the times are aligned" do
67
+ assert_match '2 5,15 * * 1-5 blahblah', @output
68
+ end
69
+ end
70
+
71
+ context "various days at a various aligned times" do
72
+ setup do
73
+ @output = Whenever.cron \
74
+ <<-file
75
+ set :job_template, nil
76
+ every "mon,wed,fri", :at => '5:02am, 3:02pm' do
77
+ command "blahblah"
78
+ end
79
+ file
80
+ end
81
+
82
+ should "output the command using one entry because the times are aligned" do
83
+ assert_match '2 5,15 * * 1,3,5 blahblah', @output
84
+ end
85
+ end
86
+
87
+ context "various days at a various aligned times using a runner" do
88
+ setup do
89
+ @output = Whenever.cron \
90
+ <<-file
91
+ set :job_template, nil
92
+ set :path, '/your/path'
93
+ every "mon,wed,fri", :at => '5:02am, 3:02pm' do
94
+ runner "blahblah"
95
+ end
96
+ file
97
+ end
98
+
99
+ should "output the runner using one entry because the times are aligned" do
100
+ assert_match %(2 5,15 * * 1,3,5 cd /your/path && script/runner -e production 'blahblah'), @output
101
+ end
102
+ end
103
+
104
+ context "various days at a various aligned times using a rake task" do
105
+ setup do
106
+ @output = Whenever.cron \
107
+ <<-file
108
+ set :job_template, nil
109
+ set :path, '/your/path'
110
+ every "mon,wed,fri", :at => '5:02am, 3:02pm' do
111
+ rake "blah:blah"
112
+ end
113
+ file
114
+ end
115
+
116
+ should "output the rake task using one entry because the times are aligned" do
117
+ assert_match '2 5,15 * * 1,3,5 cd /your/path && RAILS_ENV=production bundle exec rake blah:blah --silent', @output
118
+ end
119
+ end
120
+
121
+ context "A command every 1.month at very diverse times" do
122
+ setup do
123
+ @output = Whenever.cron \
124
+ <<-file
125
+ set :job_template, nil
126
+ every [1.month, 1.day], :at => 'january 5:02am, june 17th at 2:22pm, june 3rd at 3:33am' do
127
+ command "blahblah"
128
+ end
129
+ file
130
+ end
131
+
132
+ should "output 6 commands since none align" do
133
+ # The 1.month commands
134
+ assert_match '2 5 1 * * blahblah', @output
135
+ assert_match '22 14 17 * * blahblah', @output
136
+ assert_match '33 3 3 * * blahblah', @output
137
+
138
+ # The 1.day commands
139
+ assert_match '2 5 * * * blahblah', @output
140
+ assert_match '22 14 * * * blahblah', @output
141
+ assert_match '33 3 * * * blahblah', @output
142
+ end
143
+ end
144
+
145
+ context "Multiple commands output every :reboot" do
146
+ setup do
147
+ @output = Whenever.cron \
148
+ <<-file
149
+ set :job_template, nil
150
+ every :reboot do
151
+ command "command_1"
152
+ command "command_2"
153
+ end
154
+ file
155
+ end
156
+
157
+ should "output both commands @reboot" do
158
+ assert_match "@reboot command_1", @output
159
+ assert_match "@reboot command_2", @output
160
+ end
161
+ end
162
+
163
+ context "Many different job types output every :day" do
164
+ setup do
165
+ @output = Whenever.cron \
166
+ <<-file
167
+ set :job_template, nil
168
+ set :path, '/your/path'
169
+ every :daily do
170
+ rake "blah:blah"
171
+ runner "runner_1"
172
+ command "command_1"
173
+ runner "runner_2"
174
+ command "command_2"
175
+ end
176
+ file
177
+ end
178
+
179
+ should "output all of the commands @daily" do
180
+ assert_match '@daily cd /your/path && RAILS_ENV=production bundle exec rake blah:blah --silent', @output
181
+ assert_match %(@daily cd /your/path && script/runner -e production 'runner_1'), @output
182
+ assert_match '@daily command_1', @output
183
+ assert_match %(@daily cd /your/path && script/runner -e production 'runner_2'), @output
184
+ assert_match '@daily command_2', @output
185
+ end
186
+ end
187
+
188
+ context "every 5 minutes but but starting at 1" do
189
+ setup do
190
+ @output = Whenever.cron \
191
+ <<-file
192
+ set :job_template, nil
193
+ every 5.minutes, :at => 1 do
194
+ command "blahblah"
195
+ end
196
+ file
197
+ end
198
+
199
+ should "output the command using that time" do
200
+ assert_match '1,6,11,16,21,26,31,36,41,46,51,56 * * * * blahblah', @output
201
+ end
202
+ end
203
+
204
+ context "every 4 minutes but starting at 2" do
205
+ setup do
206
+ @output = Whenever.cron \
207
+ <<-file
208
+ set :job_template, nil
209
+ every 4.minutes, :at => 2 do
210
+ command "blahblah"
211
+ end
212
+ file
213
+ end
214
+
215
+ should "output the command using that time" do
216
+ assert_match '2,6,10,14,18,22,26,30,34,38,42,46,50,54,58 * * * * blahblah', @output
217
+ end
218
+ end
219
+
220
+ context "every 3 minutes but starting at 7" do
221
+ setup do
222
+ @output = Whenever.cron \
223
+ <<-file
224
+ set :job_template, nil
225
+ every 3.minutes, :at => 7 do
226
+ command "blahblah"
227
+ end
228
+ file
229
+ end
230
+
231
+ should "output the command using that time" do
232
+ assert_match '7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58 * * * * blahblah', @output
233
+ end
234
+ end
235
+
236
+ context "every 2 minutes but starting at 27" do
237
+ setup do
238
+ @output = Whenever.cron \
239
+ <<-file
240
+ set :job_template, nil
241
+ every 2.minutes, :at => 27 do
242
+ command "blahblah"
243
+ end
244
+ file
245
+ end
246
+
247
+ should "output the command using that time" do
248
+ assert_match '27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59 * * * * blahblah', @output
249
+ end
250
+ end
251
+
252
+ context "using raw cron syntax" do
253
+ setup do
254
+ @output = Whenever.cron \
255
+ <<-file
256
+ set :job_template, nil
257
+ every '0 0 27,31 * *' do
258
+ command "blahblah"
259
+ end
260
+ file
261
+ end
262
+
263
+ should "output the command using the same cron syntax" do
264
+ assert_match '0 0 27,31 * * blahblah', @output
265
+ end
266
+ end
267
+
268
+ end
@@ -0,0 +1,182 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+
3
+ class OutputDefaultDefinedJobsTest < Test::Unit::TestCase
4
+
5
+ # command
6
+
7
+ context "A plain command with the job template set to nil" do
8
+ setup do
9
+ @output = Whenever.cron \
10
+ <<-file
11
+ set :job_template, nil
12
+ every 2.hours do
13
+ command "blahblah"
14
+ end
15
+ file
16
+ end
17
+
18
+ should "output the command" do
19
+ assert_match /^.+ .+ .+ .+ blahblah$/, @output
20
+ end
21
+ end
22
+
23
+ context "A plain command with no job template set" do
24
+ setup do
25
+ @output = Whenever.cron \
26
+ <<-file
27
+ every 2.hours do
28
+ command "blahblah"
29
+ end
30
+ file
31
+ end
32
+
33
+ should "output the command with the default job template" do
34
+ assert_match /^.+ .+ .+ .+ \/bin\/bash -l -c 'blahblah'$/, @output
35
+ end
36
+ end
37
+
38
+ context "A plain command that overrides the job_template set" do
39
+ setup do
40
+ @output = Whenever.cron \
41
+ <<-file
42
+ set :job_template, "/bin/bash -l -c ':job'"
43
+ every 2.hours do
44
+ command "blahblah", :job_template => "/bin/sh -l -c ':job'"
45
+ end
46
+ file
47
+ end
48
+
49
+ should "output the command using that job_template" do
50
+ assert_match /^.+ .+ .+ .+ \/bin\/sh -l -c 'blahblah'$/, @output
51
+ assert_no_match /bash/, @output
52
+ end
53
+ end
54
+
55
+ context "A plain command that is conditional on default environent and path" do
56
+ setup do
57
+ Whenever.expects(:path).at_least_once.returns('/what/you/want')
58
+ @output = Whenever.cron \
59
+ <<-file
60
+ set :job_template, nil
61
+ if environment == 'production' && path == '/what/you/want'
62
+ every 2.hours do
63
+ command "blahblah"
64
+ end
65
+ end
66
+ file
67
+ end
68
+
69
+ should "output the command" do
70
+ assert_match /blahblah/, @output
71
+ end
72
+ end
73
+
74
+ # runner
75
+
76
+ context "A runner with path set" do
77
+ setup do
78
+ @output = Whenever.cron \
79
+ <<-file
80
+ set :job_template, nil
81
+ set :path, '/my/path'
82
+ every 2.hours do
83
+ runner 'blahblah'
84
+ end
85
+ file
86
+ end
87
+
88
+ should "output the runner using that path" do
89
+ assert_match two_hours + %( cd /my/path && script/runner -e production 'blahblah'), @output
90
+ end
91
+ end
92
+
93
+ context "A runner that overrides the path set" do
94
+ setup do
95
+ @output = Whenever.cron \
96
+ <<-file
97
+ set :job_template, nil
98
+ set :path, '/my/path'
99
+ every 2.hours do
100
+ runner "blahblah", :path => '/some/other/path'
101
+ end
102
+ file
103
+ end
104
+
105
+ should "output the runner using that path" do
106
+ assert_match two_hours + %( cd /some/other/path && script/runner -e production 'blahblah'), @output
107
+ end
108
+ end
109
+
110
+ context "A runner for a Rails 3 app" do
111
+ setup do
112
+ Whenever.expects(:path).at_least_once.returns('/my/path')
113
+ Whenever.expects(:rails3?).returns(true)
114
+ @output = Whenever.cron \
115
+ <<-file
116
+ set :job_template, nil
117
+ every 2.hours do
118
+ runner 'blahblah'
119
+ end
120
+ file
121
+ end
122
+
123
+ should "use the Rails 3 runner job by default" do
124
+ assert_match two_hours + %( cd /my/path && script/rails runner -e production 'blahblah'), @output
125
+ end
126
+ end
127
+
128
+ # rake
129
+
130
+ context "A rake command with path set" do
131
+ setup do
132
+ @output = Whenever.cron \
133
+ <<-file
134
+ set :job_template, nil
135
+ set :path, '/my/path'
136
+ every 2.hours do
137
+ rake "blahblah"
138
+ end
139
+ file
140
+ end
141
+
142
+ should "output the rake command using that path" do
143
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=production bundle exec rake blahblah --silent', @output
144
+ end
145
+ end
146
+
147
+ context "A rake for a non-bundler app" do
148
+ setup do
149
+ Whenever.expects(:path).at_least_once.returns('/my/path')
150
+ Whenever.expects(:bundler?).returns(false)
151
+ @output = Whenever.cron \
152
+ <<-file
153
+ set :job_template, nil
154
+ every 2.hours do
155
+ rake 'blahblah'
156
+ end
157
+ file
158
+ end
159
+
160
+ should "not use invoke through bundler" do
161
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=production rake blahblah --silent', @output
162
+ end
163
+ end
164
+
165
+ context "A rake command that overrides the path set" do
166
+ setup do
167
+ @output = Whenever.cron \
168
+ <<-file
169
+ set :job_template, nil
170
+ set :path, '/my/path'
171
+ every 2.hours do
172
+ rake "blahblah", :path => '/some/other/path'
173
+ end
174
+ file
175
+ end
176
+
177
+ should "output the rake command using that path" do
178
+ assert_match two_hours + ' cd /some/other/path && RAILS_ENV=production bundle exec rake blahblah --silent', @output
179
+ end
180
+ end
181
+
182
+ end