Basic CVS support
[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 provider_class = Puppet::Type.type(:vcsrepo).provider(:cvs)
4
5 describe provider_class do
6
7   before :each do
8     @resource = stub("resource")
9     @provider = provider_class.new(@resource)
10     @path = '/tmp/vcsrepo'
11   end
12
13   describe 'when creating' do
14     before do
15       @resource.expects(:value).with(:path).returns(@path).at_least_once
16     end
17     context "when a source is given" do
18       before do
19         @source = ":pserver:anonymous@example.com:/sources/myproj"
20         @resource.expects(:value).with(:source).returns(@source).at_least_once
21         Dir.expects(:chdir).with(File.dirname(@path)).yields
22       end
23       context "and when a revision is given" do
24         before do
25           @tag = 'SOMETAG'
26           @resource.expects(:value).with(:revision).returns(@tag).at_least_once
27           @resource.expects(:value).with(:compression).returns(nil).at_least_once
28         end
29         it "should execute 'cvs checkout' and 'cvs update -r'" do
30           @provider.expects(:cvs).with('-d', @source, 'checkout', '-d', File.basename(@path), File.basename(@source))
31           Dir.expects(:chdir).with(@path).yields
32           @provider.expects(:cvs).with('update', '-r', @tag, '.')
33           @provider.create
34         end        
35       end
36       context "and when a revision is not given" do
37         before do
38           @resource.expects(:value).with(:revision).returns(nil).at_least_once
39           @resource.expects(:value).with(:compression).returns(nil).at_least_once
40         end
41         it "should just execute 'cvs checkout' without a revision" do
42           @provider.expects(:cvs).with('-d', @source, 'checkout', '-d', File.basename(@path), File.basename(@source))
43           @provider.create
44         end        
45       end
46       context "when a compression level is given" do
47         before do
48           @resource.expects(:value).with(:revision).returns(nil).at_least_once
49           @resource.expects(:value).with(:compression).returns('3').at_least_once
50         end
51         it "should just execute 'cvs checkout' without a revision" do
52           @provider.expects(:cvs).with('-d', @source, '-z', '3', 'checkout', '-d', File.basename(@path), File.basename(@source))
53           @provider.create
54         end        
55       end
56     end
57     context "when a source is not given" do
58       before do
59         @resource.expects(:value).with(:source).returns(nil)
60       end
61       it "should execute 'cvs init'" do
62         @provider.expects(:cvs).with('-d', @path, 'init')
63         @provider.create
64       end
65     end
66   end
67
68   describe 'when destroying' do
69     it "it should remove the directory" do
70       @resource.expects(:value).with(:path).returns(@path).at_least_once
71       FileUtils.expects(:rm_rf).with(@path)
72       @provider.destroy
73     end
74   end
75
76   describe "when checking existence" do
77     before do
78       @resource.expects(:value).with(:path).returns(@path)
79     end
80     context "when a source is provided" do
81       before do
82         @resource.expects(:value).with(:source).returns(":pserver:anonymous@example.com:/sources/myproj")
83       end
84       it "should check for the CVS directory" do
85         File.expects(:directory?).with(File.join(@path, 'CVS'))
86         @provider.exists?
87       end
88     end
89     context "when a source is not provided" do
90       before do
91         @resource.expects(:value).with(:source).returns(nil)        
92       end
93       it "should check for the CVSROOT directory" do
94         File.expects(:directory?).with(File.join(@path, 'CVSROOT'))
95         @provider.exists?
96       end
97     end
98   end
99
100   describe "when checking the revision property" do
101     before do
102       @resource.expects(:value).with(:path).returns(@path).at_least_once
103       @tag_file = File.join(@path, 'CVS', 'Tag')
104     end
105     context "when CVS/Tag exists" do
106       before do
107         @tag = 'HEAD'
108         File.expects(:exist?).with(@tag_file).returns(true)
109       end
110       it "should read CVS/Tag" do
111         File.expects(:read).with(@tag_file).returns("T#{@tag}")
112         @provider.revision.should == @tag
113       end
114     end
115     context "when CVS/Tag does not exist" do
116       before do
117         File.expects(:exist?).with(@tag_file).returns(false)
118       end
119       it "assumes MAIN" do
120         @provider.revision.should == 'MAIN'        
121       end
122     end
123   end
124   
125   describe "when setting the revision property" do
126     before do
127       @resource.expects(:value).with(:path).returns(@path).at_least_once
128       @tag = 'SOMETAG'
129     end
130     it "should use 'cvs update -r'" do
131       Dir.expects(:chdir).with(@path).yields
132       @provider.expects('cvs').with('update', '-r', @tag, '.')
133       @provider.revision = @tag
134     end
135   end
136
137 end