summaryrefslogtreecommitdiff
path: root/spec/unit/lwrp_spec.rb
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2016-03-15 15:09:45 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2016-03-15 15:09:45 -0700
commitd32484b767e11d4da48fd1c185315fe08b25fdbe (patch)
tree95f33d862ff59b6704f506279ec72854fad956c7 /spec/unit/lwrp_spec.rb
parentc1a389c2a8452e9b796aa1d34c4d9e51f4af30c7 (diff)
downloadchef-d32484b767e11d4da48fd1c185315fe08b25fdbe.tar.gz
lazy module inclusion into DSL moduleslcg/use-and-lazy-module-include
Chef::DSL::Recipe::FullDSL.send(:include, MyModule) will now patch all its descendants that it has been included into (works the way actual inheritance works now).
Diffstat (limited to 'spec/unit/lwrp_spec.rb')
-rw-r--r--spec/unit/lwrp_spec.rb58
1 files changed, 58 insertions, 0 deletions
diff --git a/spec/unit/lwrp_spec.rb b/spec/unit/lwrp_spec.rb
index 5afd838551..937915055e 100644
--- a/spec/unit/lwrp_spec.rb
+++ b/spec/unit/lwrp_spec.rb
@@ -717,4 +717,62 @@ describe "LWRP" do
end
end
end
+
+ describe "extending the DSL mixin" do
+ module MyAwesomeDSLExensionClass
+ def my_awesome_dsl_extension(argument)
+ argument
+ end
+ end
+
+ class MyAwesomeResource < Chef::Resource::LWRPBase
+ provides :my_awesome_resource
+ resource_name :my_awesome_resource
+ default_action :create
+ end
+
+ class MyAwesomeProvider < Chef::Provider::LWRPBase
+ use_inline_resources
+
+ provides :my_awesome_resource
+
+ action :create do
+ my_awesome_dsl_extension("foo")
+ end
+ end
+
+ let(:recipe) {
+ cookbook_repo = File.expand_path(File.join(File.dirname(__FILE__), "..", "data", "cookbooks"))
+ cookbook_loader = Chef::CookbookLoader.new(cookbook_repo)
+ cookbook_loader.load_cookbooks
+ cookbook_collection = Chef::CookbookCollection.new(cookbook_loader)
+ node = Chef::Node.new
+ events = Chef::EventDispatch::Dispatcher.new
+ run_context = Chef::RunContext.new(node, cookbook_collection, events)
+ Chef::Recipe.new("hjk", "test", run_context)
+ }
+
+ it "lets you extend the recipe DSL" do
+ expect(Chef::Recipe).to receive(:include).with(MyAwesomeDSLExensionClass)
+ expect(Chef::Provider::InlineResources).to receive(:include).with(MyAwesomeDSLExensionClass)
+ Chef::DSL::Recipe::FullDSL.send(:include, MyAwesomeDSLExensionClass)
+ end
+
+ it "lets you call your DSL from a recipe" do
+ Chef::DSL::Recipe::FullDSL.send(:include, MyAwesomeDSLExensionClass)
+ expect(recipe.my_awesome_dsl_extension("foo")).to eql("foo")
+ end
+
+ it "lets you call your DSL from a provider" do
+ Chef::DSL::Recipe::FullDSL.send(:include, MyAwesomeDSLExensionClass)
+
+ resource = MyAwesomeResource.new("name", run_context)
+ run_context.resource_collection << resource
+
+ runner = Chef::Runner.new(run_context)
+ expect_any_instance_of(MyAwesomeProvider).to receive(:my_awesome_dsl_extension).and_call_original
+ runner.converge
+ end
+ end
+
end