summaryrefslogtreecommitdiffstats
path: root/spec/unit/application/puppetdoc.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/application/puppetdoc.rb')
-rwxr-xr-xspec/unit/application/puppetdoc.rb343
1 files changed, 343 insertions, 0 deletions
diff --git a/spec/unit/application/puppetdoc.rb b/spec/unit/application/puppetdoc.rb
new file mode 100755
index 000000000..fcb000e0a
--- /dev/null
+++ b/spec/unit/application/puppetdoc.rb
@@ -0,0 +1,343 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+require 'puppet/application/puppetdoc'
+
+describe "puppetdoc" do
+ before :each do
+ @puppetdoc = Puppet::Application[:puppetdoc]
+ @puppetdoc.stubs(:puts)
+ @puppetdoc.run_preinit
+ end
+
+ it "should ask Puppet::Application to not parse Puppet configuration file" do
+ @puppetdoc.should_parse_config?.should be_false
+ end
+
+ it "should declare a other command" do
+ @puppetdoc.should respond_to(:other)
+ end
+
+ it "should declare a rdoc command" do
+ @puppetdoc.should respond_to(:rdoc)
+ end
+
+ it "should declare a trac command" do
+ @puppetdoc.should respond_to(:trac)
+ end
+
+ it "should declare a fallback for unknown options" do
+ @puppetdoc.should respond_to(:handle_unknown)
+ end
+
+ it "should declare a preinit block" do
+ @puppetdoc.should respond_to(:run_preinit)
+ end
+
+ describe "in preinit" do
+ it "should set references to []" do
+ @puppetdoc.run_preinit
+
+ @puppetdoc.options[:references].should == []
+ end
+
+ it "should init mode to text" do
+ @puppetdoc.run_preinit
+
+ @puppetdoc.options[:mode].should == :text
+ end
+
+ it "should init format to to_rest" do
+ @puppetdoc.run_preinit
+
+ @puppetdoc.options[:format].should == :to_rest
+ end
+ end
+
+ describe "when handling options" do
+ [:all, :outputdir, :verbose, :debug].each do |option|
+ it "should declare handle_#{option} method" do
+ @puppetdoc.should respond_to("handle_#{option}".to_sym)
+ end
+
+ it "should store argument value when calling handle_#{option}" do
+ @puppetdoc.options.expects(:[]=).with(option, 'arg')
+ @puppetdoc.send("handle_#{option}".to_sym, 'arg')
+ end
+ end
+
+ it "should store the format if valid" do
+ Puppet::Util::Reference.stubs(:method_defined?).with('to_format').returns(true)
+
+ @puppetdoc.options.expects(:[]=).with(:format, 'to_format')
+
+ @puppetdoc.handle_format('format')
+ end
+
+ it "should raise an error if the format is not valid" do
+ Puppet::Util::Reference.stubs(:method_defined?).with('to_format').returns(false)
+ lambda { @puppetdoc.handle_format('format') }
+ end
+
+ it "should store the mode if valid" do
+ Puppet::Util::Reference.stubs(:modes).returns(stub 'mode', :include? => true)
+
+ @puppetdoc.options.expects(:[]=).with(:mode, :mode)
+
+ @puppetdoc.handle_mode('mode')
+ end
+
+ it "should store the mode if :rdoc" do
+ Puppet::Util::Reference.modes.stubs(:include?).with('rdoc').returns(false)
+
+ @puppetdoc.options.expects(:[]=).with(:mode, :rdoc)
+
+ @puppetdoc.handle_mode('rdoc')
+ end
+
+ it "should raise an error if the mode is not valid" do
+ Puppet::Util::Reference.modes.stubs(:include?).with('unknown').returns(false)
+ lambda { @puppetdoc.handle_mode('unknown') }
+ end
+
+ it "should list all references on list and exit" do
+ reference = stubs 'reference'
+ ref = stubs 'ref'
+ Puppet::Util::Reference.stubs(:references).returns([reference])
+
+ Puppet::Util::Reference.expects(:reference).with(reference).returns(ref)
+ ref.expects(:doc)
+ @puppetdoc.expects(:exit)
+
+ @puppetdoc.handle_list(nil)
+ end
+
+ it "should add reference to references list with --reference" do
+ @puppetdoc.options[:references] = [:ref1]
+
+ @puppetdoc.handle_reference('ref2')
+
+ @puppetdoc.options[:references].should == [:ref1,:ref2]
+ end
+ end
+
+ describe "during setup" do
+
+ before :each do
+ Puppet::Log.stubs(:newdestination)
+ ARGV.stubs(:size).returns(0)
+ end
+
+ it "should default to rdoc mode if there are command line arguments" do
+ ARGV.stubs(:size).returns(1)
+ @puppetdoc.stubs(:setup_rdoc)
+
+ @puppetdoc.options.expects(:[]=).with(:mode,:rdoc)
+
+ @puppetdoc.run_setup
+ end
+
+ it "should call setup_rdoc in rdoc mode" do
+ @puppetdoc.options.stubs(:[]).with(:mode).returns(:rdoc)
+
+ @puppetdoc.expects(:setup_rdoc)
+
+ @puppetdoc.run_setup
+ end
+
+ it "should call setup_reference if not rdoc" do
+ @puppetdoc.options.stubs(:[]).with(:mode).returns(:test)
+
+ @puppetdoc.expects(:setup_reference)
+
+ @puppetdoc.run_setup
+ end
+
+ describe "in non-rdoc mode" do
+
+ it "should get all non-dynamic reference if --all" do
+ @puppetdoc.options.stubs(:[]).with(:all).returns(true)
+ @puppetdoc.options.stubs(:[]).with(:references).returns([])
+ static = stub 'static', :dynamic? => false
+ dynamic = stub 'dynamic', :dynamic? => true
+ Reference.stubs(:reference).with(:static).returns(static)
+ Reference.stubs(:reference).with(:dynamic).returns(dynamic)
+ Reference.stubs(:references).returns([:static,:dynamic])
+
+ @puppetdoc.options.stubs(:[]=).with(:references, [:static])
+
+ @puppetdoc.setup_reference
+ end
+
+ it "should default to :type if no references" do
+ @puppetdoc.options.stubs(:[]).with(:all).returns(false)
+ array = stub 'array', :empty? => true
+ @puppetdoc.options.stubs(:[]).with(:references).returns(array)
+
+ array.expects(:<<).with(:type)
+
+ @puppetdoc.setup_reference
+ end
+
+ end
+
+ describe "in rdoc mode" do
+
+ before :each do
+ @puppetdoc.options.stubs(:[]).returns(false)
+ Puppet.stubs(:[]=).with(:name, "puppetmasterd")
+ Puppet.stubs(:parse_config)
+ Puppet::Util::Log.stubs(:level=)
+ Puppet::Util::Log.stubs(:newdestination)
+ end
+
+ describe "when there are unknown args" do
+
+ it "should expand --modulepath if any" do
+ @puppetdoc.unknown_args = [ { :opt => "--modulepath", :arg => "path" } ]
+ Puppet.settings.stubs(:handlearg)
+
+ File.expects(:expand_path).with("path")
+
+ @puppetdoc.setup_rdoc
+ end
+
+ it "should expand --manifestdir if any" do
+ @puppetdoc.unknown_args = [ { :opt => "--manifestdir", :arg => "path" } ]
+ Puppet.settings.stubs(:handlearg)
+
+ File.expects(:expand_path).with("path")
+
+ @puppetdoc.setup_rdoc
+ end
+
+ it "should give them to Puppet.settings" do
+ @puppetdoc.unknown_args = [ { :opt => :option, :arg => :argument } ]
+ Puppet.settings.expects(:handlearg).with(:option,:argument)
+
+ @puppetdoc.setup_rdoc
+ end
+ end
+
+ it "should pretend to be puppetmasterd" do
+ Puppet.expects(:[]=).with(:name, "puppetmasterd")
+
+ @puppetdoc.setup_rdoc
+ end
+
+ it "should parse puppet configuration" do
+ Puppet.expects(:parse_config)
+
+ @puppetdoc.setup_rdoc
+ end
+
+ it "should set log level to debug if --debug" do
+ @puppetdoc.options.stubs(:[]).with(:debug).returns(true)
+ Puppet::Util::Log.expects(:level=).with(:debug)
+
+ @puppetdoc.setup_rdoc
+ end
+
+ it "should set log level to info if --verbose" do
+ @puppetdoc.options.stubs(:[]).with(:verbose).returns(true)
+ Puppet::Util::Log.expects(:level=).with(:info)
+
+ @puppetdoc.setup_rdoc
+ end
+
+ it "should set log destination to console if --verbose" do
+ @puppetdoc.options.stubs(:[]).with(:verbose).returns(true)
+
+ Puppet::Util::Log.expects(:newdestination).with(:console)
+
+ @puppetdoc.setup_rdoc
+ end
+
+ it "should set log destination to console if --debug" do
+ @puppetdoc.options.stubs(:[]).with(:debug).returns(true)
+
+ Puppet::Util::Log.expects(:newdestination).with(:console)
+
+ @puppetdoc.setup_rdoc
+ end
+
+ end
+
+ end
+
+ describe "when running" do
+ before :each do
+ end
+
+ describe "in trac mode" do
+ it "should call trac for each reference" do
+ ref = stub 'ref'
+ Puppet::Util::Reference.stubs(:reference).with(:ref).returns(ref)
+ @puppetdoc.options.stubs(:[]).with(:references).returns([:ref])
+ @puppetdoc.options.stubs(:[]).with(:mode).returns(:trac)
+
+ ref.expects(:trac)
+
+ @puppetdoc.trac
+ end
+ end
+
+ describe "in rdoc mode" do
+ before :each do
+ @puppetdoc.manifest = false
+ Puppet.stubs(:info)
+ Puppet.stubs(:[]).with(:trace).returns(false)
+ Puppet.stubs(:[]).with(:modulepath).returns('modules')
+ Puppet.stubs(:[]).with(:manifestdir).returns('manifests')
+ @puppetdoc.options.stubs(:[]).with(:all).returns(false)
+ @puppetdoc.options.stubs(:[]).with(:outputdir).returns('doc')
+ Puppet.settings.stubs(:[]=).with(:document_all, false)
+ Puppet.settings.stubs(:setdefaults)
+ Puppet::Util::RDoc.stubs(:rdoc)
+ @puppetdoc.stubs(:exit)
+ File.stubs(:expand_path).with('modules').returns('modules')
+ File.stubs(:expand_path).with('manifests').returns('manifests')
+ @old = ARGV.dup
+ ARGV.clear
+ end
+
+ after :each do
+ ARGV << @old
+ end
+
+ it "should set document_all on --all" do
+ @puppetdoc.options.expects(:[]).with(:all).returns(true)
+ Puppet.settings.expects(:[]=).with(:document_all, true)
+
+ @puppetdoc.rdoc
+ end
+
+ it "should call Puppet::Util::RDoc.rdoc in full mode" do
+ Puppet::Util::RDoc.expects(:rdoc).with('doc', ['modules','manifests'])
+ @puppetdoc.rdoc
+ end
+
+ it "should call Puppet::Util::RDoc.manifestdoc in manifest mode" do
+ @puppetdoc.manifest = true
+ Puppet::Util::RDoc.expects(:manifestdoc)
+ @puppetdoc.rdoc
+ end
+ end
+
+ describe "in the other modes" do
+ it "should get reference in given format" do
+ reference = stub 'reference'
+ @puppetdoc.options.stubs(:[]).with(:mode).returns(:none)
+ @puppetdoc.options.stubs(:[]).with(:references).returns([:ref])
+ Puppet::Util::Reference.expects(:reference).with(:ref).returns(reference)
+ @puppetdoc.options.stubs(:[]).with(:format).returns(:format)
+ @puppetdoc.stubs(:exit)
+
+ reference.expects(:send).with { |format,contents| format == :format }.returns('doc')
+ @puppetdoc.other
+ end
+ end
+
+ end
+end \ No newline at end of file