# # Author:: Daniel DeLeo () # Author:: Juanje Ojeda () # Copyright:: Copyright (c) 2011-2012 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' require 'chef/knife/core/object_loader' describe Chef::Knife::Core::ObjectLoader do before(:each) do @knife = Chef::Knife.new @stdout = StringIO.new @knife.ui.stub!(:stdout).and_return(@stdout) Dir.chdir(File.join(CHEF_SPEC_DATA, 'object_loader')) end shared_examples_for "Chef object" do |chef_class| it "should create a #{chef_class} object" do @object.should be_a_kind_of(chef_class) end it "should has a attribute 'name'" do @object.name.should eql('test') end end { 'nodes' => Chef::Node, 'roles' => Chef::Role, 'environments' => Chef::Environment }.each do |repo_location, chef_class| describe "when the file is a #{chef_class}" do before do @loader = Chef::Knife::Core::ObjectLoader.new(chef_class, @knife.ui) end describe "when the file is a Ruby" do before do @object = @loader.load_from(repo_location, 'test.rb') end it_behaves_like "Chef object", chef_class end #NOTE: This is check for the bug described at CHEF-2352 describe "when the file is a JSON" do describe "and it has defined 'json_class'" do before do @object = @loader.load_from(repo_location, 'test_json_class.json') end it_behaves_like "Chef object", chef_class end describe "and it has not defined 'json_class'" do before do @object = @loader.load_from(repo_location, 'test.json') end it_behaves_like "Chef object", chef_class end end end end end