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