summaryrefslogtreecommitdiff
path: root/spec/unit/puppet
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2011-06-03 11:41:20 -0700
committerJeff McCune <jeff@puppetlabs.com>2011-06-03 11:41:20 -0700
commit20b6c24186b6dd9d3d81524499b80f26b1c6c8eb (patch)
treeace4fe1e49dc7460c2f9623f38ec2ac791cdf576 /spec/unit/puppet
parentb9f1bb6a63c5c06ce5b4e147dbca4ef505f02a25 (diff)
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 <dan@puppetlabs.com>
Diffstat (limited to 'spec/unit/puppet')
-rw-r--r--spec/unit/puppet/parser/functions/validate_bool_spec.rb68
1 files changed, 68 insertions, 0 deletions
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
+