kumade 0.3.0 → 0.4.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,31 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
- include Rake::DSL if defined?(Rake::DSL)
3
+ require 'jammit'
4
4
 
5
5
  describe Kumade::Deployer, "#pre_deploy" do
6
- before { subject.stub(:say) }
6
+ let(:git) { subject.git }
7
7
 
8
- it "calls the correct methods in order" do
9
- %w(
10
- ensure_clean_git
11
- package_assets
12
- sync_github
13
- ).each do |task|
14
- subject.should_receive(task).ordered.and_return(true)
15
- end
16
-
17
- subject.pre_deploy
18
- end
19
-
20
- it "syncs to github" do
21
- %w(
22
- ensure_clean_git
23
- package_assets
24
- ).each do |task|
25
- subject.stub(task)
26
- end
8
+ it "calls the correct methods" do
9
+ git.expects(:ensure_clean_git)
10
+ subject.expects(:package_assets)
11
+ git.expects(:push).with(subject.git.current_branch)
27
12
 
28
- subject.should_receive(:sync_github)
29
13
  subject.pre_deploy
30
14
  end
31
15
  end
@@ -34,453 +18,99 @@ describe Kumade::Deployer, "#deploy" do
34
18
  let(:remote_name) { 'staging' }
35
19
 
36
20
  before do
37
- subject.stub(:say)
21
+ STDOUT.stubs(:puts)
38
22
  force_add_heroku_remote(remote_name)
39
23
  end
40
24
 
41
- it "calls the correct methods in order" do
42
- subject.stub(:run => true)
25
+ it "calls the correct methods" do
26
+ subject.expects(:pre_deploy)
27
+ subject.heroku.expects(:sync)
28
+ subject.heroku.expects(:migrate_database)
29
+ subject.expects(:post_deploy)
43
30
 
44
- subject.should_receive(:ensure_heroku_remote_exists).
45
- ordered
46
-
47
- subject.should_receive(:pre_deploy).
48
- ordered.
49
- and_return(true)
50
-
51
- subject.should_receive(:sync_heroku).
52
- ordered.
53
- and_return(true)
31
+ subject.deploy
32
+ end
54
33
 
55
- subject.should_receive(:heroku_migrate).
56
- ordered
34
+ it "calls post_deploy if deploy fails" do
35
+ subject.git.stubs(:heroku_remote?).raises(RuntimeError)
57
36
 
58
- subject.should_receive(:post_deploy)
37
+ subject.expects(:post_deploy)
59
38
 
60
39
  subject.deploy
61
40
  end
62
41
  end
63
42
 
64
43
  describe Kumade::Deployer, "#sync_github" do
65
- let(:git_mock) { mock() }
66
-
67
- before { subject.stub(:git => git_mock) }
44
+ let(:new_branch) { 'new-branch' }
68
45
 
69
- it "calls git.push" do
70
- git_mock.should_receive(:push).with("master")
71
- subject.sync_github
46
+ before do
47
+ `git checkout -b #{new_branch}`
72
48
  end
73
- end
74
-
75
- describe Kumade::Deployer, "#sync_heroku" do
76
- let(:environment) { 'my-env' }
77
- let(:git_mock) { mock() }
78
49
 
79
- subject { Kumade::Deployer.new(environment) }
50
+ it "pushes the current branch to github" do
51
+ subject.git.expects(:push).with(new_branch)
80
52
 
81
- before { subject.stub(:git => git_mock) }
82
-
83
- it "calls git.create and git.push" do
84
- git_mock.should_receive(:create).with("deploy")
85
- git_mock.should_receive(:push).with("deploy:master", environment, true)
86
- subject.sync_heroku
53
+ subject.sync_github
87
54
  end
88
55
  end
89
56
 
90
57
  describe Kumade::Deployer, "#ensure_clean_git" do
91
- let(:git_mock) { mock() }
92
-
93
- before { subject.stub(:git => git_mock) }
94
-
95
58
  it "calls git.ensure_clean_git" do
96
- git_mock.should_receive(:ensure_clean_git)
59
+ subject.git.expects(:ensure_clean_git)
97
60
  subject.ensure_clean_git
98
61
  end
99
62
  end
100
63
 
