Merge pull request #2 from hkenney/PUP-3086_add-basic-spec-tests
(PDOC-5) Add basic unit testing
This commit is contained in:
commit
39f4ca1d09
7
Gemfile
7
Gemfile
|
@ -1,11 +1,16 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
gem 'yard'
|
gem 'yard'
|
||||||
|
gem 'puppet', '~> 3.6.2'
|
||||||
gem 'rgen'
|
gem 'rgen'
|
||||||
|
|
||||||
group :test do
|
group :test do
|
||||||
gem 'rspec'
|
gem 'rspec'
|
||||||
gem 'mocha'
|
gem 'mocha'
|
||||||
gem 'puppet'
|
|
||||||
gem 'puppetlabs_spec_helper'
|
gem 'puppetlabs_spec_helper'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
group :development do
|
||||||
|
gem 'pry'
|
||||||
|
gem 'pry-debugger'
|
||||||
|
end
|
||||||
|
|
|
@ -12,8 +12,8 @@ Puppet::Face.define(:yardoc, '0.0.1') do
|
||||||
raise RuntimeError, "The 'rgen' gem must be installed in order to use this face."
|
raise RuntimeError, "The 'rgen' gem must be installed in order to use this face."
|
||||||
end
|
end
|
||||||
|
|
||||||
if RUBY_VERSION < '1.9' && !Puppet.features.require_relative?
|
if RUBY_VERSION.match(/^1\.8/)
|
||||||
raise RuntimeError, "The 'backports' gem must be installed in order to use this face under Ruby 1.8.7."
|
raise RuntimeError, "This face requires Ruby 1.9 or greater."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
require 'spec_helper'
|
|
||||||
describe 'puppet_yardoc' do
|
|
||||||
|
|
||||||
context 'with defaults for all parameters' do
|
|
||||||
it { should contain_class('puppet_yardoc') }
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -4,14 +4,19 @@ $LOAD_PATH.unshift File.join(dir, 'lib')
|
||||||
require 'mocha'
|
require 'mocha'
|
||||||
require 'puppet'
|
require 'puppet'
|
||||||
require 'rspec'
|
require 'rspec'
|
||||||
require 'spec/autorun'
|
|
||||||
|
|
||||||
Spec::Runner.configure do |config|
|
# This is neeeded so we can access a Registry if YARD creates one
|
||||||
|
require 'puppetx/yardoc/yard/plugin'
|
||||||
|
include YARD
|
||||||
|
|
||||||
|
RSpec.configure do |config|
|
||||||
config.mock_with :mocha
|
config.mock_with :mocha
|
||||||
end
|
end
|
||||||
|
|
||||||
# We need this because the RAL uses 'should' as a method. This
|
# Borrowed from YARD spec helper
|
||||||
# allows us the same behaviour but with a different method name.
|
def parse_file(file, thisfile = __FILE__, log_level = log.level, ext = '.pp')
|
||||||
class Object
|
Registry.clear
|
||||||
alias :must :should
|
path = File.join(File.dirname(thisfile), 'examples', file.to_s + ext)
|
||||||
|
YARD::Parser::SourceParser.parse(path, [], log_level)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
name 'username-test'
|
||||||
|
version '0.1.0'
|
||||||
|
source ''
|
||||||
|
author 'username'
|
||||||
|
license 'Apache 2.0'
|
||||||
|
summary ''
|
||||||
|
description ''
|
||||||
|
project_page ''
|
||||||
|
|
||||||
|
dependency 'puppetlabs/stdlib'
|
|
@ -0,0 +1,12 @@
|
||||||
|
class test (
|
||||||
|
$package_name = $test::params::package_name,
|
||||||
|
$service_name = $test::params::service_name,
|
||||||
|
) inherits test::params {
|
||||||
|
|
||||||
|
# validate parameters here
|
||||||
|
|
||||||
|
class { 'test::install': } ->
|
||||||
|
class { 'test::config': } ~>
|
||||||
|
class { 'test::service': } ->
|
||||||
|
Class['test']
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'puppet/face/yardoc'
|
||||||
|
|
||||||
|
describe Puppet::Face do
|
||||||
|
|
||||||
|
describe "YARDoc action" do
|
||||||
|
it "should raise an error if yard is absent" do
|
||||||
|
Puppet.features.stubs(:yard?).returns(false)
|
||||||
|
expect{Puppet::Face[:yardoc, :current].yardoc}.to raise_error(RuntimeError, "The 'yard' gem must be installed in order to use this face.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise an error if rgen is absent" do
|
||||||
|
Puppet.features.stubs(:rgen?).returns(false)
|
||||||
|
expect{Puppet::Face[:yardoc, :current].yardoc}.to raise_error(RuntimeError, "The 'rgen' gem must be installed in order to use this face.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise an error if the Ruby verion is less than 1.9", :if => RUBY_VERSION.match(/^1\.8/) do
|
||||||
|
expect{Puppet::Face[:yardoc, :current].yardoc}.to raise_error(RuntimeError, "This face requires Ruby 1.9 or greater.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should invoke Yardoc with MODULE_SOURCEFILES if no arguments are provided" do
|
||||||
|
YARD::CLI::Yardoc.expects(:run).with('manifests/**/*.pp', 'lib/**/*.rb')
|
||||||
|
Puppet::Face[:yardoc, :current].yardoc
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should invoke Yardoc with provided arguments" do
|
||||||
|
YARD::CLI::Yardoc.expects(:run).with('--debug', 'some_file.rb')
|
||||||
|
Puppet::Face[:yardoc, :current].yardoc('--debug', 'some_file.rb')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "modules action" do
|
||||||
|
it "should raise an error if yard is absent" do
|
||||||
|
Puppet.features.stubs(:yard?).returns(false)
|
||||||
|
expect{Puppet::Face[:yardoc, :current].modules}.to raise_error(RuntimeError, "The 'yard' gem must be installed in order to use this face.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise an error if rgen is absent" do
|
||||||
|
Puppet.features.stubs(:rgen?).returns(false)
|
||||||
|
expect{Puppet::Face[:yardoc, :current].modules}.to raise_error(RuntimeError, "The 'rgen' gem must be installed in order to use this face.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise an error if the Ruby version is less than 1.9", :if => RUBY_VERSION.match(/^1\.8/) do
|
||||||
|
expect{Puppet::Face[:yardoc, :current].modules}.to raise_error(RuntimeError, "This face requires Ruby 1.9 or greater.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "server action" do
|
||||||
|
it "should raise an error if yard is absent" do
|
||||||
|
Puppet.features.stubs(:yard?).returns(false)
|
||||||
|
expect{Puppet::Face[:yardoc, :current].server}.to raise_error(RuntimeError, "The 'yard' gem must be installed in order to use this face.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise an error if rgen is absent" do
|
||||||
|
Puppet.features.stubs(:rgen?).returns(false)
|
||||||
|
expect{Puppet::Face[:yardoc, :current].server}.to raise_error(RuntimeError, "The 'rgen' gem must be installed in order to use this face.")
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should raise an error if the Ruby version is less than 1.9", :if => RUBY_VERSION.match(/^1\.8/) do
|
||||||
|
expect{Puppet::Face[:yardoc, :current].server}.to raise_error(RuntimeError, "This face requires Ruby 1.9 or greater.")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,38 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'puppetx/yardoc/pops/yard_statement'
|
||||||
|
|
||||||
|
describe Puppetx::Yardoc::Pops do
|
||||||
|
let(:parser) {Puppet::Pops::Parser::Parser.new()}
|
||||||
|
|
||||||
|
describe "YARDstatement class" do
|
||||||
|
let(:manifest) {"#hello world\nclass foo { }"}
|
||||||
|
let(:model) {parser.parse_string(manifest).current.definitions.first}
|
||||||
|
let(:test_statement) {Puppetx::Yardoc::Pops::YARDStatement.new(model)}
|
||||||
|
|
||||||
|
describe "when creating a new instance of YARDStatement" do
|
||||||
|
it "should extract comments from the source code" do
|
||||||
|
expect(test_statement.comments).to match(/^#hello world/)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "YARDTransfomer class" do
|
||||||
|
let(:manifest) {"#hello world\nclass foo($bar) { }"}
|
||||||
|
let(:manifest_default) {"#hello world\nclass foo($bar = 3) { }"}
|
||||||
|
let(:transformer) {Puppetx::Yardoc::Pops::YARDTransformer.new}
|
||||||
|
|
||||||
|
describe "transform method" do
|
||||||
|
it "should perform the correct transformation with parameter defaults" do
|
||||||
|
model = parser.parse_string(manifest_default).current.definitions.first
|
||||||
|
statements = transformer.transform(model)
|
||||||
|
expect(statements.parameters[0][0].class).to be(Puppetx::Yardoc::Pops::YARDStatement)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should perform the correct transofmration without parameter defaults" do
|
||||||
|
model = parser.parse_string(manifest).current.definitions.first
|
||||||
|
statements = transformer.transform(model)
|
||||||
|
expect(statements.parameters[0][1].class).to be(NilClass)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
class foo::bar {
|
||||||
|
file { '/test/file/path':
|
||||||
|
owner => 'baz',
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
define wibbly::wobbly ($wimey) {
|
||||||
|
Notify ($wimey)
|
||||||
|
}
|
||||||
|
|
||||||
|
wibbly::wobbly{
|
||||||
|
'timey': wimey => stuff
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
require 'puppet'
|
||||||
|
|
||||||
|
module Puppet::Parser::Functions
|
||||||
|
newfunction(:puppet3_function, :type => rvalue) do |args|
|
||||||
|
puts 'Hello World!'
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
require 'puppet'
|
||||||
|
|
||||||
|
Puppet::Functions.create_function(:puppet4_function) do
|
||||||
|
def puppet4_function(x,y)
|
||||||
|
x >= y ? x : y
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,58 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'puppetx/yardoc/yard/handlers'
|
||||||
|
|
||||||
|
describe Puppetx::Yardoc::YARD::Handlers do
|
||||||
|
describe "DefinedTypeHanlder" do
|
||||||
|
it "should add a defined type object in the Registry" do
|
||||||
|
parse_file :defined_type, __FILE__, log.level, '.pp'
|
||||||
|
obj = Registry.at("wibbly::wobbly")
|
||||||
|
expect(obj.type).to be(:definedtype)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "FutureParserDispatchHandler" do
|
||||||
|
before(:each) {parse_file :puppet4_function, __FILE__, log.level, '.rb'}
|
||||||
|
|
||||||
|
it "should add a puppet namespace object to the Registry" do
|
||||||
|
namespace = Registry.at("FutureParserFunctions")
|
||||||
|
expect(namespace.type).to be(:puppetnamespace)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should add a future parser function object to the Registry" do
|
||||||
|
function = Registry.at("FutureParserFunctions#puppet4_function")
|
||||||
|
expect(function.type).to be(:method)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should add a method object to the Registry" do
|
||||||
|
method = Registry.at("#puppet4_function")
|
||||||
|
expect(method.type).to be(:method)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "ParserFunctionHanlder" do
|
||||||
|
before(:each) {parse_file :puppet3_function, __FILE__, log.level, '.rb'}
|
||||||
|
|
||||||
|
it "should add a module object to the Registry" do
|
||||||
|
puppet_module = Registry.at("Puppet::Parser::Functions")
|
||||||
|
expect(puppet_module.type).to be(:module)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should add a puppet namespace object to the Registry" do
|
||||||
|
namespace = Registry.at("ParserFunctions")
|
||||||
|
expect(namespace.type).to be(:puppetnamespace)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should add a method object to the Registry" do
|
||||||
|
method = Registry.at("ParserFunctions#puppet3_function")
|
||||||
|
expect(method.type).to be(:method)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "HostClassDefintion" do
|
||||||
|
before(:each) {parse_file :class, __FILE__, log.level, '.pp'}
|
||||||
|
it "should add a host class object to the Registry" do
|
||||||
|
hostclass = Registry.at("foo::bar")
|
||||||
|
expect(hostclass.type).to be(:hostclass)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue