Calculate client workspace name for test case
[puppet_vcsrepo.git] / spec / unit / puppet / provider / vcsrepo / p4_spec.rb
1 require 'spec_helper'
2
3 describe Puppet::Type.type(:vcsrepo).provider(:p4) do
4
5   let(:resource) { Puppet::Type.type(:vcsrepo).new({
6     :name     => 'test',
7     :ensure   => :present,
8     :provider => :p4,
9     :path     => '/tmp/vcsrepo',
10   })}
11
12   let(:provider) { resource.provider }
13
14   before :each do
15     Puppet::Util.stubs(:which).with('p4').returns('/usr/local/bin/p4')
16   end
17
18   spec = {
19     :input => "Description: Generated by Puppet VCSrepo\nRoot: /tmp/vcsrepo\n\nView:\n",
20     :marshal => false
21   }
22
23   describe 'creating' do
24     context 'with source and revision' do
25       it "should execute 'p4 sync' with the revision" do
26         resource[:source] = 'something'
27         resource[:revision] = '1'
28         ENV['P4CLIENT'] = 'client_ws1'
29           
30         provider.expects(:p4).with(['client', '-o', 'client_ws1']).returns({})
31         provider.expects(:p4).with(['client', '-i'], spec)
32         provider.expects(:p4).with(['sync', resource.value(:source) + "@" + resource.value(:revision)])
33         provider.create
34       end
35     end
36
37     context 'without revision' do
38       it "should just execute 'p4 sync' without a revision" do
39         resource[:source] = 'something'
40         ENV['P4CLIENT'] = 'client_ws2'
41         
42         provider.expects(:p4).with(['client', '-o', 'client_ws2']).returns({})
43         provider.expects(:p4).with(['client', '-i'], spec)
44         provider.expects(:p4).with(['sync', resource.value(:source)])
45         provider.create
46       end
47     end
48
49     context "when a client and source are not given" do
50       it "should execute 'p4 client'" do
51         ENV['P4CLIENT'] = nil
52         
53         path = resource.value(:path)
54         host = Facter.value('hostname')
55         default = "puppet-" + Digest::MD5.hexdigest(path + host)
56     
57         provider.expects(:p4).with(['client', '-o', default]).returns({})
58         provider.expects(:p4).with(['client', '-i'], spec)
59         provider.create
60       end
61     end
62   end
63
64   describe 'destroying' do
65     it "it should remove the directory" do
66       ENV['P4CLIENT'] = 'test_client'
67       
68       provider.expects(:p4).with(['client', '-d', '-f', 'test_client'])
69       expects_rm_rf
70       provider.destroy
71     end
72   end
73
74   describe "checking existence" do
75     it "should check for the directory" do
76       provider.expects(:p4).with(['info'], {:marshal => false}).returns({})
77       provider.expects(:p4).with(['where', resource.value(:path) + "..."], {:raise => false}).returns({})
78       provider.exists?
79     end
80   end
81
82 end