Merge pull request #211 from justinstoller/bug/master/FM-1951-ensure-git
[puppet_vcsrepo.git] / spec / unit / puppet / provider / vcsrepo / svn_spec.rb
1 require 'spec_helper'
2
3 describe Puppet::Type.type(:vcsrepo).provider(:svn) do
4
5   let(:resource) { Puppet::Type.type(:vcsrepo).new({
6     :name     => 'test',
7     :ensure   => :present,
8     :provider => :svn,
9     :path     => '/tmp/vcsrepo',
10   })}
11
12   let(:provider) { resource.provider }
13
14   before :each do
15     Puppet::Util.stubs(:which).with('git').returns('/usr/bin/git')
16   end
17
18   describe 'creating' do
19     context 'with source and revision' do
20       it "should execute 'svn checkout' with a revision" do
21         resource[:source] = 'exists'
22         resource[:revision] = '1'
23         provider.expects(:svn).with('--non-interactive', 'checkout', '-r',
24           resource.value(:revision),
25           resource.value(:source),
26           resource.value(:path))
27         provider.create
28       end
29     end
30     context 'with source' do
31       it "should just execute 'svn checkout' without a revision" do
32         resource[:source] = 'exists'
33         provider.expects(:svn).with('--non-interactive', 'checkout',
34           resource.value(:source),
35           resource.value(:path))
36         provider.create
37       end
38     end
39
40     context 'with fstype' do
41       it "should execute 'svnadmin create' with an '--fs-type' option" do
42         resource[:fstype] = 'ext4'
43         provider.expects(:svnadmin).with('create', '--fs-type',
44                                           resource.value(:fstype),
45                                           resource.value(:path))
46         provider.create
47       end
48     end
49     context 'without fstype' do
50       it "should execute 'svnadmin create' without an '--fs-type' option" do
51         provider.expects(:svnadmin).with('create', resource.value(:path))
52         provider.create
53       end
54     end
55   end
56
57   describe 'destroying' do
58     it "it should remove the directory" do
59       expects_rm_rf
60       provider.destroy
61     end
62   end
63
64   describe "checking existence" do
65     it "should check for the directory" do
66       expects_directory?(true, resource.value(:path))
67       expects_directory?(true, File.join(resource.value(:path), '.svn'))
68       provider.exists?
69     end
70   end
71
72   describe "checking the revision property" do
73     before do
74       provider.expects(:svn).with('--non-interactive', 'info').returns(fixture(:svn_info))
75     end
76     it "should use 'svn info'" do
77       expects_chdir
78       provider.revision.should == '4' # From 'Revision', not 'Last Changed Rev'
79     end
80   end
81
82   describe "setting the revision property" do
83     before do
84       @revision = '30'
85     end
86     it "should use 'svn update'" do
87       expects_chdir
88       provider.expects(:svn).with('--non-interactive', 'update', '-r', @revision)
89       provider.revision = @revision
90     end
91   end
92
93   describe "setting the revision property and repo source" do
94     before do
95       @revision = '30'
96     end
97     it "should use 'svn switch'" do
98       resource[:source] = 'an-unimportant-value'
99       expects_chdir
100       provider.expects(:svn).with('--non-interactive', 'switch', '-r', @revision, 'an-unimportant-value')
101       provider.revision = @revision
102     end
103   end
104
105 end