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