chefspec 3.4.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +2 -19
- data/CHANGELOG.md +32 -1
- data/CONTRIBUTING.md +1 -1
- data/README.md +37 -9
- data/chefspec.gemspec +2 -3
- data/examples/render_file/spec/default_spec.rb +32 -17
- data/examples/server/recipes/render_with_cached.rb +3 -0
- data/examples/server/spec/client_spec.rb +1 -1
- data/examples/server/spec/data_bag_spec.rb +1 -1
- data/examples/server/spec/environment_spec.rb +1 -1
- data/examples/server/spec/node_spec.rb +1 -1
- data/examples/server/spec/render_with_cached_spec.rb +16 -0
- data/examples/server/spec/role_spec.rb +1 -1
- data/features/server.feature +10 -12
- data/features/support/executor.rb +2 -0
- data/gemfiles/{chef-11.0.0.gemfile → chef-11.12.0.gemfile} +1 -1
- data/gemfiles/chef-master.gemfile +1 -1
- data/lib/chefspec.rb +1 -0
- data/lib/chefspec/api/erl_call.rb +5 -5
- data/lib/chefspec/api/execute.rb +5 -5
- data/lib/chefspec/api/powershell_script.rb +5 -5
- data/lib/chefspec/api/ruby_block.rb +2 -2
- data/lib/chefspec/api/script.rb +13 -2
- data/lib/chefspec/cacher.rb +2 -1
- data/lib/chefspec/coverage.rb +10 -2
- data/lib/chefspec/expect_exception.rb +0 -2
- data/lib/chefspec/extensions/chef/lwrp_base.rb +5 -1
- data/lib/chefspec/extensions/chef/resource/freebsd_package.rb +19 -0
- data/lib/chefspec/librarian.rb +5 -2
- data/lib/chefspec/macros.rb +3 -3
- data/lib/chefspec/matchers/do_nothing_matcher.rb +4 -2
- data/lib/chefspec/matchers/include_recipe_matcher.rb +2 -2
- data/lib/chefspec/matchers/link_to_matcher.rb +11 -5
- data/lib/chefspec/matchers/notifications_matcher.rb +2 -2
- data/lib/chefspec/matchers/render_file_matcher.rb +9 -3
- data/lib/chefspec/matchers/resource_matcher.rb +2 -2
- data/lib/chefspec/matchers/state_attrs_matcher.rb +2 -2
- data/lib/chefspec/matchers/subscribes_matcher.rb +4 -4
- data/lib/chefspec/renderer.rb +1 -1
- data/lib/chefspec/rspec.rb +1 -0
- data/lib/chefspec/runner.rb +2 -1
- data/lib/chefspec/server.rb +90 -19
- data/lib/chefspec/version.rb +1 -1
- data/spec/unit/cacher_spec.rb +1 -1
- data/spec/unit/expect_exception_spec.rb +6 -6
- data/spec/unit/extensions/lwrp_base_spec.rb +9 -1
- data/spec/unit/macros_spec.rb +6 -6
- data/spec/unit/matchers/include_recipe_matcher_spec.rb +6 -6
- data/spec/unit/matchers/link_to_matcher_spec.rb +31 -15
- data/spec/unit/matchers/notifications_matcher_spec.rb +4 -4
- data/spec/unit/matchers/render_file_matcher_spec.rb +19 -10
- data/spec/unit/matchers/state_attrs_matcher_spec.rb +28 -24
- data/spec/unit/matchers/subscribes_matcher_spec.rb +7 -7
- data/spec/unit/renderer_spec.rb +7 -7
- data/spec/unit/runner_spec.rb +39 -9
- metadata +10 -25
- data/gemfiles/chef-11.2.0.gemfile +0 -5
- data/gemfiles/chef-11.4.4.gemfile +0 -5
- data/gemfiles/chef-11.6.0.gemfile +0 -5
- data/gemfiles/chef-11.8.0.gemfile +0 -5
data/lib/chefspec/version.rb
CHANGED
data/spec/unit/cacher_spec.rb
CHANGED
@@ -5,8 +5,8 @@ describe ChefSpec::ExpectException do
|
|
5
5
|
subject { described_class.new(Exception) }
|
6
6
|
|
7
7
|
it 'does not match' do
|
8
|
-
RSpec::Matchers::BuiltIn::RaiseError.
|
9
|
-
expect(subject.expected?).to
|
8
|
+
allow(RSpec::Matchers::BuiltIn::RaiseError).to receive(:last_run).and_return(nil)
|
9
|
+
expect(subject.expected?).to be_falsy
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -15,8 +15,8 @@ describe ChefSpec::ExpectException do
|
|
15
15
|
|
16
16
|
it 'does not match' do
|
17
17
|
last_error = double('last error', last_error_for_chefspec: ArgumentError)
|
18
|
-
RSpec::Matchers::BuiltIn::RaiseError.
|
19
|
-
expect(subject.expected?).to
|
18
|
+
allow(RSpec::Matchers::BuiltIn::RaiseError).to receive(:last_run).and_return(last_error)
|
19
|
+
expect(subject.expected?).to be_falsy
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
@@ -25,8 +25,8 @@ describe ChefSpec::ExpectException do
|
|
25
25
|
|
26
26
|
it 'does not match' do
|
27
27
|
last_error = double('last error', last_error_for_chefspec: RuntimeError)
|
28
|
-
RSpec::Matchers::BuiltIn::RaiseError.
|
29
|
-
expect(subject.expected?).to
|
28
|
+
allow(RSpec::Matchers::BuiltIn::RaiseError).to receive(:last_run).and_return(last_error)
|
29
|
+
expect(subject.expected?).to be_truthy
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -9,7 +9,7 @@ if Chef::VERSION >= '11.0.0'
|
|
9
9
|
describe '#remove_existing_lwrp' do
|
10
10
|
before do
|
11
11
|
Chef::Provider::MysqlDatabase = nil
|
12
|
-
Chef::Resource::MysqlDatabase =
|
12
|
+
Chef::Resource::MysqlDatabase = Class.new(Chef::Resource)
|
13
13
|
end
|
14
14
|
|
15
15
|
after do
|
@@ -40,6 +40,8 @@ if Chef::VERSION >= '11.0.0'
|
|
40
40
|
end
|
41
41
|
|
42
42
|
context Chef::Resource do
|
43
|
+
let!(:resource_class) { Chef::Resource::MysqlDatabase }
|
44
|
+
|
43
45
|
before do
|
44
46
|
Chef::Resource::LWRPBase.remove_existing_lwrp('MysqlDatabase')
|
45
47
|
end
|
@@ -48,6 +50,12 @@ if Chef::VERSION >= '11.0.0'
|
|
48
50
|
expect(Chef::Resource.constants).to_not include(:MysqlDatabase)
|
49
51
|
end
|
50
52
|
|
53
|
+
if Chef::Resource.respond_to?(:resource_classes)
|
54
|
+
it 'removes the resource from Chef::Resource.resource_classes' do
|
55
|
+
expect(Chef::Resource.resource_classes).to_not include(resource_class)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
51
59
|
it 'does not remove the provider' do
|
52
60
|
Chef::Resource::LWRPBase.remove_existing_lwrp('MysqlDatabase')
|
53
61
|
expect(Chef::Provider.constants).to include(:MysqlDatabase)
|
data/spec/unit/macros_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe ChefSpec::Macros do
|
|
5
5
|
let(:command_stub) { double('command') }
|
6
6
|
|
7
7
|
it 'adds the command to the command registry' do
|
8
|
-
ChefSpec::Stubs::CommandStub.
|
8
|
+
allow(ChefSpec::Stubs::CommandStub).to receive(:new).and_return(command_stub)
|
9
9
|
described_class.stub_command('echo "hello"')
|
10
10
|
|
11
11
|
expect(ChefSpec::Stubs::CommandRegistry.stubs).to include(command_stub)
|
@@ -16,7 +16,7 @@ describe ChefSpec::Macros do
|
|
16
16
|
let(:search_stub) { double('search') }
|
17
17
|
|
18
18
|
it 'adds the query to the search registry' do
|
19
|
-
ChefSpec::Stubs::SearchStub.
|
19
|
+
allow(ChefSpec::Stubs::SearchStub).to receive(:new).and_return(search_stub)
|
20
20
|
described_class.stub_search(:node, '*:*')
|
21
21
|
|
22
22
|
expect(ChefSpec::Stubs::SearchRegistry.stubs).to include(search_stub)
|
@@ -27,7 +27,7 @@ describe ChefSpec::Macros do
|
|
27
27
|
let(:data_bag_stub) { double('data_bag') }
|
28
28
|
|
29
29
|
it 'adds the query to the data_bag registry' do
|
30
|
-
ChefSpec::Stubs::DataBagStub.
|
30
|
+
allow(ChefSpec::Stubs::DataBagStub).to receive(:new).and_return(data_bag_stub)
|
31
31
|
described_class.stub_data_bag(:users)
|
32
32
|
|
33
33
|
expect(ChefSpec::Stubs::DataBagRegistry.stubs).to include(data_bag_stub)
|
@@ -38,7 +38,7 @@ describe ChefSpec::Macros do
|
|
38
38
|
let(:data_bag_item_stub) { double('data_bag_item') }
|
39
39
|
|
40
40
|
it 'adds the query to the data_bag_item registry' do
|
41
|
-
ChefSpec::Stubs::DataBagItemStub.
|
41
|
+
allow(ChefSpec::Stubs::DataBagItemStub).to receive(:new).and_return(data_bag_item_stub)
|
42
42
|
described_class.stub_data_bag_item(:users, 'id')
|
43
43
|
|
44
44
|
expect(ChefSpec::Stubs::DataBagItemRegistry.stubs).to include(data_bag_item_stub)
|
@@ -76,8 +76,8 @@ describe ChefSpec::Macros do
|
|
76
76
|
end
|
77
77
|
|
78
78
|
it 'sets the automatic attributes from a JSON data path' do
|
79
|
-
File.
|
80
|
-
File.
|
79
|
+
allow(File).to receive(:exists?).with('/path/to/json').and_return(true)
|
80
|
+
allow(File).to receive(:read).with('/path/to/json').and_return('{ "ipaddress": "1.2.3.4" }')
|
81
81
|
node = described_class.stub_node('node.example', path: '/path/to/json')
|
82
82
|
expect(node['ipaddress']).to eq('1.2.3.4')
|
83
83
|
end
|
@@ -4,18 +4,18 @@ describe ChefSpec::Matchers::IncludeRecipeMatcher do
|
|
4
4
|
let(:chef_run) { double('chef run', run_context: { loaded_recipes: %w(one two three) }) }
|
5
5
|
subject { described_class.new('one::default') }
|
6
6
|
|
7
|
-
describe '#
|
7
|
+
describe '#failure_message' do
|
8
8
|
it 'has the right value' do
|
9
9
|
subject.matches?(chef_run)
|
10
|
-
expect(subject.
|
10
|
+
expect(subject.failure_message)
|
11
11
|
.to eq(%q(expected ["one::default", "two::default", "three::default"] to include "one::default"))
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
describe '#
|
15
|
+
describe '#failure_message_when_negated' do
|
16
16
|
it 'has the right value' do
|
17
17
|
subject.matches?(chef_run)
|
18
|
-
expect(subject.
|
18
|
+
expect(subject.failure_message_when_negated)
|
19
19
|
.to eq(%q(expected "one::default" to not be included))
|
20
20
|
end
|
21
21
|
end
|
@@ -28,11 +28,11 @@ describe ChefSpec::Matchers::IncludeRecipeMatcher do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'matches when the recipe is included' do
|
31
|
-
expect(subject.matches?(chef_run)).to
|
31
|
+
expect(subject.matches?(chef_run)).to be_truthy
|
32
32
|
end
|
33
33
|
|
34
34
|
it 'does not match when the recipe is not included' do
|
35
35
|
failure = described_class.new('nope')
|
36
|
-
expect(failure.matches?(chef_run)).to
|
36
|
+
expect(failure.matches?(chef_run)).to be_falsy
|
37
37
|
end
|
38
38
|
end
|
@@ -1,39 +1,55 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ChefSpec::Matchers::LinkToMatcher do
|
4
|
-
let(:
|
5
|
-
let(:
|
6
|
-
|
4
|
+
let(:from) { '/var/www' }
|
5
|
+
let(:to) { '/var/html' }
|
6
|
+
let(:link) do
|
7
|
+
Chef::Resource::Link.new(from).tap do |link|
|
8
|
+
link.to(to)
|
9
|
+
link.perform_action(:create)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
subject { described_class.new(to) }
|
7
13
|
|
8
|
-
describe '#
|
14
|
+
describe '#failure_message' do
|
9
15
|
it 'has the right value' do
|
10
16
|
subject.matches?(link)
|
11
|
-
expect(subject.
|
12
|
-
.to eq(%Q(expected "link[#{
|
17
|
+
expect(subject.failure_message)
|
18
|
+
.to eq(%Q(expected "link[#{from}]" to link to "#{to}" but was "#{to}"))
|
13
19
|
end
|
14
20
|
end
|
15
21
|
|
16
|
-
describe '#
|
22
|
+
describe '#failure_message_when_negated' do
|
17
23
|
it 'has the right value' do
|
18
24
|
subject.matches?(link)
|
19
|
-
expect(subject.
|
20
|
-
.to eq(%Q(expected "link[#{
|
25
|
+
expect(subject.failure_message_when_negated)
|
26
|
+
.to eq(%Q(expected "link[#{from}]" to not link to "#{to}"))
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
24
30
|
describe '#description' do
|
25
31
|
it 'has the right value' do
|
26
32
|
subject.matches?(link)
|
27
|
-
expect(subject.description).to eq(%Q(link to "#{
|
33
|
+
expect(subject.description).to eq(%Q(link to "#{to}"))
|
28
34
|
end
|
29
35
|
end
|
30
36
|
|
31
|
-
|
32
|
-
|
37
|
+
context 'when the link is correct' do
|
38
|
+
it 'matches' do
|
39
|
+
expect(subject.matches?(link)).to be_truthy
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'adds the link to the coverage report' do
|
43
|
+
expect(ChefSpec::Coverage).to receive(:cover!).with(link)
|
44
|
+
subject.matches?(link)
|
45
|
+
end
|
33
46
|
end
|
34
47
|
|
35
|
-
|
36
|
-
|
37
|
-
|
48
|
+
context 'when the link is not correct' do
|
49
|
+
subject { described_class.new('/nope/bad/path/bro') }
|
50
|
+
|
51
|
+
it 'does not match' do
|
52
|
+
expect(subject.matches?(link)).to be_falsy
|
53
|
+
end
|
38
54
|
end
|
39
55
|
end
|
@@ -13,18 +13,18 @@ describe ChefSpec::Matchers::NotificationsMatcher do
|
|
13
13
|
)
|
14
14
|
end
|
15
15
|
|
16
|
-
describe '#
|
16
|
+
describe '#failure_message' do
|
17
17
|
it 'has the right value' do
|
18
18
|
subject.matches?(package)
|
19
|
-
expect(subject.
|
19
|
+
expect(subject.failure_message)
|
20
20
|
.to include %|expected "package[foo]" to notify "execute[install]", but did not.|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
describe '#
|
24
|
+
describe '#failure_message_when_negated' do
|
25
25
|
it 'has the right value' do
|
26
26
|
subject.matches?(package)
|
27
|
-
expect(subject.
|
27
|
+
expect(subject.failure_message_when_negated)
|
28
28
|
.to eq %|expected "package[foo]" to not notify "execute[install]", but it did.|
|
29
29
|
end
|
30
30
|
end
|
@@ -6,18 +6,18 @@ describe ChefSpec::Matchers::RenderFileMatcher do
|
|
6
6
|
let(:chef_run) { double('chef run', find_resource: file) }
|
7
7
|
subject { described_class.new(path) }
|
8
8
|
|
9
|
-
describe '#
|
9
|
+
describe '#failure_message' do
|
10
10
|
it 'has the right value' do
|
11
11
|
subject.matches?(chef_run)
|
12
|
-
expect(subject.
|
12
|
+
expect(subject.failure_message)
|
13
13
|
.to eq(%Q(expected Chef run to render "#{path}"))
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
describe '#
|
17
|
+
describe '#failure_message_when_negated' do
|
18
18
|
it 'has the right value' do
|
19
19
|
subject.matches?(chef_run)
|
20
|
-
expect(subject.
|
20
|
+
expect(subject.failure_message_when_negated)
|
21
21
|
.to eq(%Q(expected file "#{path}" to not be in Chef run))
|
22
22
|
end
|
23
23
|
end
|
@@ -29,13 +29,22 @@ describe ChefSpec::Matchers::RenderFileMatcher do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
|
32
|
+
context 'when the file is correct' do
|
33
|
+
it 'matches' do
|
34
|
+
expect(subject.matches?(chef_run)).to be_truthy
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'adds the resource to the coverage report' do
|
38
|
+
expect(ChefSpec::Coverage).to receive(:cover!).with(file)
|
39
|
+
subject.matches?(chef_run)
|
40
|
+
end
|
34
41
|
end
|
35
42
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
43
|
+
context 'when the file is not correct' do
|
44
|
+
it 'does not match' do
|
45
|
+
allow(chef_run).to receive(:find_resource).and_return(nil)
|
46
|
+
failure = described_class.new('nope')
|
47
|
+
expect(failure.matches?(chef_run)).to be_falsy
|
48
|
+
end
|
40
49
|
end
|
41
50
|
end
|
@@ -11,26 +11,26 @@ describe ChefSpec::Matchers::StateAttrsMatcher do
|
|
11
11
|
expect(subject).to_not be_matches(resource)
|
12
12
|
end
|
13
13
|
|
14
|
-
|
14
|
+
it 'has the correct description' do
|
15
|
+
expect(subject.description).to eq('have state attributes [:a, :b]')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'has the correct failure message for should' do
|
19
|
+
expect(subject.failure_message).to include <<-EOH.gsub(/^ {8}/, '')
|
20
|
+
expected _something_ to have state attributes, but the _something_ you gave me was nil!
|
21
|
+
Ensure the resource exists before making assertions:
|
15
22
|
|
16
|
-
|
17
|
-
|
18
|
-
"the _something_ you gave me was nil!" \
|
19
|
-
"\n" \
|
20
|
-
"Ensure the resource exists before making assertions:" \
|
21
|
-
"\n\n" \
|
22
|
-
" expect(resource).to be" \
|
23
|
-
"\n "
|
23
|
+
expect(resource).to be
|
24
|
+
EOH
|
24
25
|
end
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
"\n "
|
27
|
+
it 'has the correct failure message for should not' do
|
28
|
+
expect(subject.failure_message_when_negated).to include <<-EOH.gsub(/^ {8}/, '')
|
29
|
+
expected _something_ to not have state attributes, but the _something_ you gave me was nil!
|
30
|
+
Ensure the resource exists before making assertions:
|
31
|
+
|
32
|
+
expect(resource).to be
|
33
|
+
EOH
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -39,12 +39,16 @@ describe ChefSpec::Matchers::StateAttrsMatcher do
|
|
39
39
|
let(:resource) { double('resource', class: klass) }
|
40
40
|
before { subject.matches?(resource) }
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
should eq('expected [:a, :b] to equal [:a, :b]')
|
42
|
+
it 'has the correct description' do
|
43
|
+
expect(subject.description).to eq('have state attributes [:a, :b]')
|
45
44
|
end
|
46
|
-
|
47
|
-
|
45
|
+
|
46
|
+
it 'has the correct failure message for should' do
|
47
|
+
expect(subject.failure_message).to eq('expected [:a, :b] to equal [:a, :b]')
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'has the correct failure message for should not' do
|
51
|
+
expect(subject.failure_message_when_negated).to eq('expected [:a, :b] to not equal [:a, :b]')
|
48
52
|
end
|
49
53
|
|
50
54
|
it 'matches when the state attributes are correct' do
|
@@ -52,12 +56,12 @@ describe ChefSpec::Matchers::StateAttrsMatcher do
|
|
52
56
|
end
|
53
57
|
|
54
58
|
it 'does not match when the state attributes are incorrect' do
|
55
|
-
klass.
|
59
|
+
allow(klass).to receive(:state_attrs).and_return([:c, :d])
|
56
60
|
expect(subject).to_not be_matches(resource)
|
57
61
|
end
|
58
62
|
|
59
63
|
it 'does not match when partial state attribute are incorrect' do
|
60
|
-
klass.
|
64
|
+
allow(klass).to receive(:state_attrs).and_return([:b, :c])
|
61
65
|
expect(subject).to_not be_matches(resource)
|
62
66
|
end
|
63
67
|
end
|
@@ -14,10 +14,10 @@ describe ChefSpec::Matchers::SubscribesMatcher do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'when no resource is found' do
|
17
|
-
describe '#
|
17
|
+
describe '#failure_message' do
|
18
18
|
it 'has the right value' do
|
19
19
|
subject.matches?(package)
|
20
|
-
expect(subject.
|
20
|
+
expect(subject.failure_message)
|
21
21
|
.to include %|expected _something_ to notify "package[foo]", but the _something_ you gave me was nil! If you are running a test like:|
|
22
22
|
end
|
23
23
|
end
|
@@ -34,21 +34,21 @@ describe ChefSpec::Matchers::SubscribesMatcher do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
before do
|
37
|
-
runner.
|
37
|
+
allow(runner).to receive(:find_resource).and_return(execute)
|
38
38
|
end
|
39
39
|
|
40
|
-
describe '#
|
40
|
+
describe '#failure_message' do
|
41
41
|
it 'has the right value' do
|
42
42
|
subject.matches?(package)
|
43
|
-
expect(subject.
|
43
|
+
expect(subject.failure_message)
|
44
44
|
.to include %|expected "execute[install]" to notify "package[foo]", but did not.|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
-
describe '#
|
48
|
+
describe '#failure_message_when_negated' do
|
49
49
|
it 'has the right value' do
|
50
50
|
subject.matches?(package)
|
51
|
-
expect(subject.
|
51
|
+
expect(subject.failure_message_when_negated)
|
52
52
|
.to eq %|expected "execute[install]" to not notify "package[foo]", but it did.|
|
53
53
|
end
|
54
54
|
end
|
data/spec/unit/renderer_spec.rb
CHANGED
@@ -15,35 +15,35 @@ describe ChefSpec::Renderer do
|
|
15
15
|
|
16
16
|
describe '#content' do
|
17
17
|
before do
|
18
|
-
subject.
|
19
|
-
subject.
|
20
|
-
subject.
|
18
|
+
allow(subject).to receive(:content_from_cookbook_file).and_return('cookbook_file content')
|
19
|
+
allow(subject).to receive(:content_from_file).and_return('file content')
|
20
|
+
allow(subject).to receive(:content_from_template).and_return('template content')
|
21
21
|
end
|
22
22
|
|
23
23
|
context 'when the resource is a cookbook_file' do
|
24
24
|
it 'renders the cookbook_file content' do
|
25
|
-
resource.
|
25
|
+
allow(resource).to receive(:resource_name).and_return('cookbook_file')
|
26
26
|
expect(subject.content).to eq('cookbook_file content')
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
context 'when the resource is a file' do
|
31
31
|
it 'renders the file content' do
|
32
|
-
resource.
|
32
|
+
allow(resource).to receive(:resource_name).and_return('file')
|
33
33
|
expect(subject.content).to eq('file content')
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
37
|
context 'when the resource is a template' do
|
38
38
|
it 'renders the template content' do
|
39
|
-
resource.
|
39
|
+
allow(resource).to receive(:resource_name).and_return('template')
|
40
40
|
expect(subject.content).to eq('template content')
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
context 'when the resource is not a file type' do
|
45
45
|
it 'returns nil' do
|
46
|
-
resource.
|
46
|
+
allow(resource).to receive(:resource_name).and_return('service')
|
47
47
|
expect(subject.content).to be_nil
|
48
48
|
end
|
49
49
|
end
|