206dbf1e011e4a6b336826d63bc9528319177713
[puppet-modules/puppetlabs-apt.git] / spec / defines / pin_spec.rb
1 require 'spec_helper'
2 describe 'apt::pin', :type => :define do
3   let(:facts) { { :lsbdistid => 'Debian', :osfamily => 'Debian' } }
4   let(:title) { 'my_pin' }
5
6   context 'defaults' do
7     it { is_expected.to contain_file("my_pin.pref").with_content(/Explanation: : my_pin\nPackage: \*\nPin: release a=my_pin\nPin-Priority: 0\n/)}
8     it { is_expected.to contain_file("my_pin.pref").with({
9       'ensure' => 'present',
10       'path'   => '/etc/apt/preferences.d/my_pin.pref',
11       'owner'  => 'root',
12       'group'  => 'root',
13       'mode'   => '0644',
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_file("my_pin.pref").with_content(/Explanation: : my_pin\nPackage: vim\nPin: version 1\nPin-Priority: 0\n/)}
26     it { is_expected.to contain_file("my_pin.pref").with({
27       'ensure' => 'present',
28       'path'   => '/etc/apt/preferences.d/my_pin.pref',
29       'owner'  => 'root',
30       'group'  => 'root',
31       'mode'   => '0644',
32     })
33     }
34   end
35
36   context 'set origin' do
37     let :params do
38       {
39         'packages' => 'vim',
40         'origin'   => 'test',
41       }
42     end
43     it { is_expected.to contain_file("my_pin.pref").with_content(/Explanation: : my_pin\nPackage: vim\nPin: origin test\nPin-Priority: 0\n/)}
44     it { is_expected.to contain_file("my_pin.pref").with({
45       'ensure' => 'present',
46       'path'   => '/etc/apt/preferences.d/my_pin.pref',
47       'owner'  => 'root',
48       'group'  => 'root',
49       'mode'   => '0644',
50     })
51     }
52   end
53
54   context 'not defaults' do
55     let :params do
56       {
57         'explanation'     => 'foo',
58         'order'           => 99,
59         'release'         => '1',
60         'codename'        => 'bar',
61         'release_version' => '2',
62         'component'       => 'baz',
63         'originator'      => 'foobar',
64         'label'           => 'foobaz',
65         'priority'        => 10,
66       }
67     end
68     it { is_expected.to contain_file("my_pin.pref").with_content(/Explanation: foo\nPackage: \*\nPin: release a=1, n=bar, v=2, c=baz, o=foobar, l=foobaz\nPin-Priority: 10\n/) }
69     it { is_expected.to contain_file("my_pin.pref").with({
70       'ensure' => 'present',
71       'path'   => '/etc/apt/preferences.d/99-my_pin.pref',
72       'owner'  => 'root',
73       'group'  => 'root',
74       'mode'   => '0644',
75     })
76     }
77   end
78
79   context 'ensure absent' do
80     let :params do
81       {
82         'ensure' => 'absent'
83       }
84     end
85     it { is_expected.to contain_file("my_pin.pref").with({
86       'ensure' => 'absent',
87     })
88     }
89   end
90
91   context 'bad characters' do
92     let(:title) { 'such  bad && wow!' }
93     it { is_expected.to contain_file("such__bad____wow_.pref") }
94   end
95
96   describe 'validation' do
97     context 'invalid order' do
98       let :params do
99         {
100           'order' => 'foo',
101         }
102       end
103       it do
104         expect {
105           should compile
106         }.to raise_error(Puppet::Error, /Only integers are allowed/)
107       end
108     end
109
110     context 'packages == * and version' do
111       let :params do
112         {
113           'version' => '1',
114         }
115       end
116       it do
117         expect {
118           should compile
119         }.to raise_error(Puppet::Error, /parameter version cannot be used in general form/)
120       end
121     end
122
123     context 'packages == * and release and origin' do
124       let :params do
125         {
126           'origin'  => 'test',
127           'release' => 'foo',
128         }
129       end
130       it do
131         expect {
132           should compile
133         }.to raise_error(Puppet::Error, /parameters release and origin are mutually exclusive/)
134       end
135     end
136
137     context 'specific form with release and origin' do
138       let :params do
139         {
140           'release'  => 'foo',
141           'origin'   => 'test',
142           'packages' => 'vim',
143         }
144       end
145       it do
146         expect {
147           should compile
148         }.to raise_error(Puppet::Error, /parameters release, origin, and version are mutually exclusive/)
149       end
150     end
151
152     context 'specific form with version and origin' do
153       let :params do
154         {
155           'version'  => '1',
156           'origin'   => 'test',
157           'packages' => 'vim',
158         }
159       end
160       it do
161         expect {
162           should compile
163         }.to raise_error(Puppet::Error, /parameters release, origin, and version are mutually exclusive/)
164       end
165     end
166   end
167 end