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