101
- describe Kumade::Deployer, "#package_assets" do
102
- context "with Jammit installed" do
103
- it "calls package_with_jammit" do
104
- subject.should_receive(:package_with_jammit)
105
- subject.package_assets
106
- end
107
- end
108
-
109
- context "with Jammit not installed" do
110
- before { subject.stub(:jammit_installed? => false) }
111
- it "does not call package_with_jammit" do
112
- subject.should_not_receive(:package_with_jammit)
113
- subject.package_assets
114
- end
115
- end
116
-
117
- context "with More installed" do
118
- before do
119
- subject.stub(:jammit_installed? => false)
120
- subject.stub(:more_installed? => true)
121
- end
122
-
123
- it "calls package_with_more" do
124
- subject.should_receive(:package_with_more)
125
- subject.package_assets
126
- end
127
- end
128
-
129
- context "with More not installed" do
130
- before do
131
- subject.stub(:jammit_installed? => false)
132
- subject.stub(:more_installed? => false)
133
- end
134
-
135
- it "does not call package_with_more" do
136
- subject.should_not_receive(:package_with_more)
137
- subject.package_assets
138
- end
139
- end
140
-
141
- context "with custom rake task installed" do
142
- before do
143
- subject.stub(:jammit_installed? => false,
144
- :more_installed? => false,
145
- :invoke_custom_task => nil,
146
- :custom_task? => true)
147
- end
148
-
149
- it "invokes custom task" do
150
- subject.should_receive(:invoke_custom_task)
151
- subject.package_assets
152
- end
153
- end
154
-
155
- context "with custom rake task not installed" do
156
- before do
157
- subject.stub(:jammit_installed? => false,
158
- :more_installed? => false,
159
- :invoke_custom_task => nil,
160
- :custom_task? => false)
161
- end
162
-
163
- it "does not invoke custom task" do
164
- subject.should_not_receive(:invoke_custom_task)
165
- subject.package_assets
166
- end
167
- end
168
- end
169
-
170
- describe Kumade::Deployer, "#package_with_jammit" do
171
- before do
172
- subject.stub(:git_add_and_commit_all_assets_in)
173
- subject.stub(:say)
174
- Jammit.stub(:package!)
175
- end
176
-
177
- it "calls Jammit.package!" do
178
- Jammit.should_receive(:package!).once
179
- subject.package_with_jammit
180
- end
181
-
182
- context "with updated assets" do
183
- before { subject.stub(:git => mock(:dirty? => true)) }
184
-
185
- it "prints the correct message" do
186
- subject.should_receive(:success).with("Packaged assets with Jammit")
187
-
188
- subject.package_with_jammit
189
- end
190
-
191
- it "calls git_add_and_commit_all_assets_in" do
192
- subject.stub(:jammit_assets_path => 'jammit-assets')
193
- subject.should_receive(:git_add_and_commit_all_assets_in).
194
- with('jammit-assets').
195
- and_return(true)
196
-
197
- subject.package_with_jammit
198
- end
199
- end
200
-
201
- it "prints an error if packaging failed" do
202
- Jammit.stub(:package!) do
203
- raise Jammit::MissingConfiguration.new("random Jammit error")
204
- end
205
- subject.should_receive(:error).with("Error: Jammit::MissingConfiguration: random Jammit error")
206
-
207
- subject.package_with_jammit
208
- end
209
- end
210
-
211
- describe Kumade::Deployer, "#invoke_custom_task" do
212
- let(:task) { stub('task', :invoke => nil) }
213
-
214
- before do
215
- subject.stub(:say)
216
- Rake::Task.stub(:[] => task)
217
- end
218
-
219
- it "calls deploy task" do
220
- Rake::Task.should_receive(:[]).with("kumade:before_asset_compilation")
221
- task.should_receive(:invoke)
222
- subject.invoke_custom_task
223
- end
224
- end
225
-
226
- describe Kumade::Deployer, "#package_with_more" do
227
- before do
228
- subject.stub(:git_add_and_commit_all_assets_in => true,
229
- :more_assets_path => 'assets')
230
- subject.stub(:say)
231
- end
232
-
233
- it "calls the more:generate task" do
234
- subject.should_receive(:run).with("bundle exec rake more:generate")
235
- subject.package_with_more
236
- end
237
-
238
- context "with changed assets" do
239
- it "prints a success message" do
240
- subject.stub(:run).with("bundle exec rake more:generate")
241
- subject.stub(:git => mock(:dirty? => true))
242
- subject.should_receive(:success).with("Packaged assets with More")
243
-
244
- subject.package_with_more
245
- end
246
-
247
- it "calls git_add_and_commit_all_assets_in if assets were added" do
248
- subject.stub(:git => mock(:dirty? => true),
249
- :more_assets_path => 'blerg')
250
- subject.stub(:run).with("bundle exec rake more:generate")
251
- subject.should_receive(:git_add_and_commit_all_assets_in).
252
- with('blerg').
253
- and_return(true)
254
-
255
- subject.package_with_more
256
- end
257
- end
258
-
259
- context "with no changed assets" do
260
- it "prints no message" do
261
- subject.stub(:run).with("bundle exec rake more:generate")
262
- subject.stub(:git => mock(:dirty? => false))
263
- subject.should_not_receive(:say)
264
-
265
- subject.package_with_more
266
- end
267
-
268
- it "does not call git_add_and_commit_all_more_assets" do
269
- subject.stub(:run).with("bundle exec rake more:generate")
270
- subject.stub(:git => mock(:dirty? => false))
271
- subject.should_not_receive(:git_add_and_commit_all_assets_in)
272
-
273
- subject.package_with_more
274
- end
275
- end
276
-
277
- it "prints an error if packaging failed" do
278
- subject.stub(:run) do |arg|
279
- if arg == "bundle exec rake more:generate"
280
- raise "blerg"
281
- end
282
- end
283
-
284
- subject.should_receive(:error).with("Error: RuntimeError: blerg")
285
-
286
- subject.package_with_more
287
- end
288
- end
289
-
290
- describe Kumade::Deployer, "#git_add_and_commit_all_assets_in" do
291
- let(:git_mock) { mock() }
292
-
293
- before { subject.stub(:git => git_mock) }
294
-
295
- it "calls git.add_and_commit_all_in" do
296
- git_mock.should_receive(:add_and_commit_all_in).with("dir", 'deploy', 'Compiled assets', "Added and committed all assets", "couldn't commit assets")
297
- subject.git_add_and_commit_all_assets_in("dir")
298
- end
299
- end
300
-
301
- describe Kumade::Deployer, "#jammit_assets_path" do
302
- it "returns the correct asset path" do
303
- Jammit.stub(:package_path => 'blerg')
304
- current_dir = File.expand_path(Dir.pwd)
305
- subject.jammit_assets_path.should == File.join(current_dir, 'public', 'blerg')
306
- end
307
- end
308
-
309
- describe Kumade::Deployer, "#more_assets_path" do
310
- it "returns the correct asset path" do
311
- module ::Less
312
- class More
313
- def self.destination_path
314
- 'blerg'
315
- end
316
- end
317
- end
318
- subject.more_assets_path.should == 'public/blerg'
319
- end
320
- end
321
-
322
- describe Kumade::Deployer, "#jammit_installed?" do
323
- it "returns true because it's loaded by the Gemfile" do
324
- Kumade::Deployer.new.jammit_installed?.should be_true
325
- end
326
-
327
- it "returns false if jammit is not installed" do
328
- Kumade::Deployer.new.jammit_installed?.should be_true
329
- end
330
- end
331
-
332
- describe Kumade::Deployer, "#more_installed?" do
333
- before do
334
- if defined?(Less)
335
- Object.send(:remove_const, :Less)
336
- end
337
- end
338
-
339
- it "returns false if it does not find Less::More" do
340
- Kumade::Deployer.new.more_installed?.should be_false
341
- end
342
-
343
- it "returns true if it finds Less::More" do
344
- module Less
345
- class More
346
- end
347
- end
348
- Kumade::Deployer.new.more_installed?.should be_true
349
- end
350
- end
351
-
352
- describe Kumade::Deployer, "#custom_task?" do
353
- before do
354
- Rake::Task.clear
355
- end
356
-
357
- it "returns true if it task found" do
358
- namespace :kumade do
359
- task :before_asset_compilation do
360
-
361
- end
362
- end
363
- Kumade::Deployer.new.custom_task?.should be_true
364
- end
365
-
366
- it "returns false if task not found" do
367
- Kumade::Deployer.new.custom_task?.should be_false
368
- end
369
- end
370
-
371
- describe Kumade::Deployer, "#heroku_migrate" do
372
- let(:environment) { 'staging' }
373
-
374
- before do
375
- subject.stub(:say)
376
- force_add_heroku_remote(environment)
377
- end
378
-
379
- it "runs db:migrate with the correct app" do
380
- subject.stub(:run => true)
381
- subject.should_receive(:heroku).
382
- with("rake db:migrate")
383
- subject.should_receive(:success).with("Migrated staging")
384
-
385
- subject.heroku_migrate
386
- end
387
- end
388
-
389
64
  describe Kumade::Deployer, "#ensure_heroku_remote_exists" do
