]> git.donarmstrong.com Git - dsa-puppet.git/blob - 3rdparty/modules/stdlib/spec/functions/ensure_resource_spec.rb
upgrade to stdlib 4.6.1
[dsa-puppet.git] / 3rdparty / modules / stdlib / spec / functions / ensure_resource_spec.rb
1 #! /usr/bin/env ruby -S rspec
2 require 'spec_helper'
3 require 'rspec-puppet'
4 require 'puppet_spec/compiler'
5
6 describe 'ensure_resource' do
7   include PuppetSpec::Compiler
8
9   before :all do
10     Puppet::Parser::Functions.autoloader.loadall
11     Puppet::Parser::Functions.function(:ensure_packages)
12   end
13
14   let :node     do Puppet::Node.new('localhost') end
15   let :compiler do Puppet::Parser::Compiler.new(node) end
16   let :scope    do Puppet::Parser::Scope.new(compiler) end
17
18   describe 'when a type or title is not specified' do
19     it { expect { scope.function_ensure_resource([]) }.to raise_error }
20     it { expect { scope.function_ensure_resource(['type']) }.to raise_error }
21   end
22
23   describe 'when compared against a resource with no attributes' do
24     let :catalog do
25       compile_to_catalog(<<-EOS
26         user { "dan": }
27         ensure_resource('user', 'dan', {})
28       EOS
29       )
30     end
31
32     it 'should contain the the ensured resources' do
33       expect(catalog.resource(:user, 'dan').to_s).to eq('User[dan]')
34     end
35   end
36
37   describe 'works when compared against a resource with non-conflicting attributes' do
38     [
39       "ensure_resource('User', 'dan', {})",
40       "ensure_resource('User', 'dan', '')",
41       "ensure_resource('User', 'dan', {'ensure' => 'present'})",
42       "ensure_resource('User', 'dan', {'ensure' => 'present', 'managehome' => false})"
43     ].each do |ensure_resource|
44       pp = <<-EOS
45         user { "dan": ensure => present, shell => "/bin/csh", managehome => false}
46         #{ensure_resource}
47       EOS
48
49       it { expect { compile_to_catalog(pp) }.to_not raise_error }
50     end
51   end
52
53   describe 'fails when compared against a resource with conflicting attributes' do
54     pp = <<-EOS
55       user { "dan": ensure => present, shell => "/bin/csh", managehome => false}
56       ensure_resource('User', 'dan', {'ensure' => 'absent', 'managehome' => false})
57     EOS
58
59     it { expect { compile_to_catalog(pp) }.to raise_error }
60   end
61
62   describe 'when an array of new resources are passed in' do
63     let :catalog do
64       compile_to_catalog("ensure_resource('User', ['dan', 'alex'], {})")
65     end
66
67     it 'should contain the ensured resources' do
68       expect(catalog.resource('User[dan]').to_s).to eq('User[dan]')
69       expect(catalog.resource('User[alex]').to_s).to eq('User[alex]')
70     end
71   end
72
73   describe 'when an array of existing resources is compared against existing resources' do
74     pp = <<-EOS
75       user { 'dan': ensure => present; 'alex': ensure => present }
76       ensure_resource('User', ['dan', 'alex'], {})
77     EOS
78
79     let :catalog do
80       compile_to_catalog(pp)
81     end
82
83     it 'should return the existing resources' do
84       expect(catalog.resource('User[dan]').to_s).to eq('User[dan]')
85       expect(catalog.resource('User[alex]').to_s).to eq('User[alex]')
86     end
87   end
88
89   describe 'works when compared against existing resources with attributes' do
90     [
91       "ensure_resource('User', ['dan', 'alex'], {})",
92       "ensure_resource('User', ['dan', 'alex'], '')",
93       "ensure_resource('User', ['dan', 'alex'], {'ensure' => 'present'})",
94     ].each do |ensure_resource|
95       pp = <<-EOS
96         user { 'dan': ensure => present; 'alex': ensure => present }
97         #{ensure_resource}
98       EOS
99
100       it { expect { compile_to_catalog(pp) }.to_not raise_error }
101     end
102   end
103
104   describe 'fails when compared against existing resources with conflicting attributes' do
105     pp = <<-EOS
106       user { 'dan': ensure => present; 'alex': ensure => present }
107       ensure_resource('User', ['dan', 'alex'], {'ensure' => 'absent'})
108     EOS
109
110     it { expect { compile_to_catalog(pp) }.to raise_error }
111   end
112
113 end