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