390
- let(:environment) { 'staging' }
391
- let(:bad_environment) { 'bad' }
65
+ let(:environment) { 'staging' }
392
66
 
393
67
  before do
394
- subject.stub(:say)
395
68
  force_add_heroku_remote(environment)
396
- `git remote add #{bad_environment} blerg@example.com`
69
+ Kumade.configuration.environment = environment
397
70
  end
398
71
 
399
72
  context "when the remote points to Heroku" do
400
- subject { Kumade::Deployer.new(environment) }
73
+ before { STDOUT.stubs(:puts) }
401
74
 
402
75
  it "does not print an error" do
403
- subject.should_not_receive(:error)
404
-
405
76
  subject.ensure_heroku_remote_exists
77
+
78
+ STDOUT.should_not have_received(:puts).with(regexp_matches(/==> !/))
406
79
  end
407
80
 
408
81
  it "prints a success message" do
409
- subject.should_receive(:success).with("#{environment} is a Heroku remote")
410
-
411
82
  subject.ensure_heroku_remote_exists
83
+
84
+ STDOUT.should have_received(:puts).with(regexp_matches(/#{environment} is a Heroku remote/))
412
85
  end
413
86
  end
414
87
 
415
-
416
88
  context "when the remote does not exist" do
417
- subject { Kumade::Deployer.new(environment) }
418
- before { remove_remote(environment) }
89
+ before do
90
+ remove_remote(environment)
91
+ STDOUT.stubs(:puts)
92
+ end
419
93
 
420
94
  it "prints an error" do
421
- subject.should_receive(:error).with(%{Cannot deploy: "#{environment}" remote does not exist})
95
+ lambda { subject.ensure_heroku_remote_exists }.should raise_error(Kumade::DeploymentError)
422
96
 
423
- subject.ensure_heroku_remote_exists
97
+ STDOUT.should have_received(:puts).with(regexp_matches(/Cannot deploy: "#{environment}" remote does not exist/))
424
98
  end
425
99
  end
426
100
 
427
101
  context "when the remote does not point to Heroku" do
428
- subject { Kumade::Deployer.new(bad_environment) }
429
-
430
- it "prints an error" do
431
- subject.should_receive(:error).with(%{Cannot deploy: "#{bad_environment}" remote does not point to Heroku})
102
+ let(:bad_environment) { 'bad' }
432
103
 
433
- subject.ensure_heroku_remote_exists
104
+ before do
105
+ `git remote add #{bad_environment} blerg@example.com`
106
+ STDOUT.stubs(:puts)
107
+ Kumade.configuration.environment = bad_environment
434
108
  end
435
- end
436
- end
437
-
438
- describe Kumade::Deployer, "#cedar?" do
439
- context "when on Cedar" do
440
- subject { Kumade::Deployer.new('staging', false) }
441
- before { subject.stub(:heroku).and_return(" bamboo\n* cedar\n") }
442
- its(:cedar?) { should be_true }
443
- end
444
-
445
- context "when not on Cedar" do
446
- subject { Kumade::Deployer.new('staging', false) }
447
- before { subject.stub(:heroku).and_return("* bamboo\n cedar\n") }
448
- its(:cedar?) { should be_false }
449
- end
450
- end
451
109
 
452
- describe Kumade::Deployer, "#heroku" do
453
- context "when on Cedar" do
454
- subject { Kumade::Deployer.new('staging', false) }
455
- before { subject.stub(:cedar?).and_return(true) }
456
- it "runs commands with `run`" do
457
- subject.should_receive(:run_or_error).with("bundle exec heroku run rake --remote staging", //)
458
- subject.heroku("rake")
459
- end
460
- end
110
+ it "prints an error" do
111
+ lambda { subject.ensure_heroku_remote_exists }.should raise_error(Kumade::DeploymentError)
461
112
 
462
- context "when not on Cedar" do
463
- subject { Kumade::Deployer.new('staging', false) }
464
- before { subject.stub(:cedar?).and_return(false) }
465
- it "runs commands without `run`" do
466
- subject.should_receive(:run_or_error).with("bundle exec heroku rake --remote staging", //)
467
- subject.heroku("rake")
113
+ STDOUT.should have_received(:puts).with(regexp_matches(/Cannot deploy: "#{bad_environment}" remote does not point to Heroku/))
468
114
  end
469
115
  end
470
116
  end
471
-
472
- describe Kumade::Deployer, "#post_deploy" do
473
- let(:git_mock) { mock() }
474
-
475
- before { subject.stub(:git => git_mock) }
476
-
477
- it "calls git.delete" do
478
- git_mock.should_receive(:delete).with('deploy', 'master')
479
- subject.post_deploy
480
- end
481
-
482
- it "prints its message and raises its message" do
483
- subject.should_receive(:say).with("==> ! I'm an error!", :red)
484
- lambda { subject.error("I'm an error!") }.should raise_error(Kumade::DeploymentError)
485
- end
486
- end