Add lsbdistid facts where appropriate.
[puppet-modules/puppetlabs-apt.git] / spec / defines / ppa_spec.rb
1 require 'spec_helper'
2 describe 'apt::ppa', :type => :define do
3   [
4     {
5       :lsbdistrelease  => '11.04',
6       :lsbdistcodename => 'natty',
7       :operatingsystem => 'Ubuntu',
8       :lsbdistid       => 'Ubuntu',
9       :package         => 'python-software-properties'
10     },
11     {
12       :lsbdistrelease  => '12.10',
13       :lsbdistcodename => 'quantal',
14       :operatingsystem => 'Ubuntu',
15       :lsbdistid       => 'Ubuntu',
16       :package         => 'software-properties-common'
17     },
18   ].each do |platform|
19     context "on #{platform[:lsbdistcodename]}" do
20       let :facts do
21         {
22           :lsbdistrelease  => platform[:lsbdistrelease],
23           :lsbdistcodename => platform[:lsbdistcodename],
24           :operatingsystem => platform[:operatingsystem],
25           :lsbdistid       => platform[:lsbdistid],
26         }
27       end
28       let :release do
29         "#{platform[:lsbdistcodename]}"
30       end
31       let :package do
32         "#{platform[:package]}"
33       end
34       let :options do
35         "-y"
36       end
37       ['ppa:dans_ppa', 'dans_ppa','ppa:dans-daily/ubuntu'].each do |t|
38         describe "with title #{t}" do
39           let :pre_condition do
40             'class { "apt": }'
41           end
42           let :title do
43             t
44           end
45           let :filename do
46             t.sub(/^ppa:/,'').gsub('/','-') << "-" << "#{release}.list"
47           end
48
49           it { should contain_package("#{package}") }
50
51           it { should contain_exec("apt_update").with(
52             'command'     => '/usr/bin/apt-get update',
53             'refreshonly' => true
54             )
55           }
56
57           it { should contain_exec("add-apt-repository-#{t}").with(
58             'command' => "/usr/bin/add-apt-repository #{options} #{t}",
59             'unless'  => "/usr/bin/test -s /etc/apt/sources.list.d/#{filename}",
60             'require' => ["File[sources.list.d]", "Package[#{package}]"],
61             'notify'  => "Exec[apt_update]"
62             )
63           }
64
65           it { should create_file("/etc/apt/sources.list.d/#{filename}").with(
66             'ensure'  => 'file',
67             'require' => "Exec[add-apt-repository-#{t}]"
68             )
69           }
70         end
71       end
72       describe 'without a proxy defined' do
73         let :title do
74           'rspec_ppa'
75         end
76         let :pre_condition do
77           'class { "apt":
78              proxy_host => false
79           }'
80         end
81         let :filename do
82           "#{title}-#{release}.list"
83         end
84
85         it { should contain_exec("add-apt-repository-#{title}").with(
86           'environment' => [],
87           'command'     => "/usr/bin/add-apt-repository #{options} #{title}",
88           'unless'      => "/usr/bin/test -s /etc/apt/sources.list.d/#{filename}",
89           'require'     => ["File[sources.list.d]", "Package[#{package}]"],
90           'notify'      => "Exec[apt_update]"
91           )
92         }
93       end
94
95       describe 'behind a proxy' do
96         let :title do
97           'rspec_ppa'
98         end
99         let :pre_condition do
100           'class { "apt":
101             proxy_host => "user:pass@proxy",
102           }'
103         end
104           let :filename do
105             "#{title}-#{release}.list"
106           end
107
108         it { should contain_exec("add-apt-repository-#{title}").with(
109           'environment' => [
110             "http_proxy=http://user:pass@proxy:8080",
111             "https_proxy=http://user:pass@proxy:8080",
112           ],
113           'command'     => "/usr/bin/add-apt-repository #{options} #{title}",
114           'unless'      => "/usr/bin/test -s /etc/apt/sources.list.d/#{filename}",
115           'require'     => ["File[sources.list.d]", "Package[#{package}]"],
116           'notify'      => "Exec[apt_update]"
117           )
118         }
119       end
120     end
121   end
122
123   [ { :lsbdistcodename => 'natty',
124       :package => 'python-software-properties' },
125     { :lsbdistcodename => 'quantal',
126       :package => 'software-properties-common'},
127   ].each do |platform|
128     context "on #{platform[:lsbdistcodename]}" do
129       describe "it should not error if package['#{platform[:package]}'] is already defined" do
130         let :pre_condition do
131            'class {"apt": }' +
132            'package { "#{platform[:package]}": }->Apt::Ppa["ppa"]'
133         end
134         let :facts do
135           {:lsbdistcodename => '#{platform[:lsbdistcodename]}',
136            :operatingsystem => 'Ubuntu',
137            :lsbdistid => 'Ubuntu'}
138         end
139         let(:title) { "ppa" }
140         let(:release) { "#{platform[:lsbdistcodename]}" }
141         it { should contain_package('#{platform[:package]}') }
142       end
143     end
144   end
145
146   describe "without Class[apt] should raise a Puppet::Error" do
147     let(:release) { "natty" }
148     let(:title) { "ppa" }
149     it { expect { should contain_apt__ppa(title) }.to raise_error(Puppet::Error) }
150   end
151
152   describe "without release should raise a Puppet::Error" do
153     let(:title) { "ppa:" }
154     it { expect { should contain_apt__ppa(:release) }.to raise_error(Puppet::Error) }
155   end
156 end