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