b146d70de9d14453dd5a3a1e4537bc98bfbe76ae
[puppet_vcsrepo.git] / spec / unit / puppet / provider / vcsrepo / cvs_spec.rb
1 require 'spec_helper'
2
3 describe Puppet::Type.type(:vcsrepo).provider(:cvs_provider) do
4
5   let(:resource) { Puppet::Type.type(:vcsrepo).new({
6     :name     => 'test',
7     :ensure   => :present,
8     :provider => :cvs,
9     :revision => '2634',
10     :source   => 'lp:do',
11     :path     => '/tmp/test',
12   })}
13
14   let(:provider) { resource.provider }
15
16   before :each do
17     Puppet::Util.stubs(:which).with('cvs').returns('/usr/bin/cvs')
18   end
19
20   describe 'creating' do
21     context "with a source" do
22       it "should execute 'cvs checkout'" do
23         resource[:source] = ':ext:source@example.com:/foo/bar'
24         resource[:revision] = 'an-unimportant-value'
25         expects_chdir('/tmp')
26         Puppet::Util::Execution.expects(:execute).with([:cvs, '-d', resource.value(:source), 'checkout', '-r', 'an-unimportant-value', '-d', 'test', 'bar'], :custom_environment => {})
27         provider.create
28       end
29
30       it "should just execute 'cvs checkout' without a revision" do
31         resource[:source] = ':ext:source@example.com:/foo/bar'
32         resource.delete(:revision)
33         Puppet::Util::Execution.expects(:execute).with([:cvs, '-d', resource.value(:source), 'checkout', '-d', File.basename(resource.value(:path)), File.basename(resource.value(:source))], :custom_environment => {})
34         provider.create
35       end
36
37       context "with a compression" do
38         it "should just execute 'cvs checkout' without a revision" do
39           resource[:source] = ':ext:source@example.com:/foo/bar'
40           resource[:compression] = '3'
41           resource.delete(:revision)
42           Puppet::Util::Execution.expects(:execute).with([:cvs, '-d', resource.value(:source), '-z', '3', 'checkout', '-d', File.basename(resource.value(:path)), File.basename(resource.value(:source))], :custom_environment => {})
43           provider.create
44         end
45       end
46     end
47
48     context "when a source is not given" do
49       it "should execute 'cvs init'" do
50         resource.delete(:source)
51         Puppet::Util::Execution.expects(:execute).with([:cvs, '-d', resource.value(:path), 'init'], :custom_environment => {})
52         provider.create
53       end
54     end
55   end
56
57   describe 'destroying' do
58     it "it should remove the directory" do
59       provider.destroy
60     end
61   end
62
63   describe "checking existence" do
64     it "should check for the CVS directory with source" do
65       resource[:source] = ':ext:source@example.com:/foo/bar'
66       File.expects(:directory?).with(File.join(resource.value(:path), 'CVS'))
67       provider.exists?
68     end
69
70     it "should check for the CVSROOT directory without source" do
71       resource.delete(:source)
72       File.expects(:directory?).with(File.join(resource.value(:path), 'CVSROOT'))
73       provider.exists?
74     end
75   end
76
77   describe "checking the revision property" do
78     before do
79       @tag_file = File.join(resource.value(:path), 'CVS', 'Tag')
80     end
81
82     context "when CVS/Tag exists" do
83       before do
84         @tag = 'TAG'
85         File.expects(:exist?).with(@tag_file).returns(true)
86       end
87       it "should read CVS/Tag" do
88         File.expects(:read).with(@tag_file).returns("T#{@tag}")
89         expect(provider.revision).to eq(@tag)
90       end
91     end
92
93     context "when CVS/Tag does not exist" do
94       before do
95         File.expects(:exist?).with(@tag_file).returns(false)
96       end
97       it "assumes HEAD" do
98         expect(provider.revision).to eq('HEAD')
99       end
100     end
101   end
102
103   describe "when setting the revision property" do
104     before do
105       @tag = 'SOMETAG'
106     end
107
108     it "should use 'cvs update -dr'" do
109       expects_chdir
110       Puppet::Util::Execution.expects(:execute).with([:cvs, 'update', '-dr', @tag, '.'], :custom_environment => {})
111       provider.revision = @tag
112     end
113   end
114
115 end