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