Update specs for #145
[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 'without a proxy defined' do
62         let :title do
63           'rspec_ppa'
64         end
65         let :pre_condition do
66           'class { "apt":
67              proxy_host => false
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           'command'     => "/usr/bin/add-apt-repository #{options} #{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
84       describe 'behind a proxy' do
85         let :title do
86           'rspec_ppa'
87         end
88         let :pre_condition do
89           'class { "apt":
90             proxy_host => "user:pass@proxy",
91           }'
92         end
93           let :filename do
94             "#{title}-#{release}.list"
95           end
96
97         it { should contain_exec("add-apt-repository-#{title}").with(
98           'environment' => [
99             "http_proxy=http://user:pass@proxy:8080",
100             "https_proxy=http://user:pass@proxy:8080",
101           ],
102           'command'     => "/usr/bin/add-apt-repository #{options} #{title}",
103           'creates'     => "/etc/apt/sources.list.d/#{filename}",
104           'require'     => ["File[/etc/apt/sources.list.d]", "Package[#{package}]"],
105           'notify'      => "Exec[apt_update]"
106           )
107         }
108       end
109     end
110   end
111
112   [ { :lsbdistcodename => 'natty', 
113       :package => 'python-software-properties' },
114     { :lsbdistcodename => 'quantal',
115       :package => 'software-properties-common'},
116   ].each do |platform|
117     context "on #{platform[:lsbdistcodename]}" do
118       describe "it should not error if package['#{platform[:package]}'] is already defined" do
119         let :pre_condition do
120            'class {"apt": }' +
121            'package { "#{platform[:package]}": }->Apt::Ppa["ppa"]'
122         end
123         let :facts do
124           {:lsbdistcodename => '#{platform[:lsbdistcodename]}'}
125         end
126         let(:title) { "ppa" }
127         let(:release) { "#{platform[:lsbdistcodename]}" }
128         it { should contain_package('#{platform[:package]}') }
129       end
130     end
131   end
132
133   describe "without Class[apt] should raise a Puppet::Error" do
134     let(:release) { "natty" }
135     let(:title) { "ppa" }
136     it { expect { should contain_apt__ppa(title) }.to raise_error(Puppet::Error) }
137   end
138
139   describe "without release should raise a Puppet::Error" do
140     let(:title) { "ppa:" }
141     it { expect { should contain_apt__ppa(:release) }.to raise_error(Puppet::Error) }
142   end
143 end