5 require 'puppet_spec/compiler'
7 describe 'ensure_packages' do
8 include PuppetSpec::Compiler
11 Puppet::Parser::Functions.autoloader.loadall
12 Puppet::Parser::Functions.function(:ensure_packages)
13 Puppet::Parser::Functions.function(:ensure_resource)
14 Puppet::Parser::Functions.function(:defined_with_params)
15 Puppet::Parser::Functions.function(:create_resources)
18 let :node do Puppet::Node.new('localhost') end
19 let :compiler do Puppet::Parser::Compiler.new(node) end
21 if Puppet.version.to_f >= 3.0
22 Puppet::Parser::Scope.new(compiler)
24 newscope = Puppet::Parser::Scope.new
25 newscope.compiler = compiler
26 newscope.source = Puppet::Resource::Type.new(:node, :localhost)
31 describe 'argument handling' do
32 it 'fails with no arguments' do
34 scope.function_ensure_packages([])
35 }.to raise_error(Puppet::ParseError, /0 for 1 or 2/)
38 it 'accepts an array of values' do
39 scope.function_ensure_packages([['foo']])
42 it 'accepts a single package name as a string' do
43 scope.function_ensure_packages(['foo'])
47 context 'given a catalog with puppet package => absent' do
49 compile_to_catalog(<<-EOS
50 ensure_packages(['facter'])
51 package { puppet: ensure => absent }
56 it 'has no effect on Package[puppet]' do
57 expect(catalog.resource(:package, 'puppet')['ensure']).to eq('absent')
61 context 'given a clean catalog' do
63 compile_to_catalog('ensure_packages(["facter"])')
66 it 'declares package resources with ensure => present' do
67 expect(catalog.resource(:package, 'facter')['ensure']).to eq('present')
71 context 'given a clean catalog and specified defaults' do
73 compile_to_catalog('ensure_packages(["facter"], {"provider" => "gem"})')
76 it 'declares package resources with ensure => present' do
77 expect(catalog.resource(:package, 'facter')['ensure']).to eq('present')
78 expect(catalog.resource(:package, 'facter')['provider']).to eq('gem')