# # Copyright:: Copyright (c) Chef Software 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 "support/shared/integration/integration_helper" require "support/shared/context/config" require "chef/knife/cookbook_show" describe "knife cookbook show", :workstation do include IntegrationSupport include KnifeSupport include_context "default config options" when_the_chef_server "has a cookbook" do before do cookbook "x", "1.0.0", { "recipes" => { "default.rb" => "file 'n'", "x.rb" => "" } } cookbook "x", "0.6.5" end it "knife cookbook show x shows all the versions" do knife("cookbook show x").should_succeed "x 1.0.0 0.6.5\n" end # rubocop:disable Layout/TrailingWhitespace it "knife cookbook show x 1.0.0 shows the correct version" do knife("cookbook show x 1.0.0").should_succeed <<~EOM cookbook_name: x frozen?: false metadata: chef_versions: dependencies: description: eager_load_libraries: true gems: issues_url: license: All rights reserved long_description: maintainer: maintainer_email: name: x ohai_versions: platforms: privacy: false providing: x: >= 0.0.0 x::x: >= 0.0.0 recipes: x: x::x: source_url: version: 1.0.0 name: x-1.0.0 recipes: checksum: 4631b34cf58de10c5ef1304889941b2e name: recipes/default.rb path: recipes/default.rb specificity: default url: http://127.0.0.1:8900/file_store/checksums/4631b34cf58de10c5ef1304889941b2e checksum: d41d8cd98f00b204e9800998ecf8427e name: recipes/x.rb path: recipes/x.rb specificity: default url: http://127.0.0.1:8900/file_store/checksums/d41d8cd98f00b204e9800998ecf8427e root_files: checksum: 8226671f751ba102dea6a6b6bd32fa8d name: metadata.rb path: metadata.rb specificity: default url: http://127.0.0.1:8900/file_store/checksums/8226671f751ba102dea6a6b6bd32fa8d version: 1.0.0 EOM end it "knife cookbook show x 1.0.0 metadata shows the metadata" do knife("cookbook show x 1.0.0 metadata").should_succeed <<~EOM chef_versions: dependencies: description: eager_load_libraries: true gems: issues_url: license: All rights reserved long_description: maintainer: maintainer_email: name: x ohai_versions: platforms: privacy: false providing: x: >= 0.0.0 x::x: >= 0.0.0 recipes: x: x::x: source_url: version: 1.0.0 EOM end it "knife cookbook show x 1.0.0 recipes shows all the recipes" do knife("cookbook show x 1.0.0 recipes").should_succeed <<~EOM checksum: 4631b34cf58de10c5ef1304889941b2e name: recipes/default.rb path: recipes/default.rb specificity: default url: http://127.0.0.1:8900/file_store/checksums/4631b34cf58de10c5ef1304889941b2e checksum: d41d8cd98f00b204e9800998ecf8427e name: recipes/x.rb path: recipes/x.rb specificity: default url: http://127.0.0.1:8900/file_store/checksums/d41d8cd98f00b204e9800998ecf8427e EOM end # rubocop:enable Layout/TrailingWhitespace it "knife cookbook show x 1.0.0 recipes default.rb shows the default recipe" do knife("cookbook show x 1.0.0 recipes default.rb").should_succeed "file 'n'\n" end it "knife cookbook show with a non-existent file displays an error" do expect { knife("cookbook show x 1.0.0 recipes moose.rb") }.to raise_error(Chef::Exceptions::FileNotFound) end it "knife cookbook show with a non-existent version displays an error" do expect { knife("cookbook show x 1.0.1") }.to raise_error(Net::HTTPClientException) end it "knife cookbook show with a non-existent cookbook displays an error" do expect { knife("cookbook show y") }.to raise_error(Net::HTTPClientException) end end end