diff options
Diffstat (limited to 'spec')
-rw-r--r-- | spec/integration/client/client_spec.rb | 2 | ||||
-rw-r--r-- | spec/unit/property/validation_spec.rb | 215 | ||||
-rw-r--r-- | spec/unit/property_spec.rb | 88 | ||||
-rw-r--r-- | spec/unit/provider/package/dpkg_spec.rb | 38 | ||||
-rw-r--r-- | spec/unit/resource_reporter_spec.rb | 2 |
5 files changed, 187 insertions, 158 deletions
diff --git a/spec/integration/client/client_spec.rb b/spec/integration/client/client_spec.rb index d08935d854..24ce69ac03 100644 --- a/spec/integration/client/client_spec.rb +++ b/spec/integration/client/client_spec.rb @@ -430,7 +430,7 @@ EOM expect(run_complete).to be >= 0 # Make sure there is exactly one result for each, and that it occurs *after* the complete message. - expect(match_indices(/nil currently does not overwrite the value of/, result.stdout)).to match([ be > run_complete ]) + expect(match_indices(/An attempt was made to change x from \[\] to nil by calling x\(nil\). In Chef 12, this does a get rather than a set. In Chef 13, this will change to set the value to nil./, result.stdout)).to match([ be > run_complete ]) end end diff --git a/spec/unit/property/validation_spec.rb b/spec/unit/property/validation_spec.rb index 7e84a651e2..5a40cce145 100644 --- a/spec/unit/property/validation_spec.rb +++ b/spec/unit/property/validation_spec.rb @@ -72,7 +72,7 @@ describe "Chef::Resource.property validation" do end end - def self.validation_test(validation, success_values, failure_values, getter_values=[], *tags) + def self.validation_test(validation, success_values, failure_values, *tags) with_property ":x, #{validation}", *tags do it "gets nil when retrieving the initial (non-set) value" do expect(resource.x).to be_nil @@ -91,11 +91,52 @@ describe "Chef::Resource.property validation" do expect { resource.x v }.to raise_error Chef::Exceptions::ValidationFailed end end - getter_values.each do |v| - it "setting value to #{v.inspect} does not change the value" do + it "setting x to nil when it is already nil does not emit a warning" do + expect(resource.x nil).to be_nil + expect(resource.x).to be_nil + end + it "changing x to nil warns that the get will change to a set in Chef 13 and does not change the value" do + resource.instance_eval { @x = "default" } + expect { resource.x nil }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /An attempt was made to change x from "default" to nil by calling x\(nil\). In Chef 12, this does a get rather than a set. In Chef 13, this will change to set the value to nil./ + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect(resource.x nil).to eq "default" + expect(resource.x).to eq "default" + end + end + if tags.include?(:nil_is_valid) + with_property ":x, #{validation}, default: nil" do + it "setting x to nil when it is already nil does not emit a warning" do + expect(resource.x nil).to be_nil + expect(resource.x).to be_nil + end + it "changing x to nil warns that the get will change to a set in Chef 13 and does not change the value" do + resource.instance_eval { @x = "default" } + expect { resource.x nil }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /An attempt was made to change x from "default" to nil by calling x\(nil\). In Chef 12, this does a get rather than a set. In Chef 13, this will change to set the value to nil./ Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect(resource.x nil).to eq "default" + expect(resource.x).to eq "default" + end + end + else + it "property :x, #{validation}, default: nil warns that the default is invalid" do + expect { resource_class.class_eval("property :x, #{validation}, default: nil", __FILE__, __LINE__) }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /Default value nil is invalid for property x of resource chef_resource_property_spec_(\d+). Possible fixes: 1. Remove 'default: nil' if nil means 'undefined'. 2. Set a valid default value if there is a reasonable one. 3. Allow nil as a valid value of your property \(for example, 'property :x, \[ String, nil \], default: nil'\)./ + end + context "With property :x, #{validation}, default: nil" do + before do + Chef::Config[:treat_deprecation_warnings_as_errors] = false + resource_class.class_eval("property :x, #{validation}, default: nil", __FILE__, __LINE__) + Chef::Config[:treat_deprecation_warnings_as_errors] = true + end + + it "changing x to nil emits a warning that the value is invalid and does not change the value" do resource.instance_eval { @x = "default" } - expect(resource.x v).to eq "default" + expect { resource.x nil }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /nil is an invalid value for x of resource chef_resource_property_spec_(\d+). In Chef 13, this warning will change to an error./ + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect(resource.x nil).to eq "default" expect(resource.x).to eq "default" end end @@ -150,9 +191,12 @@ describe "Chef::Resource.property validation" do it "get succeeds" do expect(resource.x).to eq "default" end - it "set(nil) sets the value" do - expect(resource.x nil).to be_nil - expect(resource.x).to be_nil + it "set(nil) emits a warning that the value will be set, but does not set the value" do + expect { resource.x nil }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /An attempt was made to change x from "default" to nil by calling x\(nil\). In Chef 12, this does a get rather than a set. In Chef 13, this will change to set the value to nil./ + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect(resource.x nil).to eq "default" + expect(resource.x).to eq "default" end it "set to valid value succeeds" do expect(resource.x "str").to eq "str" @@ -185,46 +229,41 @@ describe "Chef::Resource.property validation" do context "bare types" do validation_test "String", [ "hi" ], - [ 10 ], - [ nil ] + [ 10 ] validation_test ":a", [ :a ], - [ :b ], - [ nil ] + [ :b ] validation_test ":a, is: :b", [ :a, :b ], - [ :c ], - [ nil ] + [ :c ] validation_test ":a, is: [ :b, :c ]", [ :a, :b, :c ], - [ :d ], - [ nil ] + [ :d ] validation_test "[ :a, :b ], is: :c", [ :a, :b, :c ], - [ :d ], - [ nil ] + [ :d ] validation_test "[ :a, :b ], is: [ :c, :d ]", [ :a, :b, :c, :d ], - [ :e ], - [ nil ] + [ :e ] validation_test "nil", - [ nil ], - [ :a ] + [ ], + [ :a ], + :nil_is_valid validation_test "[ nil ]", - [ nil ], - [ :a ] + [ ], + [ :a ], + :nil_is_valid validation_test "[]", [], - [ :a ], - [ nil ] + [ :a ] end # is @@ -232,35 +271,30 @@ describe "Chef::Resource.property validation" do # Class validation_test "is: String", [ "a", "" ], - [ :a, 1 ], - [ nil ] + [ :a, 1 ] # Value validation_test "is: :a", [ :a ], - [ :b ], - [ nil ] + [ :b ] validation_test "is: [ :a, :b ]", [ :a, :b ], - [ [ :a, :b ] ], - [ nil ] + [ [ :a, :b ] ] validation_test "is: [ [ :a, :b ] ]", [ [ :a, :b ] ], - [ :a, :b ], - [ nil ] + [ :a, :b ] # Regex validation_test "is: /abc/", [ "abc", "wowabcwow" ], - [ "", "abac" ], - [ nil ] + [ "", "abac" ] # Property validation_test "is: Chef::Property.new(is: :a)", [ :a ], - [ :b, nil ] + [ :b ] # RSpec Matcher class Globalses @@ -269,31 +303,30 @@ describe "Chef::Resource.property validation" do validation_test "is: Globalses.eq(10)", [ 10 ], - [ 1 ], - [ nil ] + [ 1 ] # Proc validation_test "is: proc { |x| x }", [ true, 1 ], - [ false ], - [ nil ] + [ false ] validation_test "is: proc { |x| x > blah }", [ 10 ], [ -1 ] validation_test "is: nil", - [ nil ], - [ "a" ] + [ ], + [ "a" ], + :nil_is_valid validation_test "is: [ String, nil ]", - [ "a", nil ], - [ :b ] + [ "a" ], + [ :b ], + :nil_is_valid validation_test "is: []", [], - [ :a ], - [ nil ] + [ :a ] end # Combination @@ -301,7 +334,7 @@ describe "Chef::Resource.property validation" do validation_test 'kind_of: String, equal_to: "a"', [ "a" ], [ "b" ], - [ nil ] + :nil_is_valid end # equal_to @@ -310,37 +343,38 @@ describe "Chef::Resource.property validation" do validation_test "equal_to: :a", [ :a ], [ :b ], - [ nil ] + :nil_is_valid validation_test "equal_to: [ :a, :b ]", [ :a, :b ], [ [ :a, :b ] ], - [ nil ] + :nil_is_valid validation_test "equal_to: [ [ :a, :b ] ]", [ [ :a, :b ] ], [ :a, :b ], - [ nil ] + :nil_is_valid validation_test "equal_to: nil", [ ], [ "a" ], - [ nil ] + :nil_is_valid validation_test 'equal_to: [ "a", nil ]', [ "a" ], [ "b" ], - [ nil ] + :nil_is_valid validation_test 'equal_to: [ nil, "a" ]', [ "a" ], [ "b" ], - [ nil ] + :nil_is_valid validation_test "equal_to: []", [], [ :a ], - [ nil ] + :nil_is_valid + end # kind_of @@ -348,37 +382,37 @@ describe "Chef::Resource.property validation" do validation_test "kind_of: String", [ "a" ], [ :b ], - [ nil ] + :nil_is_valid validation_test "kind_of: [ String, Symbol ]", [ "a", :b ], [ 1 ], - [ nil ] + :nil_is_valid validation_test "kind_of: [ Symbol, String ]", [ "a", :b ], [ 1 ], - [ nil ] + :nil_is_valid validation_test "kind_of: NilClass", [ ], [ "a" ], - [ nil ] + :nil_is_valid validation_test "kind_of: [ NilClass, String ]", [ "a" ], [ :a ], - [ nil ] + :nil_is_valid validation_test "kind_of: []", [], [ :a ], - [ nil ] + :nil_is_valid validation_test "kind_of: nil", [], [ :a ], - [ nil ] + :nil_is_valid end # regex @@ -386,53 +420,55 @@ describe "Chef::Resource.property validation" do validation_test "regex: /abc/", [ "xabcy" ], [ "gbh", 123 ], - [ nil ] + :nil_is_valid validation_test "regex: [ /abc/, /z/ ]", [ "xabcy", "aza" ], [ "gbh", 123 ], - [ nil ] + :nil_is_valid validation_test "regex: [ /z/, /abc/ ]", [ "xabcy", "aza" ], [ "gbh", 123 ], - [ nil ] + :nil_is_valid validation_test "regex: [ [ /z/, /abc/ ], [ /n/ ] ]", [ "xabcy", "aza", "ana" ], [ "gbh", 123 ], - [ nil ] + :nil_is_valid validation_test "regex: []", [], [ :a ], - [ nil ] + :nil_is_valid validation_test "regex: nil", [], [ :a ], - [ nil ] + :nil_is_valid end # callbacks context "callbacks" do validation_test 'callbacks: { "a" => proc { |x| x > 10 }, "b" => proc { |x| x%2 == 0 } }', [ 12 ], - [ 11, 4 ] + [ 11, 4 ], + :nil_is_valid validation_test 'callbacks: { "a" => proc { |x| x%2 == 0 }, "b" => proc { |x| x > 10 } }', [ 12 ], - [ 11, 4 ] + [ 11, 4 ], + :nil_is_valid validation_test 'callbacks: { "a" => proc { |x| x.nil? } }', [ ], [ "a" ], - [ nil ] + :nil_is_valid validation_test "callbacks: {}", [ :a ], [], - [ nil ] + :nil_is_valid end # respond_to @@ -440,84 +476,84 @@ describe "Chef::Resource.property validation" do validation_test "respond_to: :split", [ "hi" ], [ 1 ], - [ nil ] + :nil_is_valid validation_test 'respond_to: "split"', [ "hi" ], [ 1 ], - [ nil ] + :nil_is_valid validation_test "respond_to: :to_s", [ :a ], [], - [ nil ] + :nil_is_valid validation_test "respond_to: [ :split, :to_s ]", [ "hi" ], [ 1 ], - [ nil ] + :nil_is_valid validation_test "respond_to: %w(split to_s)", [ "hi" ], [ 1 ], - [ nil ] + :nil_is_valid validation_test "respond_to: [ :to_s, :split ]", [ "hi" ], [ 1 ], - [ nil ] + :nil_is_valid validation_test "respond_to: []", [ :a ], [], - [ nil ] + :nil_is_valid validation_test "respond_to: nil", [ :a ], [], - [ nil ] + :nil_is_valid end context "cannot_be" do validation_test "cannot_be: :empty", [ 1, [1,2], { a: 10 } ], [ [] ], - [ nil ] + :nil_is_valid validation_test 'cannot_be: "empty"', [ 1, [1,2], { a: 10 } ], [ [] ], - [ nil ] + :nil_is_valid validation_test "cannot_be: [ :empty, :nil ]", [ 1, [1,2], { a: 10 } ], [ [] ], - [ nil ] + :nil_is_valid validation_test 'cannot_be: [ "empty", "nil" ]', [ 1, [1,2], { a: 10 } ], [ [] ], - [ nil ] + :nil_is_valid validation_test "cannot_be: [ :nil, :empty ]", [ 1, [1,2], { a: 10 } ], [ [] ], - [ nil ] + :nil_is_valid validation_test "cannot_be: [ :empty, :nil, :blahblah ]", [ 1, [1,2], { a: 10 } ], [ [] ], - [ nil ] + :nil_is_valid validation_test "cannot_be: []", [ :a ], [], - [ nil ] + :nil_is_valid validation_test "cannot_be: nil", [ :a ], [], - [ nil ] + :nil_is_valid end @@ -549,9 +585,8 @@ describe "Chef::Resource.property validation" do it "if x is not specified, retrieval fails" do expect { resource.x }.to raise_error Chef::Exceptions::ValidationFailed end - it "value nil is valid" do - expect(resource.x nil).to be_nil - expect(resource.x).to be_nil + it "value nil is not valid (required means 'not nil')" do + expect { resource.x nil }.to raise_error Chef::Exceptions::ValidationFailed end it "value '1' is valid" do expect(resource.x "1").to eq "1" diff --git a/spec/unit/property_spec.rb b/spec/unit/property_spec.rb index 1fe8abc706..ffdbccf019 100644 --- a/spec/unit/property_spec.rb +++ b/spec/unit/property_spec.rb @@ -203,7 +203,7 @@ describe "Chef::Resource.property" do expect(subresource_class.properties[:y]).not_to be_nil end it "y is not on the superclass" do - expect { resource_class.y 10 }.to raise_error + expect { resource_class.y 10 }.to raise_error NoMethodError expect(resource_class.properties[:y]).to be_nil end end @@ -581,10 +581,17 @@ describe "Chef::Resource.property" do end context "validation of defaults" do - with_property ":x, String, default: 10" do - it "when the resource is created, no error is raised" do - resource + it "When a class is declared with property :x, String, default: 10, a warning is emitted" do + expect { resource_class.class_eval { property :x, String, default: 10 } }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /Default value 10 is invalid for property x of resource chef_resource_property_spec_(\d+). In Chef 13 this will become an error: Option x must be one of: String! You passed 10./ + end + context "With property :x, String, default: 10" do + before do + Chef::Config[:treat_deprecation_warnings_as_errors] = false + resource_class.class_eval { property :x, String, default: 10 } + Chef::Config[:treat_deprecation_warnings_as_errors] = true end + it "when x is set, no error is raised" do expect(resource.x "hi").to eq "hi" expect(resource.x).to eq "hi" @@ -592,9 +599,6 @@ describe "Chef::Resource.property" do it "when x is retrieved, no validation error is raised" do expect(resource.x).to eq 10 end - # it "when x is retrieved, a validation error is raised" do - # expect { resource.x }.to raise_error Chef::Exceptions::ValidationFailed - # end end with_property ":x, String, default: lazy { Namer.next_index }" do @@ -605,40 +609,31 @@ describe "Chef::Resource.property" do expect(resource.x "hi").to eq "hi" expect(resource.x).to eq "hi" end - it "when x is retrieved, no validation error is raised" do - expect(resource.x).to eq 1 + it "when x is retrieved, an invalid default warning is emitted and the value is returned" do + expect { resource.x }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /Default value 1 is invalid for property x of resource chef_resource_property_spec_(\d+). In Chef 13 this will become an error: Option x must be one of: String! You passed 1./ expect(Namer.current_index).to eq 1 + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect(resource.x).to eq 2 end - # it "when x is retrieved, a validation error is raised" do - # expect { resource.x }.to raise_error Chef::Exceptions::ValidationFailed - # expect(Namer.current_index).to eq 1 - # end end with_property ":x, default: lazy { Namer.next_index.to_s }, is: proc { |v| Namer.next_index; true }" do - it "validation is not run at all on the default value" do + it "coercion and validation is only run the first time" do expect(resource.x).to eq "1" - expect(Namer.current_index).to eq 1 + expect(Namer.current_index).to eq 2 + expect(resource.x).to eq "1" + expect(Namer.current_index).to eq 2 end - # it "validation is run each time" do - # expect(resource.x).to eq '1' - # expect(Namer.current_index).to eq 2 - # expect(resource.x).to eq '1' - # expect(Namer.current_index).to eq 2 - # end end with_property ":x, default: lazy { Namer.next_index.to_s.freeze }, is: proc { |v| Namer.next_index; true }" do - it "validation is not run at all on the default value" do + it "coercion and validation is run each time" do expect(resource.x).to eq "1" - expect(Namer.current_index).to eq 1 + expect(Namer.current_index).to eq 2 + expect(resource.x).to eq "3" + expect(Namer.current_index).to eq 4 end - # it "validation is only run the first time" do - # expect(resource.x).to eq '1' - # expect(Namer.current_index).to eq 2 - # expect(resource.x).to eq '1' - # expect(Namer.current_index).to eq 2 - # end end end @@ -716,12 +711,12 @@ describe "Chef::Resource.property" do end with_property ':x, proc { |v| Namer.next_index; true }, coerce: proc { |v| "#{v}#{next_index}" }, default: lazy { 10 }' do - it "coercion is only run the first time x is retrieved, and validation is not run" do + it "coercion and validation is only run the first time x is retrieved" do expect(Namer.current_index).to eq 0 expect(resource.x).to eq "101" - expect(Namer.current_index).to eq 1 + expect(Namer.current_index).to eq 2 expect(resource.x).to eq "101" - expect(Namer.current_index).to eq 1 + expect(Namer.current_index).to eq 2 end end @@ -732,12 +727,12 @@ describe "Chef::Resource.property" do end end with_property ':x, Integer, coerce: proc { |v| "#{v}#{next_index}" }, default: 10' do - it "when x is retrieved, it is coerced and not validated" do - expect(resource.x).to eq "101" + it "when x is retrieved, it is coerced and emits an invalid default warning, but still returns the value" do + expect { resource.x }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /Default value 10 is invalid for property x of resource chef_resource_property_spec_(\d+). In Chef 13 this will become an error: Option x must be one of: Integer! You passed "101"./ + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect(resource.x).to eq "102" end - # it "when x is retrieved, it is coerced before validating and fails" do - # expect { resource.x }.to raise_error Chef::Exceptions::ValidationFailed - # end end with_property ':x, String, coerce: proc { |v| "#{v}#{next_index}" }, default: lazy { 10 }' do it "when x is retrieved, it is coerced before validating and passes" do @@ -745,20 +740,20 @@ describe "Chef::Resource.property" do end end with_property ':x, Integer, coerce: proc { |v| "#{v}#{next_index}" }, default: lazy { 10 }' do - it "when x is retrieved, it is coerced and not validated" do - expect(resource.x).to eq "101" + it "when x is retrieved, it is coerced and emits an invalid default warning; the value is still returned." do + expect { resource.x }.to raise_error Chef::Exceptions::DeprecatedFeatureError, + /Default value 10 is invalid for property x of resource chef_resource_property_spec_(\d+). In Chef 13 this will become an error: Option x must be one of: Integer! You passed "101"./ + Chef::Config[:treat_deprecation_warnings_as_errors] = false + expect(resource.x).to eq "102" end - # it "when x is retrieved, it is coerced before validating and fails" do - # expect { resource.x }.to raise_error Chef::Exceptions::ValidationFailed - # end end with_property ':x, proc { |v| Namer.next_index; true }, coerce: proc { |v| "#{v}#{next_index}" }, default: lazy { 10 }' do - it "coercion is only run the first time x is retrieved, and validation is not run" do + it "coercion is only run the first time x is retrieved, and validation is run" do expect(Namer.current_index).to eq 0 expect(resource.x).to eq "101" - expect(Namer.current_index).to eq 1 + expect(Namer.current_index).to eq 2 expect(resource.x).to eq "101" - expect(Namer.current_index).to eq 1 + expect(Namer.current_index).to eq 2 end end end @@ -922,7 +917,8 @@ describe "Chef::Resource.property" do expect(Namer.current_index).to eq 1 end it "does not emit a deprecation warning if set to nil" do - expect(resource.x nil).to eq "1" + # nil is never coerced + expect(resource.x nil).to be_nil end it "coercion sets the value (and coercion does not run on get)" do expect(resource.x 10).to eq "101" diff --git a/spec/unit/provider/package/dpkg_spec.rb b/spec/unit/provider/package/dpkg_spec.rb index e0bf2accde..f4c938ac7a 100644 --- a/spec/unit/provider/package/dpkg_spec.rb +++ b/spec/unit/provider/package/dpkg_spec.rb @@ -80,30 +80,26 @@ Conflicts: wget-ssl expect { provider.run_action(:purge) }.not_to raise_error end - it "should raise an exception if a source is nil when :install" do - new_resource.source nil - allow(::File).to receive(:exist?).with(source).and_return(false) - expect { provider.run_action(:install) }.to raise_error(Chef::Exceptions::Package) - end + context "when source is nil" do + let(:source) { nil } - it "should raise an exception if a source is nil when :upgrade" do - new_resource.source nil - allow(::File).to receive(:exist?).with(source).and_return(false) - expect { provider.run_action(:upgrade) }.to raise_error(Chef::Exceptions::Package) - end + it "should raise an exception if a source is nil when :install" do + expect { provider.run_action(:install) }.to raise_error(Chef::Exceptions::Package) + end - it "should not raise an exception if a source is nil when :remove" do - new_resource.source nil - allow(::File).to receive(:exist?).with(source).and_return(false) - expect(provider).to receive(:action_remove) - expect { provider.run_action(:remove) }.not_to raise_error - end + it "should raise an exception if a source is nil when :upgrade" do + expect { provider.run_action(:upgrade) }.to raise_error(Chef::Exceptions::Package) + end - it "should not raise an exception if a source is nil when :purge" do - new_resource.source nil - allow(::File).to receive(:exist?).with(source).and_return(false) - expect(provider).to receive(:action_purge) - expect { provider.run_action(:purge) }.not_to raise_error + it "should not raise an exception if a source is nil when :remove" do + expect(provider).to receive(:action_remove) + expect { provider.run_action(:remove) }.not_to raise_error + end + + it "should not raise an exception if a source is nil when :purge" do + expect(provider).to receive(:action_purge) + expect { provider.run_action(:purge) }.not_to raise_error + end end end diff --git a/spec/unit/resource_reporter_spec.rb b/spec/unit/resource_reporter_spec.rb index aa162fd161..3dcd51deab 100644 --- a/spec/unit/resource_reporter_spec.rb +++ b/spec/unit/resource_reporter_spec.rb @@ -271,6 +271,7 @@ describe Chef::ResourceReporter do @bad_resource = Chef::Resource::File.new("/tmp/nameless_file.txt") allow(@bad_resource).to receive(:name).and_return(nil) allow(@bad_resource).to receive(:identity).and_return(nil) + allow(@bad_resource).to receive(:path).and_return(nil) @resource_reporter.resource_action_start(@bad_resource, :create) @resource_reporter.resource_current_state_loaded(@bad_resource, :create, @current_resource) @resource_reporter.resource_updated(@bad_resource, :create) @@ -294,6 +295,7 @@ describe Chef::ResourceReporter do @bad_resource = Chef::Resource::File.new("/tmp/filename_as_hash.txt") allow(@bad_resource).to receive(:name).and_return({:foo=>:bar}) allow(@bad_resource).to receive(:identity).and_return({:foo=>:bar}) + allow(@bad_resource).to receive(:path).and_return({:foo=>:bar}) @resource_reporter.resource_action_start(@bad_resource, :create) @resource_reporter.resource_current_state_loaded(@bad_resource, :create, @current_resource) @resource_reporter.resource_updated(@bad_resource, :create) |