(maint) - add back gems removed by pdk update
[puppet-modules/puppetlabs-apt.git] / spec / defines / pin_spec.rb
1 require 'spec_helper'
2 describe 'apt::pin', type: :define do
3   let :pre_condition do
4     'class { "apt": }'
5   end
6   let(:facts) do
7     {
8       os: { family: 'Debian', name: 'Debian', release: { major: '8', full: '8.0' } },
9       lsbdistid: 'Debian',
10       osfamily: 'Debian',
11       lsbdistcodename: 'jessie',
12     }
13   end
14   let(:title) { 'my_pin' }
15
16   context 'with defaults' do
17     it { is_expected.to contain_apt__setting('pref-my_pin').with_content(%r{Explanation: : my_pin\nPackage: \*\nPin: release a=my_pin\nPin-Priority: 0\n}) }
18   end
19
20   context 'with set version' do
21     let :params do
22       {
23         'packages' => 'vim',
24         'version'  => '1',
25       }
26     end
27
28     it { is_expected.to contain_apt__setting('pref-my_pin').with_content(%r{Explanation: : my_pin\nPackage: vim\nPin: version 1\nPin-Priority: 0\n}) }
29   end
30
31   context 'with set origin' do
32     let :params do
33       {
34         'packages' => 'vim',
35         'origin'   => 'test',
36       }
37     end
38
39     it { is_expected.to contain_apt__setting('pref-my_pin').with_content(%r{Explanation: : my_pin\nPackage: vim\nPin: origin test\nPin-Priority: 0\n}) }
40   end
41
42   context 'without defaults' do
43     let :params do
44       {
45         'explanation'     => 'foo',
46         'order'           => 99,
47         'release'         => '1',
48         'codename'        => 'bar',
49         'release_version' => '2',
50         'component'       => 'baz',
51         'originator'      => 'foobar',
52         'label'           => 'foobaz',
53         'priority'        => 10,
54       }
55     end
56
57     it { is_expected.to contain_apt__setting('pref-my_pin').with_content(%r{Explanation: foo\nPackage: \*\nPin: release a=1, n=bar, v=2, c=baz, o=foobar, l=foobaz\nPin-Priority: 10\n}) }
58     it {
59       is_expected.to contain_apt__setting('pref-my_pin').with('priority' => 99)
60     }
61   end
62
63   context 'with ensure absent' do
64     let :params do
65       {
66         'ensure' => 'absent',
67       }
68     end
69
70     it {
71       is_expected.to contain_apt__setting('pref-my_pin').with('ensure' => 'absent')
72     }
73   end
74
75   context 'with bad characters' do
76     let(:title) { 'such  bad && wow!' }
77
78     it { is_expected.to contain_apt__setting('pref-such__bad____wow_') }
79   end
80
81   describe 'validation' do
82     context 'with invalid order' do
83       let :params do
84         {
85           'order' => 'foo',
86         }
87       end
88
89       it do
90         is_expected.to raise_error(Puppet::Error, %r{expects an Integer value, got String})
91       end
92     end
93
94     context 'with packages == * and version' do
95       let :params do
96         {
97           'version' => '1',
98         }
99       end
100
101       it do
102         is_expected.to raise_error(Puppet::Error, %r{parameter version cannot be used in general form})
103       end
104     end
105
106     context 'with packages == * and release and origin' do
107       let :params do
108         {
109           'origin'  => 'test',
110           'release' => 'foo',
111         }
112       end
113
114       it do
115         is_expected.to raise_error(Puppet::Error, %r{parameters release and origin are mutually exclusive})
116       end
117     end
118
119     context 'with specific release and origin' do
120       let :params do
121         {
122           'release'  => 'foo',
123           'origin'   => 'test',
124           'packages' => 'vim',
125         }
126       end
127
128       it do
129         is_expected.to raise_error(Puppet::Error, %r{parameters release, origin, and version are mutually exclusive})
130       end
131     end
132
133     context 'with specific version and origin' do
134       let :params do
135         {
136           'version'  => '1',
137           'origin'   => 'test',
138           'packages' => 'vim',
139         }
140       end
141
142       it do
143         is_expected.to raise_error(Puppet::Error, %r{parameters release, origin, and version are mutually exclusive})
144       end
145     end
146   end
147 end