summaryrefslogtreecommitdiffstats
path: root/spec/unit
diff options
context:
space:
mode:
authorPieter van de Bruggen <pieter@puppetlabs.com>2011-04-17 22:23:44 -0700
committerDaniel Pittman <daniel@puppetlabs.com>2011-04-17 22:23:44 -0700
commit9d2ec219bbd77bfca48a72b52fe5d0d3fcc0dcf7 (patch)
tree1b01ad690ce899fb688356ac2deb7eed4f50c302 /spec/unit
parent0d0318f9f0eadff7f9934d3d02a7081bba05164c (diff)
downloadpuppet-9d2ec219bbd77bfca48a72b52fe5d0d3fcc0dcf7.tar.gz
puppet-9d2ec219bbd77bfca48a72b52fe5d0d3fcc0dcf7.tar.xz
puppet-9d2ec219bbd77bfca48a72b52fe5d0d3fcc0dcf7.zip
(#7013) Add support for required options.
This adds another hook into the generated wrapper, which invokes a method to validate arguments. This is used to raise an exception when required options have not been passed to the method. Reviewed-By: Daniel Pittman <daniel@puppetlabs.com>
Diffstat (limited to 'spec/unit')
-rwxr-xr-xspec/unit/interface/action_builder_spec.rb6
-rwxr-xr-xspec/unit/interface/action_manager_spec.rb1
-rwxr-xr-xspec/unit/interface/action_spec.rb27
-rwxr-xr-xspec/unit/interface/option_builder_spec.rb15
4 files changed, 42 insertions, 7 deletions
diff --git a/spec/unit/interface/action_builder_spec.rb b/spec/unit/interface/action_builder_spec.rb
index aecaf198f..50784cc40 100755
--- a/spec/unit/interface/action_builder_spec.rb
+++ b/spec/unit/interface/action_builder_spec.rb
@@ -13,11 +13,7 @@ describe Puppet::Interface::ActionBuilder do
it "should define a method on the face which invokes the action" do
face = Puppet::Interface.new(:action_builder_test_interface, '0.0.1') do
- action :foo do
- when_invoked do
- "invoked the method"
- end
- end
+ action(:foo) { when_invoked { "invoked the method" } }
end
face.foo.should == "invoked the method"
diff --git a/spec/unit/interface/action_manager_spec.rb b/spec/unit/interface/action_manager_spec.rb
index 6a6c254d4..07d517c18 100755
--- a/spec/unit/interface/action_manager_spec.rb
+++ b/spec/unit/interface/action_manager_spec.rb
@@ -105,6 +105,7 @@ describe Puppet::Interface::ActionManager do
include Puppet::Interface::ActionManager
extend Puppet::Interface::ActionManager
def __invoke_decorations(*args) true end
+ def options() [] end
end
@instance = @klass.new
end
diff --git a/spec/unit/interface/action_spec.rb b/spec/unit/interface/action_spec.rb
index 4be6a1c55..fe2409b35 100755
--- a/spec/unit/interface/action_spec.rb
+++ b/spec/unit/interface/action_spec.rb
@@ -66,8 +66,8 @@ describe Puppet::Interface::Action do
let :face do
Puppet::Interface.new(:ruby_api, '1.0.0') do
action :bar do
- when_invoked do |options|
- options
+ when_invoked do |*args|
+ args.last
end
end
end
@@ -82,6 +82,11 @@ describe Puppet::Interface::Action do
options = face.bar(:bar => "beer")
options.should == { :bar => "beer" }
end
+
+ it "should call #validate_args on the action when invoked" do
+ face.get_action(:bar).expects(:validate_args).with([1, :two, 'three', {}])
+ face.bar 1, :two, 'three'
+ end
end
end
@@ -168,6 +173,24 @@ describe Puppet::Interface::Action do
end
}.should raise_error ArgumentError, /Option foo conflicts with existing option foo/i
end
+
+ it "should fail when a required action option is not provided" do
+ face = Puppet::Interface.new(:required_action_option, '0.0.1') do
+ action(:bar) do
+ option('--foo') { required }
+ when_invoked { }
+ end
+ end
+ expect { face.bar }.to raise_error ArgumentError, /missing required options \(foo\)/
+ end
+
+ it "should fail when a required face option is not provided" do
+ face = Puppet::Interface.new(:required_face_option, '0.0.1') do
+ option('--foo') { required }
+ action(:bar) { when_invoked { } }
+ end
+ expect { face.bar }.to raise_error ArgumentError, /missing required options \(foo\)/
+ end
end
context "with action decorators" do
diff --git a/spec/unit/interface/option_builder_spec.rb b/spec/unit/interface/option_builder_spec.rb
index b32b316f6..e9346852c 100755
--- a/spec/unit/interface/option_builder_spec.rb
+++ b/spec/unit/interface/option_builder_spec.rb
@@ -56,5 +56,20 @@ describe Puppet::Interface::OptionBuilder do
end
end.to raise_error ArgumentError, /takes three arguments/
end
+
+ it "should support simple required declarations" do
+ opt = Puppet::Interface::OptionBuilder.build(face, "--foo") do
+ required
+ end
+ opt.should be_required
+ end
+
+ it "should support arguments to the required property" do
+ opt = Puppet::Interface::OptionBuilder.build(face, "--foo") do
+ required(false)
+ end
+ opt.should_not be_required
+ end
+
end
end