Mercurial to use provider example group API for specs
[puppet_vcsrepo.git] / spec / unit / puppet / provider / vcsrepo / hg_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, :hg, :resource => {:path => '/tmp/vcsrepo'} do
4
5   describe 'creating' do
6     context_with :source do
7       context_with :revision do
8         it "should execute 'hg clone -u' with the revision" do
9           provider.expects(:hg).with('clone', '-u',
10                                       resource.value(:revision),
11                                       resource.value(:source),
12                                       resource.value(:path))
13           provider.create
14         end        
15       end
16       context_without :revision do
17         it "should just execute 'hg clone' without a revision" do
18           provider.expects(:hg).with('clone', resource.value(:source), resource.value(:path))
19           provider.create
20         end        
21       end
22     end
23     context "when a source is not given" do
24       it "should execute 'hg init'" do
25         provider.expects(:hg).with('init', resource.value(:path))
26         provider.create
27       end
28     end
29   end
30
31   describe 'destroying' do
32     it "it should remove the directory" do
33       FileUtils.expects(:rm_rf).with(resource.value(:path))
34       provider.destroy
35     end
36   end
37
38   describe "checking existence" do
39     it "should check for the directory" do
40       File.expects(:directory?).with(File.join(resource.value(:path), '.hg'))
41       provider.exists?
42     end
43   end
44
45   describe "checking the revision property" do
46     before do
47       expects_chdir
48     end
49     context "when given a non-SHA as the resource revision" do
50       before do
51         provider.expects(:hg).with('parents').returns(fixture(:hg_parents))
52         provider.expects(:hg).with('tags').returns(fixture(:hg_tags))
53       end
54       context "when its SHA is not different than the current SHA", :resource => {:revision => '0.6'} do
55         it "should return the ref" do
56           provider.revision.should == '0.6'
57         end
58       end
59       context "when its SHA is different than the current SHA", :resource => {:revision => '0.5.3'} do
60         it "should return the current SHA" do
61           provider.revision.should == '34e6012c783a'
62         end          
63       end
64     end
65     context "when given a SHA as the resource revision" do
66       before do
67         provider.expects(:hg).with('parents').returns(fixture(:hg_parents))
68       end
69       context "when it is the same as the current SHA", :resource => {:revision => '34e6012c783a'} do
70         it "should return it" do
71           provider.expects(:hg).with('tags').never
72           provider.revision.should == resource.value(:revision)
73         end
74       end
75       context "when it is not the same as the current SHA", :resource => {:revision => 'not-the-same'} do
76         it "should return the current SHA" do
77           provider.expects(:hg).with('tags').returns(fixture(:hg_tags))
78           provider.revision.should == '34e6012c783a'
79         end
80       end
81     end
82   end
83   
84   describe "setting the revision property" do
85     before do
86       @revision = '6aa99e9b3ab1'
87     end
88     it "should use 'hg update ---clean -r'" do
89       expects_chdir
90       provider.expects('hg').with('pull')
91       provider.expects('hg').with('merge')
92       provider.expects('hg').with('update', '--clean', '-r', @revision)
93       provider.revision = @revision
94     end
95   end
96
97 end