From 20b6c24186b6dd9d3d81524499b80f26b1c6c8eb Mon Sep 17 00:00:00 2001 From: Jeff McCune Date: Fri, 3 Jun 2011 11:41:20 -0700 Subject: Add spec test for validate_bool function This is an interesting spec test for module developers. It illustrates how to cause Puppet to test the function from the Puppet DSL rather than the Ruby DSL, fully exercising the system from the perspective of the end user. (Note how Puppet[:code] is set, then the scope reset, then the compile method called.) Paired-with: Dan Bode --- .../puppet/parser/functions/validate_bool_spec.rb | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 spec/unit/puppet/parser/functions/validate_bool_spec.rb (limited to 'spec/unit/puppet/parser') diff --git a/spec/unit/puppet/parser/functions/validate_bool_spec.rb b/spec/unit/puppet/parser/functions/validate_bool_spec.rb new file mode 100644 index 0000000..19ecf23 --- /dev/null +++ b/spec/unit/puppet/parser/functions/validate_bool_spec.rb @@ -0,0 +1,68 @@ +require 'puppet' + +# We don't need this for the basic tests we're doing +# require 'spec_helper' + +# Dan mentioned that Nick recommended the function method call +# to return the string value for the test description. +# this will not even try the test if the function cannot be +# loaded. +describe Puppet::Parser::Functions.function(:validate_bool) do + + # Pulled from Dan's create_resources function + def get_scope + @topscope = Puppet::Parser::Scope.new + # This is necessary so we don't try to use the compiler to discover our parent. + @topscope.parent = nil + @scope = Puppet::Parser::Scope.new + @scope.compiler = Puppet::Parser::Compiler.new(Puppet::Node.new("floppy", :environment => 'production')) + @scope.parent = @topscope + @compiler = @scope.compiler + end + + describe 'when calling validate_bool from puppet' do + it "should validate true and false as bare words" do + Puppet[:code] = 'validate_bool(true)' + get_scope + @scope.compiler.compile + end + it "should not compile when false is a string" do + Puppet[:code] = 'validate_bool("false")' + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) + end + it "should not compile when an arbitrary string is passed" do + Puppet[:code] = 'validate_bool("jeff and dan are awesome")' + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) + end + it "should not compile when no arguments are passed" do + Puppet[:code] = 'validate_bool()' + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /wrong number of arguments/) + end + + it "should compile when multiple boolean arguments are passed" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = true + $bar = false + validate_bool($foo, $bar, true, false) + ENDofPUPPETcode + get_scope + @scope.compiler.compile + end + + it "should compile when multiple boolean arguments are passed" do + Puppet[:code] = <<-'ENDofPUPPETcode' + $foo = true + $bar = false + validate_bool($foo, $bar, true, false, 'jeff') + ENDofPUPPETcode + get_scope + expect { @scope.compiler.compile }.should raise_error(Puppet::ParseError, /is not a boolean/) + end + + end + +end + -- cgit v1.2.3