-#! /usr/bin/env ruby -S rspec
require 'spec_helper'
-describe Puppet::Parser::Functions.function(:get_module_path) do
- Internals = PuppetlabsSpec::PuppetInternals
+describe 'get_module_path' do
+ it { is_expected.not_to eq(nil) }
+ it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError, %r{Wrong number of arguments, expects one}) }
+ it { is_expected.to run.with_params('one', 'two').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments, expects one}) }
+ it { is_expected.to run.with_params('one', 'two', 'three').and_raise_error(Puppet::ParseError, %r{Wrong number of arguments, expects one}) }
+ it { is_expected.to run.with_params('one').and_raise_error(Puppet::ParseError, %r{Could not find module}) }
+
+ # class Stubmodule
class StubModule
attr_reader :path
def initialize(path)
end
end
- def scope(environment = "production")
- Internals.scope(:compiler => Internals.compiler(:node => Internals.node(:environment => environment)))
- end
-
- it 'should only allow one argument' do
- expect { scope.function_get_module_path([]) }.to raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
- expect { scope.function_get_module_path(['1','2','3']) }.to raise_error(Puppet::ParseError, /Wrong number of arguments, expects one/)
- end
- it 'should raise an exception when the module cannot be found' do
- expect { scope.function_get_module_path(['foo']) }.to raise_error(Puppet::ParseError, /Could not find module/)
- end
describe 'when locating a module' do
- let(:modulepath) { "/tmp/does_not_exist" }
- let(:path_of_module_foo) { StubModule.new("/tmp/does_not_exist/foo") }
-
- before(:each) { Puppet[:modulepath] = modulepath }
+ let(:modulepath) { '/tmp/does_not_exist' }
+ let(:path_of_module_foo) { StubModule.new('/tmp/does_not_exist/foo') }
- it 'should be able to find module paths from the modulepath setting' do
- Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
- expect(scope.function_get_module_path(['foo'])).to eq(path_of_module_foo.path)
+ before(:each) do
+ Puppet[:modulepath] = modulepath
end
- it 'should be able to find module paths when the modulepath is a list' do
- Puppet[:modulepath] = modulepath + ":/tmp"
- Puppet::Module.expects(:find).with('foo', 'production').returns(path_of_module_foo)
- expect(scope.function_get_module_path(['foo'])).to eq(path_of_module_foo.path)
+
+ context 'when in the default environment' do
+ before(:each) do
+ allow(Puppet::Module).to receive(:find).with('foo', 'rp_env').and_return(path_of_module_foo)
+ end
+ it 'runs against foo' do
+ is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
+ end
+
+ it 'when the modulepath is a list' do
+ Puppet[:modulepath] = modulepath + 'tmp/something_else'
+
+ is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
+ end
end
- it 'should respect the environment' do
- skip("Disabled on Puppet 2.6.x") if Puppet.version =~ /^2\.6\b/
- Puppet.settings[:environment] = 'danstestenv'
- Puppet::Module.expects(:find).with('foo', 'danstestenv').returns(path_of_module_foo)
- expect(scope('danstestenv').function_get_module_path(['foo'])).to eq(path_of_module_foo.path)
+
+ context 'when in a non-default default environment' do
+ let(:environment) { 'test' }
+
+ before(:each) do
+ allow(Puppet::Module).to receive(:find).with('foo', 'test').and_return(path_of_module_foo)
+ end
+ it 'runs against foo' do
+ is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
+ end
+
+ it 'when the modulepath is a list' do
+ Puppet[:modulepath] = modulepath + 'tmp/something_else'
+ is_expected.to run.with_params('foo').and_return(path_of_module_foo.path)
+ end
end
end
end