apt::pin: handling all apt preferences properties
[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     end
59   end
60
61   [ { :lsbdistcodename => 'natty', 
62       :package => 'python-software-properties' },
63     { :lsbdistcodename => 'quantal',
64       :package => 'software-properties-common'},
65   ].each do |platform|
66     context "on #{platform[:lsbdistcodename]}" do
67       describe "it should not error if package['#{platform[:package]}'] is already defined" do
68         let :pre_condition do
69            'class {"apt": }' +
70            'package { "#{platform[:package]}": }->Apt::Ppa["ppa"]'
71         end
72         let :facts do
73           {:lsbdistcodename => '#{platform[:lsbdistcodename]}'}
74         end
75         let(:title) { "ppa" }
76         let(:release) { "#{platform[:lsbdistcodename]}" }
77         it { should contain_package('#{platform[:package]}') }
78       end
79     end
80   end
81
82   describe "without Class[apt] should raise a Puppet::Error" do
83     let(:release) { "natty" }
84     let(:title) { "ppa" }
85     it { expect { should contain_apt__ppa(title) }.to raise_error(Puppet::Error) }
86   end
87
88   describe "without release should raise a Puppet::Error" do
89     let(:title) { "ppa:" }
90     it { expect { should contain_apt__ppa(:release) }.to raise_error(Puppet::Error) }
91   end
92 end