diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2016-03-15 15:09:45 -0700 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2016-03-15 15:09:45 -0700 |
commit | d32484b767e11d4da48fd1c185315fe08b25fdbe (patch) | |
tree | 95f33d862ff59b6704f506279ec72854fad956c7 /spec/unit/lwrp_spec.rb | |
parent | c1a389c2a8452e9b796aa1d34c4d9e51f4af30c7 (diff) | |
download | chef-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.rb | 58 |
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 |