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