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