diff options
Diffstat (limited to 'spec/unit/resource/scm_spec.rb')
-rw-r--r-- | spec/unit/resource/scm_spec.rb | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/spec/unit/resource/scm_spec.rb b/spec/unit/resource/scm_spec.rb new file mode 100644 index 0000000000..488d335342 --- /dev/null +++ b/spec/unit/resource/scm_spec.rb @@ -0,0 +1,159 @@ +# +# Author:: Daniel DeLeo (<dan@kallistec.com>) +# Author:: Tyler Cloke (<tyler@opscode.com>) +# Copyright:: Copyright (c) 2008 Opscode, Inc. +# License:: Apache License, Version 2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +require 'spec_helper' + +describe Chef::Resource::Scm do + + before(:each) do + @resource = Chef::Resource::Scm.new("my awesome app") + end + + it "should be a SCM resource" do + @resource.should be_a_kind_of(Chef::Resource::Scm) + end + + it "supports :checkout, :export, :sync, :diff, and :log actions" do + @resource.allowed_actions.should include(:checkout) + @resource.allowed_actions.should include(:export) + @resource.allowed_actions.should include(:sync) + @resource.allowed_actions.should include(:diff) + @resource.allowed_actions.should include(:log) + end + + it "takes the destination path as a string" do + @resource.destination "/path/to/deploy/dir" + @resource.destination.should eql("/path/to/deploy/dir") + end + + it "takes a string for the repository URL" do + @resource.repository "git://github.com/opscode/chef.git" + @resource.repository.should eql("git://github.com/opscode/chef.git") + end + + it "takes a string for the revision" do + @resource.revision "abcdef" + @resource.revision.should eql("abcdef") + end + + it "defaults to the ``HEAD'' revision" do + @resource.revision.should eql("HEAD") + end + + it "takes a string for the user to run as" do + @resource.user "dr_deploy" + @resource.user.should eql("dr_deploy") + end + + it "also takes an integer for the user to run as" do + @resource.user 0 + @resource.user.should eql(0) + end + + it "takes a string for the group to run as, defaulting to nil" do + @resource.group.should be_nil + @resource.group "opsdevs" + @resource.group.should == "opsdevs" + end + + it "also takes an integer for the group to run as" do + @resource.group 23 + @resource.group.should == 23 + end + + it "has a svn_username String attribute" do + @resource.svn_username "moartestsplz" + @resource.svn_username.should eql("moartestsplz") + end + + it "has a svn_password String attribute" do + @resource.svn_password "taftplz" + @resource.svn_password.should eql("taftplz") + end + + it "has a svn_arguments String attribute" do + @resource.svn_arguments "--more-taft plz" + @resource.svn_arguments.should eql("--more-taft plz") + end + + it "has a svn_info_args String attribute" do + @resource.svn_info_args.should be_nil + @resource.svn_info_args("--no-moar-plaintext-creds yep") + @resource.svn_info_args.should == "--no-moar-plaintext-creds yep" + end + + it "takes the depth as an integer for shallow clones" do + @resource.depth 5 + @resource.depth.should == 5 + lambda {@resource.depth "five"}.should raise_error(ArgumentError) + end + + it "defaults to nil depth for a full clone" do + @resource.depth.should be_nil + end + + it "takes a boolean for #enable_submodules" do + @resource.enable_submodules true + @resource.enable_submodules.should be_true + lambda {@resource.enable_submodules "lolz"}.should raise_error(ArgumentError) + end + + it "defaults to not enabling submodules" do + @resource.enable_submodules.should be_false + end + + it "takes a string for the remote" do + @resource.remote "opscode" + @resource.remote.should eql("opscode") + lambda {@resource.remote 1337}.should raise_error(ArgumentError) + end + + it "defaults to ``origin'' for the remote" do + @resource.remote.should == "origin" + end + + it "takes a string for the ssh wrapper" do + @resource.ssh_wrapper "with_ssh_fu" + @resource.ssh_wrapper.should eql("with_ssh_fu") + end + + it "defaults to nil for the ssh wrapper" do + @resource.ssh_wrapper.should be_nil + end + + describe "when it has repository, revision, user, and group" do + before do + @resource.destination("hell") + @resource.repository("apt") + @resource.revision("1.2.3") + @resource.user("root") + @resource.group("super_adventure_club") + end + + it "describes its state" do + state = @resource.state + state[:revision].should == "1.2.3" + end + + it "returns the destination as its identity" do + @resource.identity.should == "hell" + end + end + +end |