Merge pull request #262 from webfactory/autorequire-hg
[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     
56     context "with depth" do
57       it "should execute 'svn checkout' with a depth" do
58         resource[:source] = 'exists'
59         resource[:depth] = 'infinity'
60         provider.expects(:svn).with('--non-interactive', 'checkout', '--depth', 'infinity',
61           resource.value(:source),
62           resource.value(:path))
63         provider.create
64       end
65     end
66     
67     context "with trust_server_cert" do
68       it "should execute 'svn checkout' with a trust-server-cert" do
69         resource[:source] = 'exists'
70         resource[:trust_server_cert] = true
71         provider.expects(:svn).with('--non-interactive', '--trust-server-cert', 'checkout',
72           resource.value(:source),
73           resource.value(:path))
74         provider.create
75       end
76     end
77   end
78
79   describe 'destroying' do
80     it "it should remove the directory" do
81       expects_rm_rf
82       provider.destroy
83     end
84   end
85
86   describe "checking existence" do
87     it "should check for the directory" do
88       expects_directory?(true, resource.value(:path))
89       expects_directory?(true, File.join(resource.value(:path), '.svn'))
90       provider.exists?
91     end
92   end
93
94   describe "checking the revision property" do
95     before do
96       provider.expects(:svn).with('--non-interactive', 'info').returns(fixture(:svn_info))
97     end
98     it "should use 'svn info'" do
99       expects_chdir
100       expect(provider.revision).to eq('4') # From 'Revision', not 'Last Changed Rev'
101     end
102   end
103
104   describe "setting the revision property" do
105     before do
106       @revision = '30'
107     end
108     context 'with conflict' do
109       it "should use 'svn update'" do
110         resource[:conflict] = 'theirs-full'
111         expects_chdir
112         provider.expects(:svn).with('--non-interactive', 'update',
113                                     '-r', @revision,
114                                     '--accept', resource.value(:conflict))
115         provider.revision = @revision
116       end
117     end
118     context 'without conflict' do
119       it "should use 'svn update'" do
120         expects_chdir
121         provider.expects(:svn).with('--non-interactive', 'update', '-r', @revision)
122         provider.revision = @revision
123       end
124     end
125   end
126
127   describe "setting the revision property and repo source" do
128     before do
129       @revision = '30'
130     end
131     context 'with conflict' do
132       it "should use 'svn switch'" do
133         resource[:source] = 'an-unimportant-value'
134         resource[:conflict] = 'theirs-full'
135         expects_chdir
136         provider.expects(:svn).with('--non-interactive', 'switch',
137                                     '-r', @revision, 'an-unimportant-value',
138                                     '--accept', resource.value(:conflict))
139         provider.revision = @revision
140       end
141     end
142     context 'without conflict' do
143       it "should use 'svn switch'" do
144         resource[:source] = 'an-unimportant-value'
145         expects_chdir
146         provider.expects(:svn).with('--non-interactive', 'switch', '-r', @revision, 'an-unimportant-value')
147         provider.revision = @revision
148       end
149     end
150   end
151
152 end