capistrano-spec 0.5.0 → 0.5.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.
- data/Rakefile +1 -1
- data/capistrano-spec.gemspec +9 -8
- data/lib/capistrano/spec.rb +26 -6
- data/spec/capistrano-spec_spec.rb +53 -10
- data/spec/recipe/fakerecipe.rb +10 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/shared/callback_examples.rb +43 -0
- metadata +35 -51
data/Rakefile
CHANGED
data/capistrano-spec.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.5.
|
7
|
+
s.name = "capistrano-spec"
|
8
|
+
s.version = "0.5.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Joshua Nichols", "Karl Matthias", "Peter M Souter", "Jan Graichen"]
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
12
|
+
s.date = "2013-06-30"
|
13
|
+
s.description = "Helpers and matchers for testing capistrano"
|
14
|
+
s.email = "josh@technicalpickles.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
17
|
"README.rdoc"
|
@@ -32,12 +32,13 @@ Gem::Specification.new do |s|
|
|
32
32
|
"spec/spec.opts",
|
33
33
|
"spec/spec_helper.rb",
|
34
34
|
"spec/stub_commands_spec.rb",
|
35
|
+
"spec/support/shared/callback_examples.rb",
|
35
36
|
"spec/uploaded_spec.rb"
|
36
37
|
]
|
37
|
-
s.homepage =
|
38
|
+
s.homepage = "http://github.com/technicalpickles/capistrano-spec"
|
38
39
|
s.require_paths = ["lib"]
|
39
|
-
s.rubygems_version =
|
40
|
-
s.summary =
|
40
|
+
s.rubygems_version = "1.8.23"
|
41
|
+
s.summary = "Test your capistrano recipes"
|
41
42
|
|
42
43
|
if s.respond_to? :specification_version then
|
43
44
|
s.specification_version = 3
|
data/lib/capistrano/spec.rb
CHANGED
@@ -57,6 +57,18 @@ module Capistrano
|
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
def task_callable?(configuration, callbacks, task_name)
|
61
|
+
task = find_task(configuration, task_name) || stub_task(task_name)
|
62
|
+
callbacks.any? { |callback| callback.applies_to?(task) }
|
63
|
+
end
|
64
|
+
|
65
|
+
def find_task(configuration, task_name)
|
66
|
+
configuration.find_task(task_name)
|
67
|
+
end
|
68
|
+
|
69
|
+
def stub_task(task_name)
|
70
|
+
Struct.new(:fully_qualified_name).new(task_name)
|
71
|
+
end
|
60
72
|
end
|
61
73
|
|
62
74
|
module Matchers
|
@@ -66,16 +78,14 @@ module Capistrano
|
|
66
78
|
extend Helpers
|
67
79
|
|
68
80
|
match do |configuration|
|
69
|
-
|
70
|
-
callbacks = find_callback(configuration, @on,
|
81
|
+
task = configuration.find_task(task_name)
|
82
|
+
callbacks = find_callback(configuration, @on, task)
|
71
83
|
|
72
84
|
if callbacks
|
73
85
|
if @after_task_name
|
74
|
-
|
75
|
-
callbacks.any? { |callback| callback.applies_to?(@after_task) }
|
86
|
+
task_callable?(configuration, callbacks, @after_task_name)
|
76
87
|
elsif @before_task_name
|
77
|
-
|
78
|
-
callbacks.any? { |callback| callback.applies_to?(@before_task) }
|
88
|
+
task_callable?(configuration, callbacks, @before_task_name)
|
79
89
|
else
|
80
90
|
! @callback.nil?
|
81
91
|
end
|
@@ -111,6 +121,16 @@ module Capistrano
|
|
111
121
|
end
|
112
122
|
end
|
113
123
|
|
124
|
+
failure_message_for_should_not do |actual|
|
125
|
+
if @after_task_name
|
126
|
+
"expected configuration to not callback #{task_name.inspect} #{@on} #{@after_task_name.inspect}, but did"
|
127
|
+
elsif @before_task_name
|
128
|
+
"expected configuration to not callback #{task_name.inspect} #{@on} #{@before_task_name.inspect}, but did"
|
129
|
+
else
|
130
|
+
"expected configuration to not callback #{task_name.inspect} on #{@on}, but did"
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
114
134
|
end
|
115
135
|
|
116
136
|
define :have_gotten do |path|
|
@@ -53,16 +53,47 @@ describe Capistrano::Spec do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
describe 'callback' do
|
56
|
+
context 'before callbacks' do
|
57
|
+
it_should_behave_like 'correct before callback' do
|
58
|
+
let(:task_name) { 'fake:before_this_execute_thing' }
|
59
|
+
end
|
60
|
+
|
61
|
+
it_should_behave_like 'correct before callback' do
|
62
|
+
let(:task_name) { 'fake:before_this_also_execute_thing' }
|
63
|
+
end
|
64
|
+
|
65
|
+
it_should_behave_like 'correct before callback' do
|
66
|
+
let(:task_name) { 'outside:undefined_task' }
|
67
|
+
end
|
68
|
+
|
69
|
+
it_should_behave_like 'incorrect before callback' do
|
70
|
+
let(:task_name) { 'undefined_task' }
|
71
|
+
end
|
56
72
|
|
57
|
-
|
58
|
-
|
59
|
-
fake_recipe.should callback('fake:thing').before(task)
|
73
|
+
it_should_behave_like 'incorrect before callback' do
|
74
|
+
let(:task_name) { 'fake:before_this_dont_execute_thing' }
|
60
75
|
end
|
61
76
|
end
|
62
77
|
|
63
|
-
|
64
|
-
|
65
|
-
|
78
|
+
context 'after callbacks' do
|
79
|
+
it_should_behave_like 'correct after callback' do
|
80
|
+
let(:task_name) { 'fake:after_this_execute_thing' }
|
81
|
+
end
|
82
|
+
|
83
|
+
it_should_behave_like 'correct after callback' do
|
84
|
+
let(:task_name) { 'fake:after_this_also_execute_thing' }
|
85
|
+
end
|
86
|
+
|
87
|
+
it_should_behave_like 'correct after callback' do
|
88
|
+
let(:task_name) { 'outside:undefined_task' }
|
89
|
+
end
|
90
|
+
|
91
|
+
it_should_behave_like 'incorrect after callback' do
|
92
|
+
let(:task_name) { 'undefined_task' }
|
93
|
+
end
|
94
|
+
|
95
|
+
it_should_behave_like 'incorrect after callback' do
|
96
|
+
let(:task_name) { 'fake:after_this_dont_execute_thing' }
|
66
97
|
end
|
67
98
|
end
|
68
99
|
end
|
@@ -73,14 +104,20 @@ describe Capistrano::Spec do
|
|
73
104
|
fake_recipe.find_and_execute_task('fake:thing')
|
74
105
|
expect do
|
75
106
|
should have_put('fake content').to('/tmp/put')
|
76
|
-
end.to_not raise_error(
|
107
|
+
end.to_not raise_error(
|
108
|
+
RSpec::Expectations::ExpectationNotMetError,
|
109
|
+
/expected configuration to put .*\s* to .*\s*, but did not/
|
110
|
+
)
|
77
111
|
end
|
78
112
|
|
79
113
|
it "will raise error when put is not in recipe" do
|
80
114
|
fake_recipe.find_and_execute_task('fake:thing')
|
81
115
|
expect do
|
82
116
|
should have_put('real content').to('/tmp/wherever')
|
83
|
-
end.to raise_error(
|
117
|
+
end.to raise_error(
|
118
|
+
RSpec::Expectations::ExpectationNotMetError,
|
119
|
+
/expected configuration to put .*\s* to .*\s*, but did not/
|
120
|
+
)
|
84
121
|
end
|
85
122
|
end
|
86
123
|
|
@@ -89,14 +126,20 @@ describe Capistrano::Spec do
|
|
89
126
|
fake_recipe.find_and_execute_task('fake:thing')
|
90
127
|
expect do
|
91
128
|
should have_put('fake content')
|
92
|
-
end.to_not raise_error(
|
129
|
+
end.to_not raise_error(
|
130
|
+
RSpec::Expectations::ExpectationNotMetError,
|
131
|
+
/expected configuration to put .*\s*, but did not/
|
132
|
+
)
|
93
133
|
end
|
94
134
|
|
95
135
|
it "will raise error when put is not in recipe" do
|
96
136
|
fake_recipe.find_and_execute_task('fake:thing')
|
97
137
|
expect do
|
98
138
|
should have_put('real content')
|
99
|
-
end.to raise_error(
|
139
|
+
end.to raise_error(
|
140
|
+
RSpec::Expectations::ExpectationNotMetError,
|
141
|
+
/expected configuration to put .*\s*, but did not/
|
142
|
+
)
|
100
143
|
end
|
101
144
|
end
|
102
145
|
end
|
data/spec/recipe/fakerecipe.rb
CHANGED
@@ -5,8 +5,12 @@ require 'capistrano'
|
|
5
5
|
configuration.load do
|
6
6
|
before "fake:before_this_execute_thing", "fake:thing"
|
7
7
|
before "fake:before_this_also_execute_thing", "fake:thing"
|
8
|
+
before "outside:undefined_task", "fake:thing"
|
9
|
+
|
8
10
|
after "fake:after_this_execute_thing", "fake:thing"
|
9
11
|
after "fake:after_this_also_execute_thing", "fake:thing"
|
12
|
+
after "outside:undefined_task", "fake:thing"
|
13
|
+
|
10
14
|
namespace :fake do
|
11
15
|
desc "thing and run fake manifests"
|
12
16
|
task :thing do
|
@@ -24,12 +28,18 @@ require 'capistrano'
|
|
24
28
|
task :before_this_also_execute_thing do
|
25
29
|
#
|
26
30
|
end
|
31
|
+
task :before_this_dont_execute_thing do
|
32
|
+
#
|
33
|
+
end
|
27
34
|
task :after_this_execute_thing do
|
28
35
|
#
|
29
36
|
end
|
30
37
|
task :after_this_also_execute_thing do
|
31
38
|
#
|
32
39
|
end
|
40
|
+
task :after_this_dont_execute_thing do
|
41
|
+
#
|
42
|
+
end
|
33
43
|
end
|
34
44
|
end
|
35
45
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,7 +5,9 @@ require 'capistrano-spec'
|
|
5
5
|
require 'rspec'
|
6
6
|
require 'rspec/autorun'
|
7
7
|
|
8
|
+
Dir["./spec/support/**/*.rb"].sort.each { |f| require f }
|
9
|
+
|
8
10
|
RSpec.configure do |config|
|
9
|
-
|
10
|
-
|
11
|
+
config.include Capistrano::Spec::Matchers
|
12
|
+
config.include Capistrano::Spec::Helpers
|
11
13
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
shared_examples 'correct before callback' do
|
2
|
+
it "won't raise error when `before` callback has occured for the given task" do
|
3
|
+
expect do
|
4
|
+
should callback('fake:thing').before(task_name)
|
5
|
+
end.to_not raise_error(
|
6
|
+
RSpec::Expectations::ExpectationNotMetError,
|
7
|
+
/expected configuration to callback .*\s* before .*\s*, but did not/
|
8
|
+
)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
shared_examples 'incorrect before callback' do
|
13
|
+
it "will raise error when `before` callback hasn't occured for the given task" do
|
14
|
+
expect do
|
15
|
+
should_not callback('fake:thing').before(task_name)
|
16
|
+
end.to_not raise_error(
|
17
|
+
RSpec::Expectations::ExpectationNotMetError,
|
18
|
+
/expected configuration to not callback .*\s* before .*\s*, but did/
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
shared_examples 'correct after callback' do
|
24
|
+
it "won't raise error when `after` callback has occured for the given task" do
|
25
|
+
expect do
|
26
|
+
should callback('fake:thing').after(task_name)
|
27
|
+
end.to_not raise_error(
|
28
|
+
RSpec::Expectations::ExpectationNotMetError,
|
29
|
+
/expected configuration to callback .*\s* after .*\s*, but did not/
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
shared_examples 'incorrect after callback' do
|
35
|
+
it "will raise error when `after` callback hasn't occured for the given task" do
|
36
|
+
expect do
|
37
|
+
should_not callback('fake:thing').after(task_name)
|
38
|
+
end.to_not raise_error(
|
39
|
+
RSpec::Expectations::ExpectationNotMetError,
|
40
|
+
/expected configuration to not callback .*\s* after .*\s*, but did/
|
41
|
+
)
|
42
|
+
end
|
43
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,10 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-spec
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.1
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 0
|
10
|
-
version: 0.5.0
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Joshua Nichols
|
14
9
|
- Karl Matthias
|
15
10
|
- Peter M Souter
|
@@ -17,36 +12,32 @@ authors:
|
|
17
12
|
autorequire:
|
18
13
|
bindir: bin
|
19
14
|
cert_chain: []
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
15
|
+
date: 2013-06-30 00:00:00.000000000 Z
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: rspec
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
26
20
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 15
|
31
|
-
segments:
|
32
|
-
- 2
|
33
|
-
- 0
|
34
|
-
- 0
|
21
|
+
requirements:
|
22
|
+
- - ! '>='
|
23
|
+
- !ruby/object:Gem::Version
|
35
24
|
version: 2.0.0
|
36
25
|
type: :development
|
37
|
-
name: rspec
|
38
|
-
version_requirements: *id001
|
39
26
|
prerelease: false
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.0
|
40
33
|
description: Helpers and matchers for testing capistrano
|
41
34
|
email: josh@technicalpickles.com
|
42
35
|
executables: []
|
43
|
-
|
44
36
|
extensions: []
|
45
|
-
|
46
|
-
extra_rdoc_files:
|
37
|
+
extra_rdoc_files:
|
47
38
|
- LICENSE
|
48
39
|
- README.rdoc
|
49
|
-
files:
|
40
|
+
files:
|
50
41
|
- .document
|
51
42
|
- .travis.yml
|
52
43
|
- Gemfile
|
@@ -62,40 +53,33 @@ files:
|
|
62
53
|
- spec/spec.opts
|
63
54
|
- spec/spec_helper.rb
|
64
55
|
- spec/stub_commands_spec.rb
|
56
|
+
- spec/support/shared/callback_examples.rb
|
65
57
|
- spec/uploaded_spec.rb
|
66
|
-
has_rdoc: true
|
67
58
|
homepage: http://github.com/technicalpickles/capistrano-spec
|
68
59
|
licenses: []
|
69
|
-
|
70
60
|
post_install_message:
|
71
61
|
rdoc_options: []
|
72
|
-
|
73
|
-
require_paths:
|
62
|
+
require_paths:
|
74
63
|
- lib
|
75
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
65
|
none: false
|
77
|
-
requirements:
|
78
|
-
- -
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
|
81
|
-
segments:
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
segments:
|
82
71
|
- 0
|
83
|
-
|
84
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
hash: -2637377504704629804
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
74
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
|
90
|
-
segments:
|
91
|
-
- 0
|
92
|
-
version: "0"
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
93
79
|
requirements: []
|
94
|
-
|
95
80
|
rubyforge_project:
|
96
|
-
rubygems_version: 1.
|
81
|
+
rubygems_version: 1.8.23
|
97
82
|
signing_key:
|
98
83
|
specification_version: 3
|
99
84
|
summary: Test your capistrano recipes
|
100
85
|
test_files: []
|
101
|
-
|