summaryrefslogtreecommitdiff
path: root/spec/integration/recipes
diff options
context:
space:
mode:
Diffstat (limited to 'spec/integration/recipes')
-rw-r--r--spec/integration/recipes/lwrp_inline_resources_spec.rb4
-rw-r--r--spec/integration/recipes/provider_choice.rb1
-rw-r--r--spec/integration/recipes/recipe_dsl_spec.rb31
-rw-r--r--spec/integration/recipes/resource_action_spec.rb790
-rw-r--r--spec/integration/recipes/resource_converge_if_changed_spec.rb1
-rw-r--r--spec/integration/recipes/resource_load_spec.rb20
6 files changed, 443 insertions, 404 deletions
diff --git a/spec/integration/recipes/lwrp_inline_resources_spec.rb b/spec/integration/recipes/lwrp_inline_resources_spec.rb
index dc7e19a3cb..0fc2c338fd 100644
--- a/spec/integration/recipes/lwrp_inline_resources_spec.rb
+++ b/spec/integration/recipes/lwrp_inline_resources_spec.rb
@@ -82,8 +82,8 @@ describe "LWRPs with inline resources" do
action :b
end
}.to have_updated("lwrp_inline_resources_test2[hi]", :b).
- and have_updated("ruby_block[run a]", :run).
- and have_updated("ruby_block[run b]", :run)
+ and have_updated("ruby_block[run a]", :run).
+ and have_updated("ruby_block[run b]", :run)
expect(r.ran_b).to eq "ran b: ran_a value was \"ran a\""
end
end
diff --git a/spec/integration/recipes/provider_choice.rb b/spec/integration/recipes/provider_choice.rb
index d08090bbe8..a9fc06038a 100644
--- a/spec/integration/recipes/provider_choice.rb
+++ b/spec/integration/recipes/provider_choice.rb
@@ -18,6 +18,7 @@ describe "Recipe DSL methods" do
class Chef::Provider::ProviderThingy < Chef::Provider
def load_current_resource
end
+
def action_create
Chef::Log.warn("hello from #{self.class.name}")
end
diff --git a/spec/integration/recipes/recipe_dsl_spec.rb b/spec/integration/recipes/recipe_dsl_spec.rb
index db4d158eec..f96be7ea91 100644
--- a/spec/integration/recipes/recipe_dsl_spec.rb
+++ b/spec/integration/recipes/recipe_dsl_spec.rb
@@ -30,6 +30,7 @@ describe "Recipe DSL methods" do
class Provider < Chef::Provider
def load_current_resource
end
+
def action_create
BaseThingy.created_name = new_resource.name
BaseThingy.created_resource = new_resource.class
@@ -89,6 +90,7 @@ describe "Recipe DSL methods" do
class Chef::Provider::BackcompatThingy < Chef::Provider
def load_current_resource
end
+
def action_create
BaseThingy.created_resource = new_resource.class
BaseThingy.created_provider = self.class
@@ -832,7 +834,9 @@ describe "Recipe DSL methods" do
def self.name
"B"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
end
result.resource_name two_classes_one_dsl
@@ -846,7 +850,9 @@ describe "Recipe DSL methods" do
def self.name
"A"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
end
result.resource_name two_classes_one_dsl
@@ -874,7 +880,9 @@ describe "Recipe DSL methods" do
def self.name
"Z"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
end
result.resource_name two_classes_one_dsl
@@ -1009,7 +1017,9 @@ describe "Recipe DSL methods" do
def self.name
"B"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
end
result.provides two_classes_one_dsl
@@ -1023,7 +1033,9 @@ describe "Recipe DSL methods" do
def self.name
"A"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
end
result
@@ -1060,7 +1072,9 @@ describe "Recipe DSL methods" do
def self.name
"Z"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
end
result
@@ -1132,7 +1146,9 @@ describe "Recipe DSL methods" do
def self.name
"Blarghle"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
end
result.resource_name two_classes_one_dsl
@@ -1170,6 +1186,7 @@ describe "Recipe DSL methods" do
def self.called_provides
@called_provides
end
+
def to_s
"MyResource"
end
@@ -1237,8 +1254,11 @@ describe "Recipe DSL methods" do
def self.name
"MyProvider"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
+
def self.called_provides
@called_provides
end
@@ -1256,7 +1276,7 @@ describe "Recipe DSL methods" do
context "with supports? returning true" do
before do
- provider_class.define_singleton_method(:supports?) { |resource,action| true }
+ provider_class.define_singleton_method(:supports?) { |resource, action| true }
end
it "my_resource runs the provider and does not emit a warning" do
@@ -1274,8 +1294,11 @@ describe "Recipe DSL methods" do
def self.name
"MyProvider2"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
+
def self.called_provides
@called_provides
end
@@ -1299,7 +1322,7 @@ describe "Recipe DSL methods" do
context "with supports? returning false" do
before do
- provider_class.define_singleton_method(:supports?) { |resource,action| false }
+ provider_class.define_singleton_method(:supports?) { |resource, action| false }
end
# TODO no warning? ick
@@ -1319,8 +1342,11 @@ describe "Recipe DSL methods" do
def self.name
"MyProvider2"
end
+
def self.to_s; name; end
+
def self.inspect; name.inspect; end
+
def self.called_provides
@called_provides
end
@@ -1475,6 +1501,7 @@ describe "Recipe DSL methods" do
class Chef::Provider::LwResourceWithHwProviderTestCase < Chef::Provider
def load_current_resource
end
+
def action_create
new_resource.created_provider = self.class
end
diff --git a/spec/integration/recipes/resource_action_spec.rb b/spec/integration/recipes/resource_action_spec.rb
index 5778c467c5..8f6f4b7f46 100644
--- a/spec/integration/recipes/resource_action_spec.rb
+++ b/spec/integration/recipes/resource_action_spec.rb
@@ -3,89 +3,89 @@ require "support/shared/integration/integration_helper"
# Houses any classes we declare
module ResourceActionSpec
-describe "Resource.action" do
- include IntegrationSupport
+ describe "Resource.action" do
+ include IntegrationSupport
- shared_context "ActionJackson" do
- it "the default action is the first declared action" do
- converge <<-EOM, __FILE__, __LINE__+1
+ shared_context "ActionJackson" do
+ it "the default action is the first declared action" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
#{resource_dsl} "hi" do
foo "foo!"
end
EOM
- expect(ActionJackson.ran_action).to eq :access_recipe_dsl
- expect(ActionJackson.succeeded).to eq true
- end
+ expect(ActionJackson.ran_action).to eq :access_recipe_dsl
+ expect(ActionJackson.succeeded).to eq true
+ end
- it "the action can access recipe DSL" do
- converge <<-EOM, __FILE__, __LINE__+1
+ it "the action can access recipe DSL" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
#{resource_dsl} "hi" do
foo "foo!"
action :access_recipe_dsl
end
EOM
- expect(ActionJackson.ran_action).to eq :access_recipe_dsl
- expect(ActionJackson.succeeded).to eq true
- end
+ expect(ActionJackson.ran_action).to eq :access_recipe_dsl
+ expect(ActionJackson.succeeded).to eq true
+ end
- it "the action can access attributes" do
- converge <<-EOM, __FILE__, __LINE__+1
+ it "the action can access attributes" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
#{resource_dsl} "hi" do
foo "foo!"
action :access_attribute
end
EOM
- expect(ActionJackson.ran_action).to eq :access_attribute
- expect(ActionJackson.succeeded).to eq "foo!"
- end
+ expect(ActionJackson.ran_action).to eq :access_attribute
+ expect(ActionJackson.succeeded).to eq "foo!"
+ end
- it "the action can access public methods" do
- converge <<-EOM, __FILE__, __LINE__+1
+ it "the action can access public methods" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
#{resource_dsl} "hi" do
foo "foo!"
action :access_method
end
EOM
- expect(ActionJackson.ran_action).to eq :access_method
- expect(ActionJackson.succeeded).to eq "foo_public!"
- end
+ expect(ActionJackson.ran_action).to eq :access_method
+ expect(ActionJackson.succeeded).to eq "foo_public!"
+ end
- it "the action can access protected methods" do
- converge <<-EOM, __FILE__, __LINE__+1
+ it "the action can access protected methods" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
#{resource_dsl} "hi" do
foo "foo!"
action :access_protected_method
end
EOM
- expect(ActionJackson.ran_action).to eq :access_protected_method
- expect(ActionJackson.succeeded).to eq "foo_protected!"
- end
+ expect(ActionJackson.ran_action).to eq :access_protected_method
+ expect(ActionJackson.succeeded).to eq "foo_protected!"
+ end
- it "the action cannot access private methods" do
- expect {
- converge(<<-EOM, __FILE__, __LINE__+1)
+ it "the action cannot access private methods" do
+ expect {
+ converge(<<-EOM, __FILE__, __LINE__ + 1)
#{resource_dsl} "hi" do
foo "foo!"
action :access_private_method
end
EOM
- }.to raise_error(NameError)
- expect(ActionJackson.ran_action).to eq :access_private_method
- end
+ }.to raise_error(NameError)
+ expect(ActionJackson.ran_action).to eq :access_private_method
+ end
- it "the action cannot access resource instance variables" do
- converge <<-EOM, __FILE__, __LINE__+1
+ it "the action cannot access resource instance variables" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
#{resource_dsl} "hi" do
foo "foo!"
action :access_instance_variable
end
EOM
- expect(ActionJackson.ran_action).to eq :access_instance_variable
- expect(ActionJackson.succeeded).to be_nil
- end
+ expect(ActionJackson.ran_action).to eq :access_instance_variable
+ expect(ActionJackson.succeeded).to be_nil
+ end
- it "the action does not compile until the prior resource has converged" do
- converge <<-EOM, __FILE__, __LINE__+1
+ it "the action does not compile until the prior resource has converged" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
ruby_block "wow" do
block do
ResourceActionSpec::ActionJackson.ruby_block_converged = "ruby_block_converged!"
@@ -97,12 +97,12 @@ describe "Resource.action" do
action :access_class_method
end
EOM
- expect(ActionJackson.ran_action).to eq :access_class_method
- expect(ActionJackson.succeeded).to eq "ruby_block_converged!"
- end
+ expect(ActionJackson.ran_action).to eq :access_class_method
+ expect(ActionJackson.succeeded).to eq "ruby_block_converged!"
+ end
- it "the action's resources converge before the next resource converges" do
- converge <<-EOM, __FILE__, __LINE__+1
+ it "the action's resources converge before the next resource converges" do
+ converge <<-EOM, __FILE__, __LINE__ + 1
#{resource_dsl} "hi" do
foo "foo!"
action :access_attribute
@@ -114,427 +114,407 @@ describe "Resource.action" do
end
end
EOM
- expect(ActionJackson.ran_action).to eq :access_attribute
- expect(ActionJackson.succeeded).to eq "foo!"
- expect(ActionJackson.ruby_block_converged).to eq "foo!"
- end
- end
-
- context "With resource 'action_jackson'" do
- class ActionJackson < Chef::Resource
- use_automatic_resource_name
- def foo(value=nil)
- @foo = value if value
- @foo
- end
- def blarghle(value=nil)
- @blarghle = value if value
- @blarghle
+ expect(ActionJackson.ran_action).to eq :access_attribute
+ expect(ActionJackson.succeeded).to eq "foo!"
+ expect(ActionJackson.ruby_block_converged).to eq "foo!"
end
+ end
- class <<self
- attr_accessor :ran_action
- attr_accessor :succeeded
- attr_accessor :ruby_block_converged
- end
+ context "With resource 'action_jackson'" do
+ class ActionJackson < Chef::Resource
+ use_automatic_resource_name
+ def foo(value = nil)
+ @foo = value if value
+ @foo
+ end
- public
- def foo_public
- "foo_public!"
- end
- protected
- def foo_protected
- "foo_protected!"
- end
- private
- def foo_private
- "foo_private!"
- end
+ def blarghle(value = nil)
+ @blarghle = value if value
+ @blarghle
+ end
- public
- action :access_recipe_dsl do
- ActionJackson.ran_action = :access_recipe_dsl
- ruby_block "hi there" do
- block do
- ActionJackson.succeeded = true
- end
+ class <<self
+ attr_accessor :ran_action
+ attr_accessor :succeeded
+ attr_accessor :ruby_block_converged
end
- end
- action :access_attribute do
- ActionJackson.ran_action = :access_attribute
- ActionJackson.succeeded = foo
- ActionJackson.succeeded += " #{blarghle}" if blarghle
- ActionJackson.succeeded += " #{bar}" if respond_to?(:bar)
- end
- action :access_attribute2 do
- ActionJackson.ran_action = :access_attribute2
- ActionJackson.succeeded = foo
- ActionJackson.succeeded += " #{blarghle}" if blarghle
- ActionJackson.succeeded += " #{bar}" if respond_to?(:bar)
- end
- action :access_method do
- ActionJackson.ran_action = :access_method
- ActionJackson.succeeded = foo_public
- end
- action :access_protected_method do
- ActionJackson.ran_action = :access_protected_method
- ActionJackson.succeeded = foo_protected
- end
- action :access_private_method do
- ActionJackson.ran_action = :access_private_method
- ActionJackson.succeeded = foo_private
- end
- action :access_instance_variable do
- ActionJackson.ran_action = :access_instance_variable
- ActionJackson.succeeded = @foo
- end
- action :access_class_method do
- ActionJackson.ran_action = :access_class_method
- ActionJackson.succeeded = ActionJackson.ruby_block_converged
- end
- end
- before(:each) {
- ActionJackson.ran_action = :error
- ActionJackson.succeeded = :error
- ActionJackson.ruby_block_converged = :error
- }
+ public
- it_behaves_like "ActionJackson" do
- let(:resource_dsl) { :action_jackson }
- end
+ def foo_public
+ "foo_public!"
+ end
- it "Can retrieve ancestors of action class without crashing" do
- converge { action_jackson "hi" }
- expect { ActionJackson.action_class.ancestors.join(",") }.not_to raise_error
- end
+ protected
- context "And 'action_jackgrandson' inheriting from ActionJackson and changing nothing" do
- before(:context) {
- class ActionJackgrandson < ActionJackson
- use_automatic_resource_name
+ def foo_protected
+ "foo_protected!"
end
- }
- it_behaves_like "ActionJackson" do
- let(:resource_dsl) { :action_jackgrandson }
- end
- end
+ private
- context "And 'action_jackalope' inheriting from ActionJackson with an extra attribute, action and custom method" do
- class ActionJackalope < ActionJackson
- use_automatic_resource_name
+ def foo_private
+ "foo_private!"
+ end
- def foo(value=nil)
- @foo = "#{value}alope" if value
- @foo
+ public
+
+ action :access_recipe_dsl do
+ ActionJackson.ran_action = :access_recipe_dsl
+ ruby_block "hi there" do
+ block do
+ ActionJackson.succeeded = true
+ end
+ end
end
- def bar(value=nil)
- @bar = "#{value}alope" if value
- @bar
+ action :access_attribute do
+ ActionJackson.ran_action = :access_attribute
+ ActionJackson.succeeded = foo
+ ActionJackson.succeeded += " #{blarghle}" if blarghle
+ ActionJackson.succeeded += " #{bar}" if respond_to?(:bar)
end
- class <<self
- attr_accessor :load_current_resource_ran
- attr_accessor :jackalope_ran
+ action :access_attribute2 do
+ ActionJackson.ran_action = :access_attribute2
+ ActionJackson.succeeded = foo
+ ActionJackson.succeeded += " #{blarghle}" if blarghle
+ ActionJackson.succeeded += " #{bar}" if respond_to?(:bar)
end
- action :access_jackalope do
- ActionJackalope.jackalope_ran = :access_jackalope
- ActionJackalope.succeeded = "#{foo} #{blarghle} #{bar}"
+ action :access_method do
+ ActionJackson.ran_action = :access_method
+ ActionJackson.succeeded = foo_public
end
- action :access_attribute do
- super()
- ActionJackalope.jackalope_ran = :access_attribute
- ActionJackalope.succeeded = ActionJackson.succeeded
+ action :access_protected_method do
+ ActionJackson.ran_action = :access_protected_method
+ ActionJackson.succeeded = foo_protected
+ end
+ action :access_private_method do
+ ActionJackson.ran_action = :access_private_method
+ ActionJackson.succeeded = foo_private
+ end
+ action :access_instance_variable do
+ ActionJackson.ran_action = :access_instance_variable
+ ActionJackson.succeeded = @foo
+ end
+ action :access_class_method do
+ ActionJackson.ran_action = :access_class_method
+ ActionJackson.succeeded = ActionJackson.ruby_block_converged
end
end
- before do
- ActionJackalope.jackalope_ran = nil
- ActionJackalope.load_current_resource_ran = nil
+
+ before(:each) {
+ ActionJackson.ran_action = :error
+ ActionJackson.succeeded = :error
+ ActionJackson.ruby_block_converged = :error
+ }
+
+ it_behaves_like "ActionJackson" do
+ let(:resource_dsl) { :action_jackson }
end
- context "action_jackson still behaves the same" do
- it_behaves_like "ActionJackson" do
- let(:resource_dsl) { :action_jackson }
- end
+ it "Can retrieve ancestors of action class without crashing" do
+ converge { action_jackson "hi" }
+ expect { ActionJackson.action_class.ancestors.join(",") }.not_to raise_error
end
- it "the default action remains the same even though new actions were specified first" do
- converge {
- action_jackalope "hi" do
- foo "foo!"
- bar "bar!"
+ context "And 'action_jackgrandson' inheriting from ActionJackson and changing nothing" do
+ before(:context) {
+ class ActionJackgrandson < ActionJackson
+ use_automatic_resource_name
end
}
- expect(ActionJackson.ran_action).to eq :access_recipe_dsl
- expect(ActionJackson.succeeded).to eq true
+
+ it_behaves_like "ActionJackson" do
+ let(:resource_dsl) { :action_jackgrandson }
+ end
end
- it "new actions run, and can access overridden, new, and overridden attributes" do
- converge {
- action_jackalope "hi" do
- foo "foo!"
- bar "bar!"
- blarghle "blarghle!"
- action :access_jackalope
+ context "And 'action_jackalope' inheriting from ActionJackson with an extra attribute, action and custom method" do
+ class ActionJackalope < ActionJackson
+ use_automatic_resource_name
+
+ def foo(value = nil)
+ @foo = "#{value}alope" if value
+ @foo
end
- }
- expect(ActionJackalope.jackalope_ran).to eq :access_jackalope
- expect(ActionJackalope.succeeded).to eq "foo!alope blarghle! bar!alope"
- end
- it "overridden actions run, call super, and can access overridden, new, and overridden attributes" do
- converge {
- action_jackalope "hi" do
- foo "foo!"
- bar "bar!"
- blarghle "blarghle!"
- action :access_attribute
+ def bar(value = nil)
+ @bar = "#{value}alope" if value
+ @bar
end
- }
- expect(ActionJackson.ran_action).to eq :access_attribute
- expect(ActionJackson.succeeded).to eq "foo!alope blarghle! bar!alope"
- expect(ActionJackalope.jackalope_ran).to eq :access_attribute
- expect(ActionJackalope.succeeded).to eq "foo!alope blarghle! bar!alope"
- end
+ class <<self
+ attr_accessor :load_current_resource_ran
+ attr_accessor :jackalope_ran
+ end
+ action :access_jackalope do
+ ActionJackalope.jackalope_ran = :access_jackalope
+ ActionJackalope.succeeded = "#{foo} #{blarghle} #{bar}"
+ end
+ action :access_attribute do
+ super()
+ ActionJackalope.jackalope_ran = :access_attribute
+ ActionJackalope.succeeded = ActionJackson.succeeded
+ end
+ end
+ before do
+ ActionJackalope.jackalope_ran = nil
+ ActionJackalope.load_current_resource_ran = nil
+ end
- it "non-overridden actions run and can access overridden and non-overridden variables (but not necessarily new ones)" do
- converge {
- action_jackalope "hi" do
- foo "foo!"
- bar "bar!"
- blarghle "blarghle!"
- action :access_attribute2
+ context "action_jackson still behaves the same" do
+ it_behaves_like "ActionJackson" do
+ let(:resource_dsl) { :action_jackson }
end
- }
- expect(ActionJackson.ran_action).to eq :access_attribute2
- expect(ActionJackson.succeeded).to eq("foo!alope blarghle! bar!alope").or(eq("foo!alope blarghle!"))
+ end
+
+ it "the default action remains the same even though new actions were specified first" do
+ converge {
+ action_jackalope "hi" do
+ foo "foo!"
+ bar "bar!"
+ end
+ }
+ expect(ActionJackson.ran_action).to eq :access_recipe_dsl
+ expect(ActionJackson.succeeded).to eq true
+ end
+
+ it "new actions run, and can access overridden, new, and overridden attributes" do
+ converge {
+ action_jackalope "hi" do
+ foo "foo!"
+ bar "bar!"
+ blarghle "blarghle!"
+ action :access_jackalope
+ end
+ }
+ expect(ActionJackalope.jackalope_ran).to eq :access_jackalope
+ expect(ActionJackalope.succeeded).to eq "foo!alope blarghle! bar!alope"
+ end
+
+ it "overridden actions run, call super, and can access overridden, new, and overridden attributes" do
+ converge {
+ action_jackalope "hi" do
+ foo "foo!"
+ bar "bar!"
+ blarghle "blarghle!"
+ action :access_attribute
+ end
+ }
+ expect(ActionJackson.ran_action).to eq :access_attribute
+ expect(ActionJackson.succeeded).to eq "foo!alope blarghle! bar!alope"
+ expect(ActionJackalope.jackalope_ran).to eq :access_attribute
+ expect(ActionJackalope.succeeded).to eq "foo!alope blarghle! bar!alope"
+ end
+
+ it "non-overridden actions run and can access overridden and non-overridden variables (but not necessarily new ones)" do
+ converge {
+ action_jackalope "hi" do
+ foo "foo!"
+ bar "bar!"
+ blarghle "blarghle!"
+ action :access_attribute2
+ end
+ }
+ expect(ActionJackson.ran_action).to eq :access_attribute2
+ expect(ActionJackson.succeeded).to eq("foo!alope blarghle! bar!alope").or(eq("foo!alope blarghle!"))
+ end
end
end
- end
- context "With a resource with no actions" do
- class NoActionJackson < Chef::Resource
- use_automatic_resource_name
+ context "With a resource with no actions" do
+ class NoActionJackson < Chef::Resource
+ use_automatic_resource_name
- def foo(value=nil)
- @foo = value if value
- @foo
- end
+ def foo(value = nil)
+ @foo = value if value
+ @foo
+ end
- class <<self
- attr_accessor :action_was
+ class <<self
+ attr_accessor :action_was
+ end
end
- end
- it "the default action is :nothing" do
- converge {
- no_action_jackson "hi" do
- foo "foo!"
- NoActionJackson.action_was = action
- end
- }
- expect(NoActionJackson.action_was).to eq [:nothing]
+ it "the default action is :nothing" do
+ converge {
+ no_action_jackson "hi" do
+ foo "foo!"
+ NoActionJackson.action_was = action
+ end
+ }
+ expect(NoActionJackson.action_was).to eq [:nothing]
+ end
end
- end
- context "With a resource with action a-b-c d" do
- class WeirdActionJackson < Chef::Resource
- use_automatic_resource_name
+ context "With a resource with action a-b-c d" do
+ class WeirdActionJackson < Chef::Resource
+ use_automatic_resource_name
- class <<self
- attr_accessor :action_was
- end
+ class <<self
+ attr_accessor :action_was
+ end
- action "a-b-c d" do
- WeirdActionJackson.action_was = action
+ action "a-b-c d" do
+ WeirdActionJackson.action_was = action
+ end
end
- end
-
- it "Running the action works" do
- expect_recipe {
- weird_action_jackson "hi"
- }.to be_up_to_date
- expect(WeirdActionJackson.action_was).to eq :"a-b-c d"
- end
- end
- context "With a resource with property x" do
- class ResourceActionSpecWithX < Chef::Resource
- resource_name :resource_action_spec_with_x
- property :x, default: 20
- action :set do
- # Access x during converge to ensure that we emit no warnings there
- x
+ it "Running the action works" do
+ expect_recipe {
+ weird_action_jackson "hi"
+ }.to be_up_to_date
+ expect(WeirdActionJackson.action_was).to eq :"a-b-c d"
end
end
- context "And another resource with a property x and an action that sets property x to its value" do
- class ResourceActionSpecAlsoWithX < Chef::Resource
- resource_name :resource_action_spec_also_with_x
- property :x
- action :set_x_to_x do
- resource_action_spec_with_x "hi" do
- x x
- end
- end
- def self.x_warning_line
- __LINE__-4
- end
- action :set_x_to_x_in_non_initializer do
- r = resource_action_spec_with_x "hi" do
- x 10
- end
- x_times_2 = r.x*2
- end
- action :set_x_to_10 do
- resource_action_spec_with_x "hi" do
- x 10
- end
+ context "With a resource with property x" do
+ class ResourceActionSpecWithX < Chef::Resource
+ resource_name :resource_action_spec_with_x
+ property :x, default: 20
+ action :set do
+ # Access x during converge to ensure that we emit no warnings there
+ x
end
end
- attr_reader :x_warning_line
-
- it "Using the enclosing resource to set x to x emits a warning that you're using the wrong x" do
- recipe = converge {
- resource_action_spec_also_with_x "hi" do
- x 1
- action :set_x_to_x
+ context "And another resource with a property x and an action that sets property x to its value" do
+ class ResourceActionSpecAlsoWithX < Chef::Resource
+ resource_name :resource_action_spec_also_with_x
+ property :x
+ action :set_x_to_x do
+ resource_action_spec_with_x "hi" do
+ x x
+ end
end
- }
- warnings = recipe.logs.lines.select { |l| l =~ /warn/i }
- expect(warnings.size).to eq 1
- expect(warnings[0]).to match(/property x is declared in both resource_action_spec_with_x\[hi\] and resource_action_spec_also_with_x\[hi\] action :set_x_to_x. Use new_resource.x instead. At #{__FILE__}:#{ResourceActionSpecAlsoWithX.x_warning_line}/)
- end
-
- it "Using the enclosing resource to set x to x outside the initializer emits no warning" do
- expect_recipe {
- resource_action_spec_also_with_x "hi" do
- x 1
- action :set_x_to_x_in_non_initializer
+ def self.x_warning_line
+ __LINE__ - 4
end
- }.to emit_no_warnings_or_errors
- end
-
- it "Using the enclosing resource to set x to 10 emits no warning" do
- expect_recipe {
- resource_action_spec_also_with_x "hi" do
- x 1
- action :set_x_to_10
+ action :set_x_to_x_in_non_initializer do
+ r = resource_action_spec_with_x "hi" do
+ x 10
+ end
+ x_times_2 = r.x * 2
end
- }.to emit_no_warnings_or_errors
- end
-
- it "Using the enclosing resource to set x to 10 emits no warning" do
- expect_recipe {
- r = resource_action_spec_also_with_x "hi"
- r.x 1
- r.action :set_x_to_10
- }.to emit_no_warnings_or_errors
- end
- end
+ action :set_x_to_10 do
+ resource_action_spec_with_x "hi" do
+ x 10
+ end
+ end
+ end
- end
+ attr_reader :x_warning_line
- context "With a resource with a set_or_return property named group (same name as a resource)" do
- class ResourceActionSpecWithGroupAction < Chef::Resource
- resource_name :resource_action_spec_set_group_to_nil
- action :set_group_to_nil do
- # Access x during converge to ensure that we emit no warnings there
- resource_action_spec_with_group "hi" do
- group nil
- action :nothing
+ it "Using the enclosing resource to set x to x emits a warning that you're using the wrong x" do
+ recipe = converge {
+ resource_action_spec_also_with_x "hi" do
+ x 1
+ action :set_x_to_x
+ end
+ }
+ warnings = recipe.logs.lines.select { |l| l =~ /warn/i }
+ expect(warnings.size).to eq 1
+ expect(warnings[0]).to match(/property x is declared in both resource_action_spec_with_x\[hi\] and resource_action_spec_also_with_x\[hi\] action :set_x_to_x. Use new_resource.x instead. At #{__FILE__}:#{ResourceActionSpecAlsoWithX.x_warning_line}/)
end
- end
- end
- class ResourceActionSpecWithGroup < Chef::Resource
- resource_name :resource_action_spec_with_group
- def group(value=nil)
- set_or_return(:group, value, {})
- end
- end
+ it "Using the enclosing resource to set x to x outside the initializer emits no warning" do
+ expect_recipe {
+ resource_action_spec_also_with_x "hi" do
+ x 1
+ action :set_x_to_x_in_non_initializer
+ end
+ }.to emit_no_warnings_or_errors
+ end
- it "Setting group to nil in an action does not emit a warning about it being defined in two places" do
- expect_recipe {
- resource_action_spec_set_group_to_nil "hi" do
- action :set_group_to_nil
+ it "Using the enclosing resource to set x to 10 emits no warning" do
+ expect_recipe {
+ resource_action_spec_also_with_x "hi" do
+ x 1
+ action :set_x_to_10
+ end
+ }.to emit_no_warnings_or_errors
end
- }.to emit_no_warnings_or_errors
- end
- end
- context "When a resource has a property with the same name as another resource" do
- class HasPropertyNamedTemplate < Chef::Resource
- use_automatic_resource_name
- property :template
- action :create do
- template "x" do
- "blah"
+ it "Using the enclosing resource to set x to 10 emits no warning" do
+ expect_recipe {
+ r = resource_action_spec_also_with_x "hi"
+ r.x 1
+ r.action :set_x_to_10
+ }.to emit_no_warnings_or_errors
end
end
- end
- it "Raises an error when attempting to use a template in the action" do
- expect_converge {
- has_property_named_template "hi"
- }.to raise_error(/Property template of has_property_named_template\[hi\] cannot be passed a block! If you meant to create a resource named template instead, you'll need to first rename the property./)
end
- end
- context "When a resource declares methods in action_class and declare_action_class" do
- class DeclaresActionClassMethods < Chef::Resource
- use_automatic_resource_name
- property :x
- action :create do
- new_resource.x = a + b + c + d
- end
- action_class do
- def a
- 1
- end
- end
- declare_action_class do
- def b
- 2
+ context "With a resource with a set_or_return property named group (same name as a resource)" do
+ class ResourceActionSpecWithGroupAction < Chef::Resource
+ resource_name :resource_action_spec_set_group_to_nil
+ action :set_group_to_nil do
+ # Access x during converge to ensure that we emit no warnings there
+ resource_action_spec_with_group "hi" do
+ group nil
+ action :nothing
+ end
end
end
- action_class do
- def c
- 3
+
+ class ResourceActionSpecWithGroup < Chef::Resource
+ resource_name :resource_action_spec_with_group
+ def group(value = nil)
+ set_or_return(:group, value, {})
end
end
- declare_action_class do
- def d
- 4
- end
+
+ it "Setting group to nil in an action does not emit a warning about it being defined in two places" do
+ expect_recipe {
+ resource_action_spec_set_group_to_nil "hi" do
+ action :set_group_to_nil
+ end
+ }.to emit_no_warnings_or_errors
end
end
- it "the methods are not available on the resource" do
- expect { DeclaresActionClassMethods.new("hi").a }.to raise_error(NameError)
- expect { DeclaresActionClassMethods.new("hi").b }.to raise_error(NameError)
- expect { DeclaresActionClassMethods.new("hi").c }.to raise_error(NameError)
- expect { DeclaresActionClassMethods.new("hi").d }.to raise_error(NameError)
- end
+ context "When a resource has a property with the same name as another resource" do
+ class HasPropertyNamedTemplate < Chef::Resource
+ use_automatic_resource_name
+ property :template
+ action :create do
+ template "x" do
+ "blah"
+ end
+ end
+ end
- it "the methods are available to the action" do
- r = nil
- expect_recipe {
- r = declares_action_class_methods "hi"
- }.to emit_no_warnings_or_errors
- expect(r.x).to eq(10)
+ it "Raises an error when attempting to use a template in the action" do
+ expect_converge {
+ has_property_named_template "hi"
+ }.to raise_error(/Property template of has_property_named_template\[hi\] cannot be passed a block! If you meant to create a resource named template instead, you'll need to first rename the property./)
+ end
end
- context "And a subclass also creates a method" do
- class DeclaresActionClassMethodsToo < DeclaresActionClassMethods
+ context "When a resource declares methods in action_class and declare_action_class" do
+ class DeclaresActionClassMethods < Chef::Resource
use_automatic_resource_name
+ property :x
action :create do
- new_resource.x a+b+c+d+e
+ new_resource.x = a + b + c + d
end
action_class do
- def e
- 5
+ def a
+ 1
+ end
+ end
+ declare_action_class do
+ def b
+ 2
+ end
+ end
+ action_class do
+ def c
+ 3
+ end
+ end
+ declare_action_class do
+ def d
+ 4
end
end
end
@@ -544,18 +524,46 @@ describe "Resource.action" do
expect { DeclaresActionClassMethods.new("hi").b }.to raise_error(NameError)
expect { DeclaresActionClassMethods.new("hi").c }.to raise_error(NameError)
expect { DeclaresActionClassMethods.new("hi").d }.to raise_error(NameError)
- expect { DeclaresActionClassMethods.new("hi").e }.to raise_error(NameError)
end
it "the methods are available to the action" do
r = nil
expect_recipe {
- r = declares_action_class_methods_too "hi"
+ r = declares_action_class_methods "hi"
}.to emit_no_warnings_or_errors
- expect(r.x).to eq(15)
+ expect(r.x).to eq(10)
+ end
+
+ context "And a subclass also creates a method" do
+ class DeclaresActionClassMethodsToo < DeclaresActionClassMethods
+ use_automatic_resource_name
+ action :create do
+ new_resource.x a + b + c + d + e
+ end
+ action_class do
+ def e
+ 5
+ end
+ end
+ end
+
+ it "the methods are not available on the resource" do
+ expect { DeclaresActionClassMethods.new("hi").a }.to raise_error(NameError)
+ expect { DeclaresActionClassMethods.new("hi").b }.to raise_error(NameError)
+ expect { DeclaresActionClassMethods.new("hi").c }.to raise_error(NameError)
+ expect { DeclaresActionClassMethods.new("hi").d }.to raise_error(NameError)
+ expect { DeclaresActionClassMethods.new("hi").e }.to raise_error(NameError)
+ end
+
+ it "the methods are available to the action" do
+ r = nil
+ expect_recipe {
+ r = declares_action_class_methods_too "hi"
+ }.to emit_no_warnings_or_errors
+ expect(r.x).to eq(15)
+ end
end
end
end
-end
end
diff --git a/spec/integration/recipes/resource_converge_if_changed_spec.rb b/spec/integration/recipes/resource_converge_if_changed_spec.rb
index 2bcccd9831..f1ea79daf9 100644
--- a/spec/integration/recipes/resource_converge_if_changed_spec.rb
+++ b/spec/integration/recipes/resource_converge_if_changed_spec.rb
@@ -22,6 +22,7 @@ describe "Resource::ActionClass#converge_if_changed" do
let(:resource_class) {
result = Class.new(Chef::Resource) do
def self.to_s; resource_name; end
+
def self.inspect; resource_name.inspect; end
property :identity1, identity: true, default: "default_identity1"
property :control1, desired_state: false, default: "default_control1"
diff --git a/spec/integration/recipes/resource_load_spec.rb b/spec/integration/recipes/resource_load_spec.rb
index 66a36b1431..b48eb2daa5 100644
--- a/spec/integration/recipes/resource_load_spec.rb
+++ b/spec/integration/recipes/resource_load_spec.rb
@@ -21,11 +21,13 @@ describe "Resource.load_current_value" do
let(:resource_class) {
result = Class.new(Chef::Resource) do
def self.to_s; resource_name; end
+
def self.inspect; resource_name.inspect; end
property :x, default: lazy { "default #{Namer.incrementing_value}" }
def self.created_x=(value)
@created = value
end
+
def self.created_x
@created
end
@@ -43,9 +45,9 @@ describe "Resource.load_current_value" do
context "with a resource with load_current_value" do
before :each do
resource_class.load_current_value do
- x "loaded #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name,p| name }.
- select { |name,p| p.is_set?(self) }.
- map { |name,p| "#{name}=#{p.get(self)}" }.
+ x "loaded #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }.
+ select { |name, p| p.is_set?(self) }.
+ map { |name, p| "#{name}=#{p.get(self)}" }.
join(", ") })"
end
end
@@ -170,9 +172,9 @@ describe "Resource.load_current_value" do
context "And a child resource class with load_current_value" do
before {
subresource_class.load_current_value do
- y "loaded_y #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name,p| name }.
- select { |name,p| p.is_set?(self) }.
- map { |name,p| "#{name}=#{p.get(self)}" }.
+ y "loaded_y #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }.
+ select { |name, p| p.is_set?(self) }.
+ map { |name, p| "#{name}=#{p.get(self)}" }.
join(", ") })"
end
}
@@ -188,9 +190,9 @@ describe "Resource.load_current_value" do
before {
subresource_class.load_current_value do
super()
- y "loaded_y #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name,p| name }.
- select { |name,p| p.is_set?(self) }.
- map { |name,p| "#{name}=#{p.get(self)}" }.
+ y "loaded_y #{Namer.incrementing_value} (#{self.class.properties.sort_by { |name, p| name }.
+ select { |name, p| p.is_set?(self) }.
+ map { |name, p| "#{name}=#{p.get(self)}" }.
join(", ") })"
end
}