Merge pull request #443 from mhaskel/proxy_updates
[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) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
7   let(:title) { 'my_pin' }
8
9   context 'defaults' do
10     it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: \*\nPin: release a=my_pin\nPin-Priority: 0\n/)}
11     it { is_expected.to contain_apt__setting("pref-my_pin").with({
12       'setting_type' => 'pref',
13       'base_name'    => 'my_pin',
14     })
15     }
16   end
17
18   context 'set version' do
19     let :params do
20       {
21         'packages' => 'vim',
22         'version'  => '1',
23       }
24     end
25     it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: vim\nPin: version 1\nPin-Priority: 0\n/)}
26     it { is_expected.to contain_apt__setting("pref-my_pin").with({
27       'setting_type' => 'pref',
28       'base_name'    => 'my_pin',
29     })
30     }
31   end
32
33   context 'set origin' do
34     let :params do
35       {
36         'packages' => 'vim',
37         'origin'   => 'test',
38       }
39     end
40     it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: : my_pin\nPackage: vim\nPin: origin test\nPin-Priority: 0\n/)}
41     it { is_expected.to contain_apt__setting("pref-my_pin").with({
42       'setting_type' => 'pref',
43       'base_name'    => 'my_pin',
44     })
45     }
46   end
47
48   context 'not defaults' do
49     let :params do
50       {
51         'explanation'     => 'foo',
52         'order'           => 99,
53         'release'         => '1',
54         'codename'        => 'bar',
55         'release_version' => '2',
56         'component'       => 'baz',
57         'originator'      => 'foobar',
58         'label'           => 'foobaz',
59         'priority'        => 10,
60       }
61     end
62     it { is_expected.to contain_apt__setting("pref-my_pin").with_content(/Explanation: foo\nPackage: \*\nPin: release a=1, n=bar, v=2, c=baz, o=foobar, l=foobaz\nPin-Priority: 10\n/) }
63     it { is_expected.to contain_apt__setting("pref-my_pin").with({
64       'setting_type' => 'pref',
65       'base_name'    => 'my_pin',
66       'priority'     => 99,
67     })
68     }
69   end
70
71   context 'ensure absent' do
72     let :params do
73       {
74         'ensure' => 'absent'
75       }
76     end
77     it { is_expected.to contain_apt__setting("pref-my_pin").with({
78       'ensure' => 'absent',
79     })
80     }
81   end
82
83   context 'bad characters' do
84     let(:title) { 'such  bad && wow!' }
85     it { is_expected.to contain_apt__setting("pref-such__bad____wow_") }
86   end
87
88   describe 'validation' do
89     context 'invalid order' do
90       let :params do
91         {
92           'order' => 'foo',
93         }
94       end
95       it do
96         expect {
97           is_expected.to compile
98         }.to raise_error(Puppet::Error, /Only integers are allowed/)
99       end
100     end
101
102     context 'packages == * and version' do
103       let :params do
104         {
105           'version' => '1',
106         }
107       end
108       it do
109         expect {
110           is_expected.to compile
111         }.to raise_error(Puppet::Error, /parameter version cannot be used in general form/)
112       end
113     end
114
115     context 'packages == * and release and origin' do
116       let :params do
117         {
118           'origin'  => 'test',
119           'release' => 'foo',
120         }
121       end
122       it do
123         expect {
124           is_expected.to compile
125         }.to raise_error(Puppet::Error, /parameters release and origin are mutually exclusive/)
126       end
127     end
128
129     context 'specific form with release and origin' do
130       let :params do
131         {
132           'release'  => 'foo',
133           'origin'   => 'test',
134           'packages' => 'vim',
135         }
136       end
137       it do
138         expect {
139           is_expected.to compile
140         }.to raise_error(Puppet::Error, /parameters release, origin, and version are mutually exclusive/)
141       end
142     end
143
144     context 'specific form with version and origin' do
145       let :params do
146         {
147           'version'  => '1',
148           'origin'   => 'test',
149           'packages' => 'vim',
150         }
151       end
152       it do
153         expect {
154           is_expected.to compile
155         }.to raise_error(Puppet::Error, /parameters release, origin, and version are mutually exclusive/)
156       end
157     end
158   end
159 end