Merge pull request #773 from ekohl/apt-proxy-type
[puppet-modules/puppetlabs-apt.git] / spec / defines / setting_spec.rb
1 require 'spec_helper'
2
3 describe 'apt::setting' do
4   let(:pre_condition) { 'class { "apt": }' }
5   let :facts do
6     {
7       os: { distro: { codename: 'wheezy' }, family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
8       lsbdistrelease: '8.0',
9       lsbdistcodename: 'jessie',
10       operatingsystem: 'Debian',
11       osfamily: 'Debian',
12       lsbdistid: 'Debian',
13       puppetversion: Puppet.version,
14     }
15   end
16   let(:title) { 'conf-teddybear' }
17
18   let(:default_params) { { content: 'di' } }
19
20   describe 'when using the defaults' do
21     context 'without source or content' do
22       it do
23         is_expected.to raise_error(Puppet::Error, %r{needs either of })
24       end
25     end
26
27     context 'with title=conf-teddybear ' do
28       let(:params) { default_params }
29
30       it { is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').that_notifies('Class[Apt::Update]') }
31     end
32
33     context 'with title=pref-teddybear' do
34       let(:title) { 'pref-teddybear' }
35       let(:params) { default_params }
36
37       it { is_expected.to contain_file('/etc/apt/preferences.d/teddybear.pref').that_notifies('Class[Apt::Update]') }
38     end
39
40     context 'with title=list-teddybear' do
41       let(:title) { 'list-teddybear' }
42       let(:params) { default_params }
43
44       it { is_expected.to contain_file('/etc/apt/sources.list.d/teddybear.list').that_notifies('Class[Apt::Update]') }
45     end
46
47     context 'with source' do
48       let(:params) { { source: 'puppet:///la/die/dah' } }
49
50       it {
51         is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').that_notifies('Class[Apt::Update]').with(ensure: 'file',
52                                                                                                                 owner: 'root',
53                                                                                                                 group: 'root',
54                                                                                                                 mode: '0644',
55                                                                                                                 source: params[:source].to_s)
56       }
57     end
58
59     context 'with content' do
60       let(:params) { default_params }
61
62       it {
63         is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').that_notifies('Class[Apt::Update]').with(ensure: 'file',
64                                                                                                                 owner: 'root',
65                                                                                                                 group: 'root',
66                                                                                                                 mode: '0644',
67                                                                                                                 content: params[:content].to_s)
68       }
69     end
70   end
71
72   describe 'settings requiring settings, MODULES-769' do
73     let(:pre_condition) do
74       'class { "apt": }
75       apt::setting { "list-teddybear": content => "foo" }
76       '
77     end
78     let(:facts) do
79       {
80         os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
81         lsbdistid: 'Debian',
82         osfamily: 'Debian',
83         lsbdistcodename: 'jessie',
84         puppetversion: Puppet.version,
85       }
86     end
87     let(:title) { 'conf-teddybear' }
88     let(:default_params) { { content: 'di' } }
89
90     let(:params) { default_params.merge(require: 'Apt::Setting[list-teddybear]') }
91
92     it { is_expected.to compile.with_all_deps }
93   end
94
95   describe 'when trying to pull one over' do
96     context 'with source and content' do
97       let(:params) { default_params.merge(source: 'la') }
98
99       it do
100         is_expected.to raise_error(Puppet::Error, %r{cannot have both })
101       end
102     end
103
104     context 'with title=ext-teddybear' do
105       let(:title) { 'ext-teddybear' }
106       let(:params) { default_params }
107
108       it do
109         is_expected.to raise_error(Puppet::Error, %r{must start with either})
110       end
111     end
112
113     context 'with ensure=banana' do
114       let(:params) { default_params.merge(ensure: 'banana') }
115
116       it do
117         is_expected.to raise_error(Puppet::Error, %r{Enum\['absent', 'file', 'present'\]})
118       end
119     end
120
121     context 'with priority=1.2' do
122       let(:params) { default_params.merge(priority: 1.2) }
123
124       if Puppet::Util::Package.versioncmp(Puppet.version, '4.0') >= 0 || ENV['FUTURE_PARSER'] == 'yes'
125         it { is_expected.to compile.and_raise_error(%r{expects a value of type}) }
126       else
127         it { is_expected.to compile.and_raise_error(%r{priority must be an integer or a zero-padded integer}) }
128       end
129     end
130   end
131
132   describe 'with priority=100' do
133     let(:params) { default_params.merge(priority: 100) }
134
135     it { is_expected.to contain_file('/etc/apt/apt.conf.d/100teddybear').that_notifies('Class[Apt::Update]') }
136   end
137
138   describe 'with ensure=absent' do
139     let(:params) { default_params.merge(ensure: 'absent') }
140
141     it {
142       is_expected.to contain_file('/etc/apt/apt.conf.d/50teddybear').that_notifies('Class[Apt::Update]').with(ensure: 'absent')
143     }
144   end
145 end