chefspec 4.7.0 → 5.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +7 -21
- data/CHANGELOG.md +18 -0
- data/Gemfile +1 -0
- data/README.md +37 -20
- data/chefspec.gemspec +4 -4
- data/examples/apt_repository/recipes/add.rb +8 -0
- data/examples/apt_repository/recipes/remove.rb +4 -0
- data/examples/apt_repository/spec/add_spec.rb +14 -0
- data/examples/apt_repository/spec/remove_spec.rb +9 -0
- data/examples/apt_update/recipes/periodic.rb +5 -0
- data/examples/apt_update/recipes/update.rb +3 -0
- data/examples/apt_update/spec/periodic_spec.rb +14 -0
- data/examples/apt_update/spec/update_spec.rb +9 -0
- data/examples/attributes/spec/default_spec.rb +1 -1
- data/examples/notifications/recipes/before.rb +7 -0
- data/examples/notifications/spec/before_spec.rb +16 -0
- data/examples/server/spec/node_spec.rb +3 -3
- data/examples/server/spec/search_spec.rb +4 -4
- data/examples/stub_node/spec/default_spec.rb +2 -2
- data/examples/subscribes/recipes/before.rb +5 -0
- data/examples/subscribes/spec/before_spec.rb +16 -0
- data/examples/user/spec/create_spec.rb +1 -1
- data/examples/user/spec/lock_spec.rb +1 -1
- data/examples/user/spec/manage_spec.rb +1 -1
- data/examples/user/spec/modify_spec.rb +1 -1
- data/examples/user/spec/remove_spec.rb +1 -1
- data/examples/user/spec/unlock_spec.rb +1 -1
- data/features/chocolatey_package.feature +0 -10
- data/features/dsc_resource.feature +0 -9
- data/features/notifications.feature +8 -0
- data/features/reboot.feature +0 -7
- data/features/step_into.feature +0 -7
- data/features/subscribes.feature +8 -0
- data/features/windows_package.feature +0 -9
- data/features/windows_service.feature +0 -7
- data/gemfiles/chefspec.gemfile +6 -0
- data/lib/chefspec/api/apt_repository.rb +56 -0
- data/lib/chefspec/api/apt_update.rb +53 -0
- data/lib/chefspec/cacher.rb +3 -2
- data/lib/chefspec/coverage.rb +38 -5
- data/lib/chefspec/errors.rb +3 -0
- data/lib/chefspec/extensions/chef/data_query.rb +2 -2
- data/lib/chefspec/matchers/notifications_matcher.rb +23 -2
- data/lib/chefspec/matchers/subscribes_matcher.rb +9 -0
- data/lib/chefspec/version.rb +1 -1
- data/spec/spec_helper.rb +5 -0
- data/spec/unit/cacher_spec.rb +17 -1
- data/spec/unit/matchers/notifications_matcher_spec.rb +1 -0
- data/spec/unit/matchers/subscribes_matcher_spec.rb +1 -0
- data/spec/unit/solo_runner_spec.rb +1 -1
- data/templates/coverage/json.erb +8 -0
- data/templates/coverage/table.erb +14 -0
- data/templates/errors/erb_template_parse_error.erb +5 -0
- data/templates/errors/template_not_found.erb +9 -0
- metadata +26 -11
- data/spec/unit/extensions/lwrp_base_spec.rb +0 -96
@@ -22,6 +22,8 @@ module ChefSpec::Matchers
|
|
22
22
|
immediate_notifications.any?(&block)
|
23
23
|
elsif @delayed
|
24
24
|
delayed_notifications.any?(&block)
|
25
|
+
elsif @before
|
26
|
+
before_notifications.any?(&block)
|
25
27
|
else
|
26
28
|
all_notifications.any?(&block)
|
27
29
|
end
|
@@ -43,11 +45,17 @@ module ChefSpec::Matchers
|
|
43
45
|
self
|
44
46
|
end
|
45
47
|
|
48
|
+
def before
|
49
|
+
@before = true
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
46
53
|
def description
|
47
54
|
message = %Q{notify "#{@expected_resource_type}[#{@expected_resource_name}]"}
|
48
55
|
message << " with action :#{@action}" if @action
|
49
56
|
message << " immediately" if @immediately
|
50
57
|
message << " delayed" if @delayed
|
58
|
+
message << " before" if @before
|
51
59
|
message
|
52
60
|
end
|
53
61
|
|
@@ -57,6 +65,7 @@ module ChefSpec::Matchers
|
|
57
65
|
message << " with action :#{@action}" if @action
|
58
66
|
message << " immediately" if @immediately
|
59
67
|
message << " delayed" if @delayed
|
68
|
+
message << " before" if @before
|
60
69
|
message << ", but did not."
|
61
70
|
message << "\n\n"
|
62
71
|
message << "Other notifications were:\n\n#{format_notifications}"
|
@@ -67,6 +76,7 @@ module ChefSpec::Matchers
|
|
67
76
|
message << " with action :#{@action}" if @action
|
68
77
|
message << " immediately" if @immediately
|
69
78
|
message << " delayed" if @delayed
|
79
|
+
message << " before" if @before
|
70
80
|
message << ", but the _something_ you gave me was nil! If you are running a test like:"
|
71
81
|
message << "\n\n"
|
72
82
|
message << " expect(_something_).to notify('...')"
|
@@ -88,7 +98,7 @@ module ChefSpec::Matchers
|
|
88
98
|
private
|
89
99
|
|
90
100
|
def all_notifications
|
91
|
-
immediate_notifications + delayed_notifications
|
101
|
+
immediate_notifications + delayed_notifications + before_notifications
|
92
102
|
end
|
93
103
|
|
94
104
|
def immediate_notifications
|
@@ -99,6 +109,10 @@ module ChefSpec::Matchers
|
|
99
109
|
@resource.delayed_notifications
|
100
110
|
end
|
101
111
|
|
112
|
+
def before_notifications
|
113
|
+
@resource.before_notifications
|
114
|
+
end
|
115
|
+
|
102
116
|
def matches_action?(notification)
|
103
117
|
return true if @action.nil?
|
104
118
|
@action == notification.action.to_sym
|
@@ -107,7 +121,14 @@ module ChefSpec::Matchers
|
|
107
121
|
def format_notification(notification)
|
108
122
|
notifying_resource = notification.notifying_resource
|
109
123
|
resource = notification.resource
|
110
|
-
|
124
|
+
|
125
|
+
if notifying_resource.immediate_notifications.include?(notification)
|
126
|
+
type = :immediately
|
127
|
+
elsif notifying_resource.before_notifications.include?(notification)
|
128
|
+
type = :before
|
129
|
+
else
|
130
|
+
type = :delayed
|
131
|
+
end
|
111
132
|
|
112
133
|
%Q{ "#{notifying_resource.to_s}" notifies "#{resource_name(resource)}[#{resource.name}]" to :#{notification.action}, :#{type}}
|
113
134
|
end
|
@@ -23,6 +23,10 @@ module ChefSpec::Matchers
|
|
23
23
|
@instance.delayed
|
24
24
|
end
|
25
25
|
|
26
|
+
if @before
|
27
|
+
@instance.before
|
28
|
+
end
|
29
|
+
|
26
30
|
if resource
|
27
31
|
runner = resource.run_context.node.runner
|
28
32
|
expected = runner.find_resource(@expected_resource_type, @expected_resource_name)
|
@@ -48,6 +52,11 @@ module ChefSpec::Matchers
|
|
48
52
|
self
|
49
53
|
end
|
50
54
|
|
55
|
+
def before
|
56
|
+
@before = true
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
51
60
|
def description
|
52
61
|
@instance.description
|
53
62
|
end
|
data/lib/chefspec/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/unit/cacher_spec.rb
CHANGED
@@ -13,8 +13,9 @@ describe ChefSpec::Cacher do
|
|
13
13
|
end
|
14
14
|
|
15
15
|
let(:cache) { described_class.class_variable_get(:@@cache) }
|
16
|
+
let(:preserve_cache) { false }
|
16
17
|
|
17
|
-
before(:each) { described_class.class_variable_set(:@@cache, {}) }
|
18
|
+
before(:each) { described_class.class_variable_set(:@@cache, {}) unless preserve_cache }
|
18
19
|
|
19
20
|
describe 'cached' do
|
20
21
|
it 'lazily defines the results for the cache' do
|
@@ -41,6 +42,21 @@ describe ChefSpec::Cacher do
|
|
41
42
|
end
|
42
43
|
end
|
43
44
|
end
|
45
|
+
|
46
|
+
context 'when example groups are defined by looping' do
|
47
|
+
let(:preserve_cache) { true }
|
48
|
+
|
49
|
+
['first', 'second', 'third'].each do |iteration|
|
50
|
+
context "on the #{iteration} iteration" do
|
51
|
+
context 'in caching context' do
|
52
|
+
cached(:cached_iteration) { iteration }
|
53
|
+
it 'caches the iteration for this context' do
|
54
|
+
expect(cached_iteration).to eq iteration
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
44
60
|
end
|
45
61
|
|
46
62
|
describe 'cached!' do
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<%='Touched'.to_s.ljust(8) %> <%='Resource'.to_s.ljust(48) %> File:Line
|
2
|
+
<% @all_resources.each do |resource| %>
|
3
|
+
<%=resource.touched?.to_s.ljust(8) %> <%= resource.to_s.ljust(48) %> <%= resource.source_file %>:<%= resource.source_line %>
|
4
|
+
<% end %>
|
5
|
+
|
6
|
+
<% if @total == 0 %>
|
7
|
+
No Chef resources found, skipping coverage calculation...
|
8
|
+
<% else %>
|
9
|
+
ChefSpec Coverage report generated...
|
10
|
+
|
11
|
+
Total Resources: <%= @total %>
|
12
|
+
Touched Resources: <%= @touched %>
|
13
|
+
Touch Coverage: <%= @coverage %>%
|
14
|
+
<% end %>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chefspec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Crump
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-
|
12
|
+
date: 2016-08-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -17,28 +17,28 @@ dependencies:
|
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '12.0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
25
|
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '12.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: fauxhai
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '3.
|
34
|
+
version: '3.6'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '3.
|
41
|
+
version: '3.6'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,6 +139,14 @@ files:
|
|
139
139
|
- examples/apt_package/spec/reconfig_spec.rb
|
140
140
|
- examples/apt_package/spec/remove_spec.rb
|
141
141
|
- examples/apt_package/spec/upgrade_spec.rb
|
142
|
+
- examples/apt_repository/recipes/add.rb
|
143
|
+
- examples/apt_repository/recipes/remove.rb
|
144
|
+
- examples/apt_repository/spec/add_spec.rb
|
145
|
+
- examples/apt_repository/spec/remove_spec.rb
|
146
|
+
- examples/apt_update/recipes/periodic.rb
|
147
|
+
- examples/apt_update/recipes/update.rb
|
148
|
+
- examples/apt_update/spec/periodic_spec.rb
|
149
|
+
- examples/apt_update/spec/update_spec.rb
|
142
150
|
- examples/attributes/attributes/default.rb
|
143
151
|
- examples/attributes/recipes/default.rb
|
144
152
|
- examples/attributes/spec/default_spec.rb
|
@@ -337,10 +345,12 @@ files:
|
|
337
345
|
- examples/multiple_actions/spec/sequential_spec.rb
|
338
346
|
- examples/multiple_run_action/recipes/default.rb
|
339
347
|
- examples/multiple_run_action/spec/default_spec.rb
|
348
|
+
- examples/notifications/recipes/before.rb
|
340
349
|
- examples/notifications/recipes/chained.rb
|
341
350
|
- examples/notifications/recipes/default.rb
|
342
351
|
- examples/notifications/recipes/delayed.rb
|
343
352
|
- examples/notifications/recipes/immediately.rb
|
353
|
+
- examples/notifications/spec/before_spec.rb
|
344
354
|
- examples/notifications/spec/chained_spec.rb
|
345
355
|
- examples/notifications/spec/default_spec.rb
|
346
356
|
- examples/notifications/spec/delayed_spec.rb
|
@@ -497,10 +507,12 @@ files:
|
|
497
507
|
- examples/stub_node/spec/default_spec.rb
|
498
508
|
- examples/stub_search/recipes/default.rb
|
499
509
|
- examples/stub_search/spec/default_spec.rb
|
510
|
+
- examples/subscribes/recipes/before.rb
|
500
511
|
- examples/subscribes/recipes/chained.rb
|
501
512
|
- examples/subscribes/recipes/default.rb
|
502
513
|
- examples/subscribes/recipes/delayed.rb
|
503
514
|
- examples/subscribes/recipes/immediately.rb
|
515
|
+
- examples/subscribes/spec/before_spec.rb
|
504
516
|
- examples/subscribes/spec/chained_spec.rb
|
505
517
|
- examples/subscribes/spec/default_spec.rb
|
506
518
|
- examples/subscribes/spec/delayed_spec.rb
|
@@ -644,6 +656,8 @@ files:
|
|
644
656
|
- lib/chefspec.rb
|
645
657
|
- lib/chefspec/api.rb
|
646
658
|
- lib/chefspec/api/apt_package.rb
|
659
|
+
- lib/chefspec/api/apt_repository.rb
|
660
|
+
- lib/chefspec/api/apt_update.rb
|
647
661
|
- lib/chefspec/api/batch.rb
|
648
662
|
- lib/chefspec/api/chef_gem.rb
|
649
663
|
- lib/chefspec/api/chocolatey_package.rb
|
@@ -755,7 +769,6 @@ files:
|
|
755
769
|
- spec/unit/deprecations_spec.rb
|
756
770
|
- spec/unit/errors_spec.rb
|
757
771
|
- spec/unit/expect_exception_spec.rb
|
758
|
-
- spec/unit/extensions/lwrp_base_spec.rb
|
759
772
|
- spec/unit/macros_spec.rb
|
760
773
|
- spec/unit/matchers/do_nothing_matcher.rb
|
761
774
|
- spec/unit/matchers/include_recipe_matcher_spec.rb
|
@@ -779,12 +792,16 @@ files:
|
|
779
792
|
- spec/unit/stubs/search_stub_spec.rb
|
780
793
|
- spec/unit/stubs/stub_spec.rb
|
781
794
|
- templates/coverage/human.erb
|
795
|
+
- templates/coverage/json.erb
|
796
|
+
- templates/coverage/table.erb
|
782
797
|
- templates/errors/cookbook_path_not_found.erb
|
798
|
+
- templates/errors/erb_template_parse_error.erb
|
783
799
|
- templates/errors/gem_load_error.erb
|
784
800
|
- templates/errors/invalid_berkshelf_options.erb
|
785
801
|
- templates/errors/may_need_to_specify_platform.erb
|
786
802
|
- templates/errors/no_conversion_error.erb
|
787
803
|
- templates/errors/not_stubbed.erb
|
804
|
+
- templates/errors/template_not_found.erb
|
788
805
|
homepage: https://sethvargo.github.io/chefspec/
|
789
806
|
licenses:
|
790
807
|
- MIT
|
@@ -797,7 +814,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
797
814
|
requirements:
|
798
815
|
- - ">="
|
799
816
|
- !ruby/object:Gem::Version
|
800
|
-
version: '1
|
817
|
+
version: '2.1'
|
801
818
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
802
819
|
requirements:
|
803
820
|
- - ">="
|
@@ -805,7 +822,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
805
822
|
version: '0'
|
806
823
|
requirements: []
|
807
824
|
rubyforge_project:
|
808
|
-
rubygems_version: 2.
|
825
|
+
rubygems_version: 2.6.6
|
809
826
|
signing_key:
|
810
827
|
specification_version: 4
|
811
828
|
summary: Write RSpec examples and generate coverage reports for Chef recipes!
|
@@ -894,7 +911,6 @@ test_files:
|
|
894
911
|
- spec/unit/deprecations_spec.rb
|
895
912
|
- spec/unit/errors_spec.rb
|
896
913
|
- spec/unit/expect_exception_spec.rb
|
897
|
-
- spec/unit/extensions/lwrp_base_spec.rb
|
898
914
|
- spec/unit/macros_spec.rb
|
899
915
|
- spec/unit/matchers/do_nothing_matcher.rb
|
900
916
|
- spec/unit/matchers/include_recipe_matcher_spec.rb
|
@@ -917,4 +933,3 @@ test_files:
|
|
917
933
|
- spec/unit/stubs/search_registry_spec.rb
|
918
934
|
- spec/unit/stubs/search_stub_spec.rb
|
919
935
|
- spec/unit/stubs/stub_spec.rb
|
920
|
-
has_rdoc:
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
# Chef 12 fixed resource inheritance issues
|
4
|
-
if Chef::VERSION.to_f < 12.0
|
5
|
-
module ChefSpec
|
6
|
-
module Extensions
|
7
|
-
describe :LWRPBase do
|
8
|
-
describe '#remove_existing_lwrp' do
|
9
|
-
before do
|
10
|
-
Chef::Provider::MysqlDatabase = nil
|
11
|
-
Chef::Resource::MysqlDatabase = Class.new(Chef::Resource)
|
12
|
-
end
|
13
|
-
|
14
|
-
after do
|
15
|
-
[Chef::Provider, Chef::Resource].each do |mod|
|
16
|
-
next unless mod.const_defined?(:MysqlDatabase, false)
|
17
|
-
mod.send(:remove_const, :MysqlDatabase)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context Chef::Provider do
|
22
|
-
before do
|
23
|
-
Chef::Provider::LWRPBase.remove_existing_lwrp('MysqlDatabase')
|
24
|
-
end
|
25
|
-
|
26
|
-
it 'removes the provider if it already exists' do
|
27
|
-
expect(Chef::Provider.constants).to_not include(:MysqlDatabase)
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'does not remove resource' do
|
31
|
-
expect(Chef::Resource.constants).to include(:MysqlDatabase)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'does not throw an error if the resource does not already exist' do
|
35
|
-
expect {
|
36
|
-
Chef::Provider::LWRPBase.remove_existing_lwrp 'Human'
|
37
|
-
}.to_not raise_error
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context Chef::Resource do
|
42
|
-
let!(:resource_class) { Chef::Resource::MysqlDatabase }
|
43
|
-
|
44
|
-
before do
|
45
|
-
Chef::Resource::LWRPBase.remove_existing_lwrp('MysqlDatabase')
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'removes the resource if it already exists' do
|
49
|
-
expect(Chef::Resource.constants).to_not include(:MysqlDatabase)
|
50
|
-
end
|
51
|
-
|
52
|
-
if Chef::Resource.respond_to?(:resource_classes)
|
53
|
-
it 'removes the resource from Chef::Resource.resource_classes' do
|
54
|
-
expect(Chef::Resource.resource_classes).to_not include(resource_class)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'does not remove the provider' do
|
59
|
-
Chef::Resource::LWRPBase.remove_existing_lwrp('MysqlDatabase')
|
60
|
-
expect(Chef::Provider.constants).to include(:MysqlDatabase)
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'does not throw an error if the resource does not already exist' do
|
64
|
-
expect {
|
65
|
-
Chef::Resource::LWRPBase.remove_existing_lwrp 'Human'
|
66
|
-
}.to_not raise_error
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe '#build_from_file' do
|
73
|
-
let(:args){ %w{mycookbook thisfile context} }
|
74
|
-
|
75
|
-
shared_context "wrapping" do
|
76
|
-
it 'wraps the existing chef build_from_file method' do
|
77
|
-
klass = mod::LWRPBase
|
78
|
-
allow(klass).to receive(:build_from_file_without_removal)
|
79
|
-
expect(klass).to receive(:build_from_file_without_removal).with(*args)
|
80
|
-
klass.build_from_file(*args)
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
context Chef::Provider do
|
85
|
-
let(:mod){ Chef::Provider }
|
86
|
-
include_context "wrapping"
|
87
|
-
end
|
88
|
-
|
89
|
-
context Chef::Resource do
|
90
|
-
let(:mod){ Chef::Resource }
|
91
|
-
include_context "wrapping"
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|