Move support file
[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.create
14           end
15         end
16         
17         resource_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       resource_with :ensure => :bare do
26         resource_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         resource_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       resource_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             expects_directory?(false)
49             provider.expects(:bare_exists?).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             expects_directory?(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       resource_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             expects_directory?(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             expects_directory?(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   end
103   
104   context 'destroying' do
105     it "it should remove the directory" do
106       expects_rm_rf
107       provider.destroy
108     end
109   end
110   
111   context "checking the revision property" do
112     resource_with :revision do
113       before do
114         expects_chdir
115         provider.expects(:git).with('rev-parse', 'HEAD').returns('currentsha')
116       end
117       
118       context "when its SHA is not different than the current SHA" do
119         it "should return the ref" do
120           provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('currentsha')
121           provider.revision.should == resource.value(:revision)
122         end
123       end
124       
125       context "when its SHA is different than the current SHA" do
126         it "should return the current SHA" do
127           provider.expects(:git).with('rev-parse', resource.value(:revision)).returns('othersha')
128           provider.revision.should == 'currentsha'
129         end
130       end
131     end
132   end
133   
134   context "setting the revision property" do
135     it "should use 'git fetch' and 'git reset'" do
136       expects_chdir
137       provider.expects('git').with('fetch', 'origin')
138       provider.expects('git').with('reset', '--hard', 'carcar')
139       provider.revision = 'carcar'
140     end
141   end
142   
143   context "updating references" do
144     it "should use 'git fetch --tags'" do
145       expects_chdir
146       provider.expects('git').with('fetch', '--tags', 'origin')
147       provider.update_references
148     end
149   end
150   
151 end