cc195eb0116a4910029a8b04df5039063cf1b59f
[puppet_vcsrepo.git] / spec / unit / puppet / provider / vcsrepo / cvs_spec.rb
1 require 'pathname'; Pathname.new(__FILE__).realpath.ascend { |x| begin; require (x + 'spec_helper.rb'); break; rescue LoadError; end }
2
3 describe_provider :vcsrepo, :cvs, :resource => {:path => '/tmp/vcsrepo'} do
4
5   describe 'creating' do
6     context "with a source", :resource => {:source => ':ext:source@example.com:/foo/bar'} do
7       resource_with :revision do
8         it "should execute 'cvs checkout' and 'cvs update -r'" do
9           expects_chdir
10           expects_chdir(File.dirname(resource.value(:path)))
11           provider.expects(:cvs).with('-d', resource.value(:source), 'checkout', '-d', File.basename(resource.value(:path)), File.basename(resource.value(:source)))
12           provider.expects(:cvs).with('update', '-r', resource.value(:revision), '.')
13           provider.create
14         end        
15       end
16       
17       resource_without :revision do
18         it "should just execute 'cvs checkout' without a revision" do
19           provider.expects(:cvs).with('-d', resource.value(:source), 'checkout', '-d', File.basename(resource.value(:path)), File.basename(resource.value(:source)))
20           provider.create
21         end        
22       end
23       
24       context "with a compression", :resource => {:compression => '3'} do
25         it "should just execute 'cvs checkout' without a revision" do
26           provider.expects(:cvs).with('-d', resource.value(:source), '-z', '3', 'checkout', '-d', File.basename(resource.value(:path)), File.basename(resource.value(:source)))
27           provider.create
28         end        
29       end
30     end
31     
32     context "when a source is not given" do
33       it "should execute 'cvs init'" do
34         provider.expects(:cvs).with('-d', resource.value(:path), 'init')
35         provider.create
36       end
37     end
38   end
39
40   describe 'destroying' do
41     it "it should remove the directory" do
42       expects_rm_rf
43       provider.destroy
44     end
45   end
46
47   describe "checking existence" do
48     resource_with :source do
49       it "should check for the CVS directory" do
50         File.expects(:directory?).with(File.join(resource.value(:path), 'CVS'))
51         provider.exists?
52       end
53     end
54     
55     resource_without :source do
56       it "should check for the CVSROOT directory" do
57         File.expects(:directory?).with(File.join(resource.value(:path), 'CVSROOT'))
58         provider.exists?
59       end
60     end
61   end
62
63   describe "checking the revision property" do
64     before do
65       @tag_file = File.join(resource.value(:path), 'CVS', 'Tag')
66     end
67     
68     context "when CVS/Tag exists" do
69       before do
70         @tag = 'HEAD'
71         File.expects(:exist?).with(@tag_file).returns(true)
72       end
73       it "should read CVS/Tag" do
74         File.expects(:read).with(@tag_file).returns("T#{@tag}")
75         provider.revision.should == @tag
76       end
77     end
78     
79     context "when CVS/Tag does not exist" do
80       before do
81         File.expects(:exist?).with(@tag_file).returns(false)
82       end
83       it "assumes MAIN" do
84         provider.revision.should == 'MAIN'        
85       end
86     end
87   end
88   
89   describe "when setting the revision property" do
90     before do
91       @tag = 'SOMETAG'
92     end
93     
94     it "should use 'cvs update -r'" do
95       expects_chdir
96       provider.expects('cvs').with('update', '-r', @tag, '.')
97       provider.revision = @tag
98     end
99   end
100
101 end