Further condense provider example group API, update Bazaar provider spec to use it.
[puppet_vcsrepo.git] / spec / unit / puppet / provider / vcsrepo / git_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, :git, :resource => {:path => '/tmp/vcsrepo'} do
4   
5   context 'creating' do
6     context_with :source do
7       context_with :ensure => :present do
8         context_with :revision do
9           it "should execute 'git clone' and 'git reset --hard'" do
10             provider.expects('git').with('clone', resource.value(:source), resource.value(:path))
11             expects_chdir
12             provider.expects('git').with('reset', '--hard', resource.value(:revision))
13             provider.create
14           end
15         end
16         
17         context_without :revision do
18           it "should just execute 'git clone'" do
19             provider.expects(:git).with('clone', resource.value(:source), resource.value(:path))
20             provider.create
21           end
22         end
23       end
24       
25       context_with :ensure => :bare do
26         context_with :revision do
27           it "should just execute 'git clone --bare'" do
28             subject.expects(:git).with('clone', '--bare', resource.value(:source), resource.value(:path))
29             subject.create
30           end
31         end
32         
33         context_without :revision do
34           it "should just execute 'git clone --bare'" do
35             subject.expects(:git).with('clone', '--bare', resource.value(:source), resource.value(:path))
36             subject.create
37           end
38         end
39       end
40     end
41     
42     context "when a source is not given" do
43       context_with :ensure => :present do
44         context "when the path does not exist" do
45           it "should execute 'git init'" do
46             expects_mkdir
47             expects_chdir
48             provider.expects(:bare_exists?).returns(false)
49             File.expects(:directory?).with(resource.value(:path)).returns(false)
50             provider.expects(:git).with('init')
51             provider.create
52           end
53         end
54         
55         context "when the path is a bare repository" do
56           it "should convert it to a working copy" do
57             provider.expects(:bare_exists?).returns(true)
58             provider.expects(:convert_bare_to_working_copy)
59             provider.create
60           end
61         end
62         
63         context "when the path is not a repository" do
64           it "should raise an exception" do
65             File.expects(:directory?).with(resource.value(:path)).returns(true)
66             provider.expects(:bare_exists?).returns(false)
67             proc { provider.create }.should raise_error(Puppet::Error)
68           end
69         end
70       end
71       
72       context_with :ensure => :bare do
73         context "when the path does not exist" do
74           it "should execute 'git init --bare'" do
75             expects_chdir
76             expects_mkdir
77             File.expects(:directory?).with(resource.value(:path)).returns(false)
78             provider.expects(:working_copy_exists?).returns(false)
79             provider.expects(:git).with('init', '--bare')
80             provider.create
81           end
82         end
83         
84         context "when the path is a working copy repository" do
85           it "should convert it to a bare repository" do
86             provider.expects(:working_copy_exists?).returns(true)
87             provider.expects(:convert_working_copy_to_bare)
88             provider.create
89           end
90         end
91         
92         context "when the path is not a repository" do
93           it "should raise an exception" do
94             File.expects(:directory?).with(resource.value(:path)).returns(true)
95             provider.expects(:working_copy_exists?).returns(false)
96             proc { provider.create }.should raise_error(Puppet::Error)
97           end
98         end
99       end
100     end
101     
102     context 'destroying' do
103       it "it should remove the directory" do
104         FileUtils.expects(:rm_rf).with(resource.value(:path))
105         provider.destroy
106       end
107     end
108     
109     context "checking the revision property" do
110       context_with :revision do
111         before do
112           expects_chdir
113           provider.expects(:git).with('rev-parse', 'HEAD').returns('currentsha')
114         end
115         
116         context "when its SHA is not different than the current SHA" do
117           it "should return the ref" do
118             provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('currentsha')
119             provider.revision.should == resource.value(:revision)
120           end
121         end
122         
123         context "when its SHA is different than the current SHA" do
124           it "should return the current SHA" do
125             provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('othersha')
126             provider.revision.should == 'currentsha'
127           end
128         end
129       end
130     end
131     
132     context "setting the revision property" do
133       it "should use 'git fetch' and 'git reset'" do
134         expects_chdir
135         provider.expects('git').with('fetch', 'origin')
136         provider.expects('git').with('reset', '--hard', 'carcar')
137         provider.revision = 'carcar'
138       end
139     end
140     
141     context "updating references" do
142       it "should use 'git fetch --tags'" do
143         expects_chdir
144         provider.expects('git').with('fetch', '--tags', 'origin')
145         provider.update_references
146       end
147     end
148     
149   end
150 end