mguymon-whenever 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,251 @@
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 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 :day 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 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
+ end
@@ -0,0 +1,164 @@
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
+ File.expects(:exists?).with('/my/path/script/rails').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 rake blahblah --silent', @output
144
+ end
145
+ end
146
+
147
+ context "A rake command that overrides the path set" do
148
+ setup do
149
+ @output = Whenever.cron \
150
+ <<-file
151
+ set :job_template, nil
152
+ set :path, '/my/path'
153
+ every 2.hours do
154
+ rake "blahblah", :path => '/some/other/path'
155
+ end
156
+ file
157
+ end
158
+
159
+ should "output the rake command using that path" do
160
+ assert_match two_hours + ' cd /some/other/path && RAILS_ENV=production rake blahblah --silent', @output
161
+ end
162
+ end
163
+
164
+ end
@@ -0,0 +1,111 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
2
+
3
+ class OutputDefinedJobTest < Test::Unit::TestCase
4
+
5
+ context "A defined job with a :task" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ set :job_template, nil
10
+ job_type :some_job, "before :task after"
11
+ every 2.hours do
12
+ some_job "during"
13
+ end
14
+ file
15
+ end
16
+
17
+ should "output the defined job with the task" do
18
+ assert_match /^.+ .+ .+ .+ before during after$/, @output
19
+ end
20
+ end
21
+
22
+ context "A defined job with a :task and some options" do
23
+ setup do
24
+ @output = Whenever.cron \
25
+ <<-file
26
+ set :job_template, nil
27
+ job_type :some_job, "before :task after :option1 :option2"
28
+ every 2.hours do
29
+ some_job "during", :option1 => 'happy', :option2 => 'birthday'
30
+ end
31
+ file
32
+ end
33
+
34
+ should "output the defined job with the task and options" do
35
+ assert_match /^.+ .+ .+ .+ before during after happy birthday$/, @output
36
+ end
37
+ end
38
+
39
+ context "A defined job with a :task and an option where the option is set globally" do
40
+ setup do
41
+ @output = Whenever.cron \
42
+ <<-file
43
+ set :job_template, nil
44
+ job_type :some_job, "before :task after :option1"
45
+ set :option1, 'happy'
46
+ every 2.hours do
47
+ some_job "during"
48
+ end
49
+ file
50
+ end
51
+
52
+ should "output the defined job with the task and options" do
53
+ assert_match /^.+ .+ .+ .+ before during after happy$/, @output
54
+ end
55
+ end
56
+
57
+ context "A defined job with a :task and an option where the option is set globally and locally" do
58
+ setup do
59
+ @output = Whenever.cron \
60
+ <<-file
61
+ set :job_template, nil
62
+ job_type :some_job, "before :task after :option1"
63
+ set :option1, 'global'
64
+ every 2.hours do
65
+ some_job "during", :option1 => 'local'
66
+ end
67
+ file
68
+ end
69
+
70
+ should "output the defined job using the local option" do
71
+ assert_match /^.+ .+ .+ .+ before during after local$/, @output
72
+ end
73
+ end
74
+
75
+ context "A defined job with a :task and an option that is not set" do
76
+ setup do
77
+ @output = Whenever.cron \
78
+ <<-file
79
+ set :job_template, nil
80
+ job_type :some_job, "before :task after :option1"
81
+ every 2.hours do
82
+ some_job "during", :option2 => 'happy'
83
+ end
84
+ file
85
+ end
86
+
87
+ should "output the defined job with that option removed" do
88
+ assert_match /^.+ .+ .+ .+ before during after$/, @output
89
+ end
90
+ end
91
+
92
+ context "A defined job that uses a :path where none is explicitly set" do
93
+ setup do
94
+ Whenever.stubs(:path).returns('/my/path')
95
+
96
+ @output = Whenever.cron \
97
+ <<-file
98
+ set :job_template, nil
99
+ job_type :some_job, "cd :path && :task"
100
+ every 2.hours do
101
+ some_job 'blahblah'
102
+ end
103
+ file
104
+ end
105
+
106
+ should "default to using the Whenever.path" do
107
+ assert_match two_hours + %( cd /my/path && blahblah), @output
108
+ end
109
+ end
110
+
111
+ end