require 'pathname'; Pathname.new(__FILE__).realpath.ascend { |x| begin; require (x + 'spec_helper.rb'); break; rescue LoadError; end } provider_class = Puppet::Type.type(:vcsrepo).provider(:cvs) describe provider_class do before :each do @resource = stub("resource") @provider = provider_class.new(@resource) @path = '/tmp/vcsrepo' end describe 'when creating' do before do @resource.expects(:value).with(:path).returns(@path).at_least_once end context "when a source is given" do before do @source = ":pserver:anonymous@example.com:/sources/myproj" @resource.expects(:value).with(:source).returns(@source).at_least_once Dir.expects(:chdir).with(File.dirname(@path)).yields end context "and when a revision is given" do before do @tag = 'SOMETAG' @resource.expects(:value).with(:revision).returns(@tag).at_least_once @resource.expects(:value).with(:compression).returns(nil).at_least_once end it "should execute 'cvs checkout' and 'cvs update -r'" do @provider.expects(:cvs).with('-d', @source, 'checkout', '-d', File.basename(@path), File.basename(@source)) Dir.expects(:chdir).with(@path).yields @provider.expects(:cvs).with('update', '-r', @tag, '.') @provider.create end end context "and when a revision is not given" do before do @resource.expects(:value).with(:revision).returns(nil).at_least_once @resource.expects(:value).with(:compression).returns(nil).at_least_once end it "should just execute 'cvs checkout' without a revision" do @provider.expects(:cvs).with('-d', @source, 'checkout', '-d', File.basename(@path), File.basename(@source)) @provider.create end end context "when a compression level is given" do before do @resource.expects(:value).with(:revision).returns(nil).at_least_once @resource.expects(:value).with(:compression).returns('3').at_least_once end it "should just execute 'cvs checkout' without a revision" do @provider.expects(:cvs).with('-d', @source, '-z', '3', 'checkout', '-d', File.basename(@path), File.basename(@source)) @provider.create end end end context "when a source is not given" do before do @resource.expects(:value).with(:source).returns(nil) end it "should execute 'cvs init'" do @provider.expects(:cvs).with('-d', @path, 'init') @provider.create end end end describe 'when destroying' do it "it should remove the directory" do @resource.expects(:value).with(:path).returns(@path).at_least_once FileUtils.expects(:rm_rf).with(@path) @provider.destroy end end describe "when checking existence" do before do @resource.expects(:value).with(:path).returns(@path) end context "when a source is provided" do before do @resource.expects(:value).with(:source).returns(":pserver:anonymous@example.com:/sources/myproj") end it "should check for the CVS directory" do File.expects(:directory?).with(File.join(@path, 'CVS')) @provider.exists? end end context "when a source is not provided" do before do @resource.expects(:value).with(:source).returns(nil) end it "should check for the CVSROOT directory" do File.expects(:directory?).with(File.join(@path, 'CVSROOT')) @provider.exists? end end end describe "when checking the revision property" do before do @resource.expects(:value).with(:path).returns(@path).at_least_once @tag_file = File.join(@path, 'CVS', 'Tag') end context "when CVS/Tag exists" do before do @tag = 'HEAD' File.expects(:exist?).with(@tag_file).returns(true) end it "should read CVS/Tag" do File.expects(:read).with(@tag_file).returns("T#{@tag}") @provider.revision.should == @tag end end context "when CVS/Tag does not exist" do before do File.expects(:exist?).with(@tag_file).returns(false) end it "assumes MAIN" do @provider.revision.should == 'MAIN' end end end describe "when setting the revision property" do before do @resource.expects(:value).with(:path).returns(@path).at_least_once @tag = 'SOMETAG' end it "should use 'cvs update -r'" do Dir.expects(:chdir).with(@path).yields @provider.expects('cvs').with('update', '-r', @tag, '.') @provider.revision = @tag end end end