hybridgroup-whenever 0.39

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,56 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputEnvTest < Test::Unit::TestCase
4
+
5
+ context "The output from Whenever with environment variables set" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ env :MYVAR, 'blah'
10
+ env 'MAILTO', "someone@example.com"
11
+ file
12
+ end
13
+
14
+ should "output MYVAR environment variable" do
15
+ assert_match "MYVAR=blah", @output
16
+ end
17
+
18
+ should "output MAILTO environment variable" do
19
+ assert_match "MAILTO=someone@example.com", @output
20
+ end
21
+ end
22
+
23
+ context "No PATH environment variable set" do
24
+ setup do
25
+ Whenever::JobList.any_instance.expects(:read_path).at_least_once.returns('/usr/local/bin')
26
+ @output = Whenever.cron ""
27
+ end
28
+
29
+ should "add a PATH variable based on the user's PATH" do
30
+ assert_match "PATH=/usr/local/bin", @output
31
+ end
32
+ end
33
+
34
+ context "A PATH environment variable set" do
35
+ setup do
36
+ Whenever::JobList.stubs(:read_path).returns('/usr/local/bin')
37
+ @output = Whenever.cron "env :PATH, '/my/path'"
38
+ end
39
+
40
+ should "use that path and the user's PATH" do
41
+ assert_match "PATH=/my/path", @output
42
+ assert_no_match /local/, @output
43
+ end
44
+ end
45
+
46
+ context "No PATH set and instructed not to automatically load the user's path" do
47
+ setup do
48
+ @output = Whenever.cron "set :set_path_automatically, false"
49
+ end
50
+
51
+ should "not have a PATH set" do
52
+ assert_no_match /PATH/, @output
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,70 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputLockrunTest < Test::Unit::TestCase
4
+
5
+ context "A lockrun on a command" do
6
+ setup do
7
+
8
+ @output = Whenever.cron \
9
+ <<-file
10
+ set :path, '/some/directory'
11
+ every 2.hours do
12
+ command "blahblah", :lockrun => true
13
+ end
14
+ file
15
+ end
16
+
17
+ should "output the command wrapped by lockrun with the default lockfile" do
18
+ assert_match two_hours + %Q{ /usr/bin/env lockrun --lockfile=/some/directory/log/default.lockrun -- sh -c 'blahblah'}, @output
19
+ end
20
+ end
21
+
22
+ context "A lockrun on a rake task" do
23
+ setup do
24
+ @output = Whenever.cron \
25
+ <<-file
26
+ set :path, '/my/super/directory'
27
+ every 2.hours do
28
+ rake "blahblah", :lockrun => true
29
+ end
30
+ file
31
+ end
32
+
33
+ should "output the command wrapped by lockrun with the default lockfile" do
34
+ assert_includes %Q{#{two_hours} /usr/bin/env lockrun --lockfile=/my/super/directory/log/default.lockrun -- sh -c 'cd /my/super/directory && RAILS_ENV=production /usr/bin/env rake blahblah'}, @output
35
+ end
36
+ end
37
+
38
+ context "A lockrun on a runner" do
39
+ setup do
40
+ @output = Whenever.cron \
41
+ <<-file
42
+ set :path, '/my/directory'
43
+ every 2.hours do
44
+ runner "blahblah", :lockrun => true
45
+ end
46
+ file
47
+ end
48
+
49
+ should "output the command wrapped by lockrun with the default lockfile" do
50
+ assert_includes %Q{#{two_hours} /usr/bin/env lockrun --lockfile=/my/directory/log/default.lockrun -- sh -c '/my/directory/script/runner -e production "blahblah"'}, @output
51
+ end
52
+ end
53
+
54
+ context "A lockrun with a custom lockfile" do
55
+ setup do
56
+ @output = Whenever.cron \
57
+ <<-file
58
+ set :path, '/some/directory'
59
+ every 2.hours do
60
+ command "blahblah", :lockrun => "zomg"
61
+ end
62
+ file
63
+ end
64
+
65
+ should "output the command wrapped by lockrun with the zomg lockfile" do
66
+ assert_includes %Q{#{two_hours} /usr/bin/env lockrun --lockfile=/some/directory/log/zomg.lockrun -- sh -c 'blahblah'}, @output
67
+ end
68
+ end
69
+
70
+ end
@@ -0,0 +1,74 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputRakeTest < Test::Unit::TestCase
4
+
5
+ # Rake are generated in an almost identical way to runners so we
6
+ # only need some basic tests to ensure they are output correctly
7
+
8
+ context "A rake command with path set" do
9
+ setup do
10
+ @output = Whenever.cron \
11
+ <<-file
12
+ set :path, '/my/path'
13
+ every 2.hours do
14
+ rake "blahblah"
15
+ end
16
+ file
17
+ end
18
+
19
+ should "output the rake command using that path" do
20
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=production /usr/bin/env rake blahblah', @output
21
+ end
22
+ end
23
+
24
+ context "A rake command that overrides the path set" do
25
+ setup do
26
+ @output = Whenever.cron \
27
+ <<-file
28
+ set :path, '/my/path'
29
+ every 2.hours do
30
+ rake "blahblah", :path => '/some/other/path'
31
+ end
32
+ file
33
+ end
34
+
35
+ should "output the rake command using that path" do
36
+ assert_match two_hours + ' cd /some/other/path && RAILS_ENV=production /usr/bin/env rake blahblah', @output
37
+ end
38
+ end
39
+
40
+ context "A rake command with environment set" do
41
+ setup do
42
+ @output = Whenever.cron \
43
+ <<-file
44
+ set :environment, :silly
45
+ set :path, '/my/path'
46
+ every 2.hours do
47
+ rake "blahblah"
48
+ end
49
+ file
50
+ end
51
+
52
+ should "output the rake command using that environment" do
53
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=silly /usr/bin/env rake blahblah', @output
54
+ end
55
+ end
56
+
57
+ context "A rake command that overrides the environment set" do
58
+ setup do
59
+ @output = Whenever.cron \
60
+ <<-file
61
+ set :environment, :silly
62
+ set :path, '/my/path'
63
+ every 2.hours do
64
+ rake "blahblah", :environment => :serious
65
+ end
66
+ file
67
+ end
68
+
69
+ should "output the rake command using that environment" do
70
+ assert_match two_hours + ' cd /my/path && RAILS_ENV=serious /usr/bin/env rake blahblah', @output
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,209 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/test_helper")
2
+
3
+ class OutputRunnerTest < Test::Unit::TestCase
4
+
5
+ context "A runner with path set" do
6
+ setup do
7
+ @output = Whenever.cron \
8
+ <<-file
9
+ set :path, '/my/path'
10
+ every 2.hours do
11
+ runner "blahblah"
12
+ end
13
+ file
14
+ end
15
+
16
+ should "output the runner using that path" do
17
+ assert_match two_hours + ' /my/path/script/runner -e production "blahblah"', @output
18
+ end
19
+ end
20
+
21
+ context "A runner that overrides the path set" do
22
+ setup do
23
+ @output = Whenever.cron \
24
+ <<-file
25
+ set :path, '/my/path'
26
+ every 2.hours do
27
+ runner "blahblah", :path => '/some/other/path'
28
+ end
29
+ file
30
+ end
31
+
32
+ should "output the runner using that path" do
33
+ assert_match two_hours + ' /some/other/path/script/runner -e production "blahblah"', @output
34
+ end
35
+ end
36
+
37
+ context "A runner with no path set and RAILS_ROOT defined" do
38
+ setup do
39
+ Whenever.stubs(:path).returns('/my/path')
40
+
41
+ @output = Whenever.cron \
42
+ <<-file
43
+ every 2.hours do
44
+ runner "blahblah"
45
+ end
46
+ file
47
+ end
48
+
49
+ should "output the runner using that path" do
50
+ assert_match two_hours + ' /my/path/script/runner -e production "blahblah"', @output
51
+ end
52
+ end
53
+
54
+ context "A runner with path set AND RAILS_ROOT defined" do
55
+ setup do
56
+ Whenever.stubs(:path).returns('/my/rails/path')
57
+
58
+ @output = Whenever.cron \
59
+ <<-file
60
+ set :path, '/my/path'
61
+ every 2.hours do
62
+ runner "blahblah"
63
+ end
64
+ file
65
+ end
66
+
67
+ should "use the path" do
68
+ assert_match two_hours + ' /my/path/script/runner -e production "blahblah"', @output
69
+ assert_no_match /\/rails\/path/, @output
70
+ end
71
+ end
72
+
73
+ context "A runner with no path set and no RAILS_ROOT defined" do
74
+ setup do
75
+ Whenever.stubs(:path).returns(nil)
76
+
77
+ @input = <<-file
78
+ every 2.hours do
79
+ runner "blahblah"
80
+ end
81
+ file
82
+ end
83
+
84
+ should "raise an exception" do
85
+ assert_raises ArgumentError do
86
+ Whenever.cron(@input)
87
+ end
88
+ end
89
+ end
90
+
91
+ context "A runner with an environment set" do
92
+ setup do
93
+ @output = Whenever.cron \
94
+ <<-file
95
+ set :environment, :silly
96
+ set :path, '/my/path'
97
+ every 2.hours do
98
+ runner "blahblah"
99
+ end
100
+ file
101
+ end
102
+
103
+ should "output the runner using that environment" do
104
+ assert_match two_hours + ' /my/path/script/runner -e silly "blahblah"', @output
105
+ end
106
+ end
107
+
108
+ context "A runner that overrides the environment set" do
109
+ setup do
110
+ @output = Whenever.cron \
111
+ <<-file
112
+ set :environment, :silly
113
+ set :path, '/my/path'
114
+ every 2.hours do
115
+ runner "blahblah", :environment => :serious
116
+ end
117
+ file
118
+ end
119
+
120
+ should "output the runner using that environment" do
121
+ assert_match two_hours + ' /my/path/script/runner -e serious "blahblah"', @output
122
+ end
123
+ end
124
+
125
+ context "A runner where the environment is overridden using the :set option" do
126
+ setup do
127
+ @output = Whenever.cron :set => 'environment=serious', :string => \
128
+ <<-file
129
+ set :environment, :silly
130
+ set :path, '/my/path'
131
+ every 2.hours do
132
+ runner "blahblah"
133
+ end
134
+ file
135
+ end
136
+
137
+ should "output the runner using the override environment" do
138
+ assert_match two_hours + ' /my/path/script/runner -e serious "blahblah"', @output
139
+ end
140
+ end
141
+
142
+ context "A runner where the environment and path are overridden using the :set option" do
143
+ setup do
144
+ @output = Whenever.cron :set => 'environment=serious&path=/serious/path', :string => \
145
+ <<-file
146
+ set :environment, :silly
147
+ set :path, '/silly/path'
148
+ every 2.hours do
149
+ runner "blahblah"
150
+ end
151
+ file
152
+ end
153
+
154
+ should "output the runner using the overridden path and environment" do
155
+ assert_match two_hours + ' /serious/path/script/runner -e serious "blahblah"', @output
156
+ end
157
+ end
158
+
159
+ context "A runner where the environment and path are overridden using the :set option with spaces in the string" do
160
+ setup do
161
+ @output = Whenever.cron :set => ' environment = serious& path =/serious/path', :string => \
162
+ <<-file
163
+ set :environment, :silly
164
+ set :path, '/silly/path'
165
+ every 2.hours do
166
+ runner "blahblah"
167
+ end
168
+ file
169
+ end
170
+
171
+ should "output the runner using the overridden path and environment" do
172
+ assert_match two_hours + ' /serious/path/script/runner -e serious "blahblah"', @output
173
+ end
174
+ end
175
+
176
+ context "A runner where the environment is overridden using the :set option but no value is given" do
177
+ setup do
178
+ @output = Whenever.cron :set => ' environment=', :string => \
179
+ <<-file
180
+ set :environment, :silly
181
+ set :path, '/silly/path'
182
+ every 2.hours do
183
+ runner "blahblah"
184
+ end
185
+ file
186
+ end
187
+
188
+ should "output the runner using the original environmnet" do
189
+ assert_match two_hours + ' /silly/path/script/runner -e silly "blahblah"', @output
190
+ end
191
+ end
192
+
193
+ context "A runner which makes use of double quotes" do
194
+ setup do
195
+ @output = Whenever.cron \
196
+ <<-file
197
+ set :path, '/my/path'
198
+ every 2.hours do
199
+ runner 'Product.import("http://example.com/product.xml")'
200
+ end
201
+ file
202
+ end
203
+
204
+ should "output the runner using the original environmnet" do
205
+ assert_match two_hours + ' /my/path/script/runner -e production "Product.import(\"http://example.com/product.xml\")"', @output
206
+ end
207
+ end
208
+
209
+ end
@@ -0,0 +1,56 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+
4
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/whenever")
5
+
6
+ begin
7
+ require 'shoulda'
8
+ rescue LoadError
9
+ warn 'To test Whenever you need the shoulda gem:'
10
+ warn '$ sudo gem install thoughtbot-shoulda'
11
+ exit(1)
12
+ end
13
+
14
+ begin
15
+ require 'redgreen'
16
+ rescue LoadError
17
+ end
18
+
19
+ begin
20
+ require 'ruby-debug'
21
+ rescue LoadError
22
+ end
23
+
24
+ begin
25
+ require 'mocha'
26
+ rescue LoadError
27
+ warn 'To test Whenever you need the mocha gem:'
28
+ warn '$ sudo gem install mocha'
29
+ exit(1)
30
+ end
31
+
32
+
33
+ module TestExtensions
34
+
35
+ def two_hours
36
+ "0 0,2,4,6,8,10,12,14,16,18,20,22 * * *"
37
+ end
38
+
39
+ def assert_includes(substring, string)
40
+ message = build_message message, "<?>\n\ndoes not include:\n\n <?>.", string, substring
41
+ assert_block message do
42
+ string.include? substring
43
+ end
44
+ end
45
+
46
+ def cron(string)
47
+ assert_nothing_raised do
48
+ Whenever.cron string
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ class Test::Unit::TestCase
55
+ include TestExtensions
56
+ end