Update puppetlabs/stdlib module
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / spec / functions / ensure_packages_spec.rb
1 require 'spec_helper'
2
3 describe 'ensure_packages' do
4   it { is_expected.not_to eq(nil) }
5   it { is_expected.to run.with_params.and_raise_error(Puppet::ParseError) }
6   it {
7     pending('should not accept numbers as arguments')
8     is_expected.to run.with_params(1).and_raise_error(Puppet::ParseError)
9   }
10   it {
11     pending('should not accept numbers as arguments')
12     is_expected.to run.with_params(['packagename', 1]).and_raise_error(Puppet::ParseError)
13   }
14   it { is_expected.to run.with_params('packagename') }
15   it { is_expected.to run.with_params(['packagename1', 'packagename2']) }
16
17   context 'when given a catalog with "package { puppet: ensure => absent }"' do
18     let(:pre_condition) { 'package { puppet: ensure => absent }' }
19
20     describe 'after running ensure_package("facter")' do
21       before(:each) { subject.execute('facter') }
22
23       # this lambda is required due to strangeness within rspec-puppet's expectation handling
24       it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('absent') }
25       it { expect(-> { catalogue }).to contain_package('facter').with_ensure('present') }
26     end
27
28     describe 'after running ensure_package("facter", { "provider" => "gem" })' do
29       before(:each) { subject.execute('facter', 'provider' => 'gem') }
30
31       # this lambda is required due to strangeness within rspec-puppet's expectation handling
32       it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('absent').without_provider }
33       it { expect(-> { catalogue }).to contain_package('facter').with_ensure('present').with_provider('gem') }
34     end
35   end
36
37   context 'when given an empty packages array' do
38     let(:pre_condition) { 'notify { "hi": } -> Package <| |>; $somearray = ["vim",""]; ensure_packages($somearray)' }
39
40     describe 'after running ensure_package(["vim", ""])' do
41       it { expect { catalogue }.to raise_error(Puppet::ParseError, %r{Empty String provided}) }
42     end
43   end
44
45   context 'when given hash of packages' do
46     before(:each) do
47       subject.execute({ 'foo' => { 'provider' => 'rpm' }, 'bar' => { 'provider' => 'gem' } }, 'ensure' => 'present')
48       subject.execute('パッケージ' => { 'ensure' => 'absent' })
49       subject.execute('ρǻ¢κầģẻ' => { 'ensure' => 'absent' })
50     end
51
52     # this lambda is required due to strangeness within rspec-puppet's expectation handling
53     it { expect(-> { catalogue }).to contain_package('foo').with('provider' => 'rpm', 'ensure' => 'present') }
54     it { expect(-> { catalogue }).to contain_package('bar').with('provider' => 'gem', 'ensure' => 'present') }
55
56     context 'with UTF8 and double byte characters' do
57       it { expect(-> { catalogue }).to contain_package('パッケージ').with('ensure' => 'absent') }
58       it { expect(-> { catalogue }).to contain_package('ρǻ¢κầģẻ').with('ensure' => 'absent') }
59     end
60   end
61
62   context 'when given a catalog with "package { puppet: ensure => present }"' do
63     let(:pre_condition) { 'package { puppet: ensure => present }' }
64
65     describe 'after running ensure_package("puppet", { "ensure" => "installed" })' do
66       before(:each) { subject.execute('puppet', 'ensure' => 'installed') }
67
68       # this lambda is required due to strangeness within rspec-puppet's expectation handling
69       it { expect(-> { catalogue }).to contain_package('puppet').with_ensure('present') }
70     end
71   end
72 end