spec/kitchen/transport_spec.rb in test-kitchen-1.6.0 vs spec/kitchen/transport_spec.rb in test-kitchen-1.7.0

- old
+ new

@@ -1,112 +1,112 @@ -# -*- encoding: utf-8 -*- -# -# Author:: Matt Wrock (<matt@mattwrock.com>) -# -# Copyright (C) 2014, Matt Wrock -# -# 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_relative "../spec_helper" - -require "kitchen/configurable" -require "kitchen/errors" -require "kitchen/logging" -require "kitchen/transport" -require "kitchen/transport/base" - -module Kitchen - - module Transport - - class Coolbeans < Kitchen::Transport::Base - end - - class ItDepends < Kitchen::Transport::Base - - attr_reader :verify_call_count - - def initialize(config = {}) - @verify_call_count = 0 - super - end - - def verify_dependencies - @verify_call_count += 1 - end - end - - class UnstableDepends < Kitchen::Transport::Base - - def verify_dependencies - raise UserError, "Oh noes, you don't have software!" - end - end - end -end - -describe Kitchen::Transport do - - describe ".for_plugin" do - - before do - Kitchen::Transport.stubs(:require).returns(true) - end - - it "returns a transport object of the correct class" do - transport = Kitchen::Transport.for_plugin("coolbeans", {}) - - transport.must_be_kind_of Kitchen::Transport::Coolbeans - end - - it "returns a transport initialized with its config" do - transport = Kitchen::Transport.for_plugin("coolbeans", :foo => "bar") - - transport[:foo].must_equal "bar" - end - - it "calls #verify_dependencies on the transport object" do - transport = Kitchen::Transport.for_plugin("it_depends", {}) - - transport.verify_call_count.must_equal 1 - end - - it "calls #verify_dependencies once per transport require" do - Kitchen::Transport.stubs(:require).returns(true, false) - transport1 = Kitchen::Transport.for_plugin("it_depends", {}) - transport1.verify_call_count.must_equal 1 - transport2 = Kitchen::Transport.for_plugin("it_depends", {}) - - transport2.verify_call_count.must_equal 0 - end - - it "raises ClientError if the transport could not be required" do - Kitchen::Transport.stubs(:require).raises(LoadError) - - proc { Kitchen::Transport.for_plugin("coolbeans", {}) }. - must_raise Kitchen::ClientError - end - - it "raises ClientError if the transport's class constant was not found" do - # pretend require worked - Kitchen::Transport.stubs(:require).returns(true) - - proc { Kitchen::Transport.for_plugin("nope", {}) }. - must_raise Kitchen::ClientError - end - - it "raises UserError if #verify_dependencies failes" do - proc { Kitchen::Transport.for_plugin("unstable_depends", {}) }. - must_raise Kitchen::UserError - end - end -end +# -*- encoding: utf-8 -*- +# +# Author:: Matt Wrock (<matt@mattwrock.com>) +# +# Copyright (C) 2014, Matt Wrock +# +# 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_relative "../spec_helper" + +require "kitchen/configurable" +require "kitchen/errors" +require "kitchen/logging" +require "kitchen/transport" +require "kitchen/transport/base" + +module Kitchen + + module Transport + + class Coolbeans < Kitchen::Transport::Base + end + + class ItDepends < Kitchen::Transport::Base + + attr_reader :verify_call_count + + def initialize(config = {}) + @verify_call_count = 0 + super + end + + def verify_dependencies + @verify_call_count += 1 + end + end + + class UnstableDepends < Kitchen::Transport::Base + + def verify_dependencies + raise UserError, "Oh noes, you don't have software!" + end + end + end +end + +describe Kitchen::Transport do + + describe ".for_plugin" do + + before do + Kitchen::Transport.stubs(:require).returns(true) + end + + it "returns a transport object of the correct class" do + transport = Kitchen::Transport.for_plugin("coolbeans", {}) + + transport.must_be_kind_of Kitchen::Transport::Coolbeans + end + + it "returns a transport initialized with its config" do + transport = Kitchen::Transport.for_plugin("coolbeans", :foo => "bar") + + transport[:foo].must_equal "bar" + end + + it "calls #verify_dependencies on the transport object" do + transport = Kitchen::Transport.for_plugin("it_depends", {}) + + transport.verify_call_count.must_equal 1 + end + + it "calls #verify_dependencies once per transport require" do + Kitchen::Transport.stubs(:require).returns(true, false) + transport1 = Kitchen::Transport.for_plugin("it_depends", {}) + transport1.verify_call_count.must_equal 1 + transport2 = Kitchen::Transport.for_plugin("it_depends", {}) + + transport2.verify_call_count.must_equal 0 + end + + it "raises ClientError if the transport could not be required" do + Kitchen::Transport.stubs(:require).raises(LoadError) + + proc { Kitchen::Transport.for_plugin("coolbeans", {}) }. + must_raise Kitchen::ClientError + end + + it "raises ClientError if the transport's class constant was not found" do + # pretend require worked + Kitchen::Transport.stubs(:require).returns(true) + + proc { Kitchen::Transport.for_plugin("nope", {}) }. + must_raise Kitchen::ClientError + end + + it "raises UserError if #verify_dependencies failes" do + proc { Kitchen::Transport.for_plugin("unstable_depends", {}) }. + must_raise Kitchen::UserError + end + end +end