chef-cli 3.0.33 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +2 -2
- data/chef-cli.gemspec +1 -1
- data/lib/chef-cli/cli.rb +1 -5
- data/lib/chef-cli/command/generator_commands/generator_generator.rb +2 -2
- data/lib/chef-cli/command/shell_init.rb +1 -1
- data/lib/chef-cli/command/update.rb +1 -1
- data/lib/chef-cli/configurable.rb +1 -1
- data/lib/chef-cli/cookbook_profiler/git.rb +4 -8
- data/lib/chef-cli/policyfile/artifactory_cookbook_source.rb +5 -1
- data/lib/chef-cli/policyfile/comparison_base.rb +1 -0
- data/lib/chef-cli/policyfile/differ.rb +1 -1
- data/lib/chef-cli/policyfile/remote_lock_fetcher.rb +1 -1
- data/lib/chef-cli/policyfile_services/install.rb +1 -1
- data/lib/chef-cli/service_exception_inspectors/http.rb +0 -26
- data/lib/chef-cli/service_exceptions.rb +1 -0
- data/lib/chef-cli/skeletons/code_generator/files/default/gitignore +3 -0
- data/lib/chef-cli/skeletons/code_generator/recipes/cookbook_file.rb +5 -3
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen.yml.erb +1 -1
- data/lib/chef-cli/skeletons/code_generator/templates/default/kitchen_policyfile.yml.erb +1 -1
- data/lib/chef-cli/version.rb +1 -1
- data/spec/test_helpers.rb +1 -1
- data/spec/unit/command/generator_commands/cookbook_file_spec.rb +9 -0
- data/spec/unit/command/generator_commands/cookbook_spec.rb +2 -2
- data/spec/unit/command/generator_commands/generator_generator_spec.rb +2 -2
- data/spec/unit/command/update_spec.rb +0 -8
- data/spec/unit/policyfile/artifactory_cookbook_source_spec.rb +27 -1
- data/spec/unit/policyfile/undo_stack_spec.rb +2 -2
- data/spec/unit/policyfile_install_with_includes_spec.rb +1 -1
- data/spec/unit/policyfile_lock_build_spec.rb +1 -1
- data/spec/unit/policyfile_lock_install_spec.rb +1 -1
- data/spec/unit/policyfile_lock_validation_spec.rb +1 -1
- data/spec/unit/policyfile_services/install_spec.rb +88 -0
- data/spec/unit/service_exception_inspectors/http_spec.rb +3 -17
- metadata +9 -9
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 71469e5a3e7edd6f70574fb215c1c4e24ec88cff76b3a99cf409ed8f5cd34e47
         | 
| 4 | 
            +
              data.tar.gz: f32c5f9cadb21975ac1f4c23bbaf7d1f3fb06c07bdaf19a69d77e6d77c8a523e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 82a94f09af819de04585aa17ccf9de461d02c168816d901ad549a40a019883763e1637083aacf04e5ca3607b5cd7f599e3a638e79b2cebff59d759b8310c4380
         | 
| 7 | 
            +
              data.tar.gz: e473aa54f019c415a9d09674a1a41339b45fdd05ca04f63239d6e29846042ae613db75e1b861a4ef05f285e1a18d23fc18ff29a5905e1b7e7547cac69c414eb1
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -13,8 +13,8 @@ group :test do | |
| 13 13 | 
             
              gem "rspec", "~> 3.8"
         | 
| 14 14 | 
             
              gem "rspec-expectations", "~> 3.8"
         | 
| 15 15 | 
             
              gem "rspec-mocks", "~> 3.8"
         | 
| 16 | 
            -
              gem "cookstyle", " | 
| 17 | 
            -
              gem "chefstyle", "1.2 | 
| 16 | 
            +
              gem "cookstyle", "=7.7.2" # this forces dependabot PRs to open which triggers cookstyle CI on the chef generate command
         | 
| 17 | 
            +
              gem "chefstyle", "=1.6.2"
         | 
| 18 18 | 
             
              gem "test-kitchen", "> 2.5"
         | 
| 19 19 | 
             
              if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.6")
         | 
| 20 20 | 
             
                gem "chef-zero", "~> 14"
         | 
    
        data/chef-cli.gemspec
    CHANGED
    
    
    
        data/lib/chef-cli/cli.rb
    CHANGED
    
    
| @@ -86,7 +86,7 @@ module ChefCLI | |
| 86 86 | 
             
                      # chefcli.generator_cookbook would make this command copy the custom
         | 
| 87 87 | 
             
                      # generator, but that doesn't make sense because the user can easily
         | 
| 88 88 | 
             
                      # do that anyway.
         | 
| 89 | 
            -
                      File.expand_path(" | 
| 89 | 
            +
                      File.expand_path("../../skeletons/code_generator", __dir__)
         | 
| 90 90 | 
             
                    end
         | 
| 91 91 |  | 
| 92 92 | 
             
                    private
         | 
| @@ -109,7 +109,7 @@ module ChefCLI | |
| 109 109 | 
             
                    # @api private
         | 
| 110 110 | 
             
                    def metadata_rb
         | 
| 111 111 | 
             
                      <<~METADATA
         | 
| 112 | 
            -
                        name              | 
| 112 | 
            +
                        name             File.basename(File.dirname(__FILE__))
         | 
| 113 113 | 
             
                        description      'Custom code generator cookbook for use with #{ChefCLI::Dist::PRODUCT}'
         | 
| 114 114 | 
             
                        version          '0.1.0'
         | 
| 115 115 |  | 
| @@ -142,7 +142,7 @@ module ChefCLI | |
| 142 142 | 
             
                  end
         | 
| 143 143 |  | 
| 144 144 | 
             
                  def expand_completion_template_path(basename)
         | 
| 145 | 
            -
                    File.join(File.expand_path(" | 
| 145 | 
            +
                    File.join(File.expand_path("../completions", __dir__), basename)
         | 
| 146 146 | 
             
                  end
         | 
| 147 147 |  | 
| 148 148 | 
             
                  def shell_completion_template_context
         | 
| @@ -91,7 +91,7 @@ module ChefCLI | |
| 91 91 | 
             
                  def run(params = [])
         | 
| 92 92 | 
             
                    return 1 unless apply_params!(params)
         | 
| 93 93 |  | 
| 94 | 
            -
                    attributes_updater.run
         | 
| 94 | 
            +
                    attributes_updater.run if update_attributes_only?
         | 
| 95 95 | 
             
                    installer.run(@cookbooks_to_update, config[:exclude_deps]) unless update_attributes_only?
         | 
| 96 96 | 
             
                    0
         | 
| 97 97 | 
             
                  rescue PolicyfileServiceError => e
         | 
| @@ -33,7 +33,7 @@ class Chef::Config | |
| 33 33 | 
             
                # instead of `chefcli.generator_cookbook`).
         | 
| 34 34 | 
             
                config_strict_mode(true)
         | 
| 35 35 |  | 
| 36 | 
            -
                default(:generator_cookbook, File.expand_path(" | 
| 36 | 
            +
                default(:generator_cookbook, File.expand_path("skeletons/code_generator", __dir__))
         | 
| 37 37 |  | 
| 38 38 | 
             
                config_context(:generator) do
         | 
| 39 39 | 
             
                  config_strict_mode(true)
         | 
| @@ -120,14 +120,10 @@ module ChefCLI | |
| 120 120 | 
             
                    @unborn_branch = false
         | 
| 121 121 | 
             
                    branch
         | 
| 122 122 | 
             
                  rescue Mixlib::ShellOut::ShellCommandFailed => e
         | 
| 123 | 
            -
                    #  | 
| 124 | 
            -
                     | 
| 125 | 
            -
             | 
| 126 | 
            -
                     | 
| 127 | 
            -
                      # if we got here, but verify_ref_cmd didn't error, we don't know why
         | 
| 128 | 
            -
                      # the original git command failed, so re-raise.
         | 
| 129 | 
            -
                      raise e
         | 
| 130 | 
            -
                    end
         | 
| 123 | 
            +
                    # "unborn" branch, i.e. one with no commits or
         | 
| 124 | 
            +
                    # verify_ref_cmd didn't error, we don't know why
         | 
| 125 | 
            +
                    # the original git command failed, so re-raise.
         | 
| 126 | 
            +
                    unborn_branch_ref || raise(e)
         | 
| 131 127 | 
             
                  end
         | 
| 132 128 |  | 
| 133 129 | 
             
                  def unborn_branch_ref
         | 
| @@ -82,10 +82,14 @@ module ChefCLI | |
| 82 82 | 
             
                    "artifactory(#{uri})"
         | 
| 83 83 | 
             
                  end
         | 
| 84 84 |  | 
| 85 | 
            +
                  def artifactory_api_key
         | 
| 86 | 
            +
                    chef_config&.artifactory_api_key || ENV["ARTIFACTORY_API_KEY"]
         | 
| 87 | 
            +
                  end
         | 
| 88 | 
            +
             | 
| 85 89 | 
             
                  private
         | 
| 86 90 |  | 
| 87 91 | 
             
                  def http_connection_for(base_url)
         | 
| 88 | 
            -
                    headers = { "X-Jfrog-Art-API" =>  | 
| 92 | 
            +
                    headers = { "X-Jfrog-Art-API" => artifactory_api_key }
         | 
| 89 93 | 
             
                    @http_connections[base_url] ||= Chef::HTTP::Simple.new(base_url, headers: headers)
         | 
| 90 94 | 
             
                  end
         | 
| 91 95 |  | 
| @@ -18,7 +18,7 @@ | |
| 18 18 | 
             
            require_relative "../policyfile_lock"
         | 
| 19 19 | 
             
            require_relative "lock_fetcher_mixin"
         | 
| 20 20 | 
             
            require_relative "../exceptions"
         | 
| 21 | 
            -
            require " | 
| 21 | 
            +
            require "net/protocol" unless defined?(Net::ProtocolError)
         | 
| 22 22 | 
             
            require "tempfile" unless defined?(Tempfile)
         | 
| 23 23 |  | 
| 24 24 | 
             
            module ChefCLI
         | 
| @@ -61,7 +61,7 @@ module ChefCLI | |
| 61 61 |  | 
| 62 62 | 
             
                    if installing_from_lock?
         | 
| 63 63 | 
             
                      install_from_lock
         | 
| 64 | 
            -
                    elsif cookbooks_to_update.empty? # means update everything
         | 
| 64 | 
            +
                    elsif cookbooks_to_update.empty? || policyfile_lock.nil? # means update everything
         | 
| 65 65 | 
             
                      generate_lock_and_install
         | 
| 66 66 | 
             
                    else
         | 
| 67 67 | 
             
                      update_lock_and_install(cookbooks_to_update, exclude_deps)
         | 
| @@ -33,17 +33,11 @@ module ChefCLI | |
| 33 33 |  | 
| 34 34 | 
             
                  def extended_error_info
         | 
| 35 35 | 
             
                    <<~END
         | 
| 36 | 
            -
                      --- REQUEST DATA ----
         | 
| 37 | 
            -
                      #{http_method} #{uri}
         | 
| 38 | 
            -
                      #{request_headers}
         | 
| 39 | 
            -
                      #{req_body}
         | 
| 40 | 
            -
             | 
| 41 36 | 
             
                      --- RESPONSE DATA ---
         | 
| 42 37 | 
             
                      #{code} #{response_message}
         | 
| 43 38 | 
             
                      #{response_headers}
         | 
| 44 39 |  | 
| 45 40 | 
             
                      #{response_body}
         | 
| 46 | 
            -
             | 
| 47 41 | 
             
                    END
         | 
| 48 42 | 
             
                  end
         | 
| 49 43 |  | 
| @@ -90,30 +84,10 @@ module ChefCLI | |
| 90 84 | 
             
                    headers_s
         | 
| 91 85 | 
             
                  end
         | 
| 92 86 |  | 
| 93 | 
            -
                  def request
         | 
| 94 | 
            -
                    exception.chef_rest_request
         | 
| 95 | 
            -
                  end
         | 
| 96 | 
            -
             | 
| 97 87 | 
             
                  def uri
         | 
| 98 88 | 
             
                    request.uri.to_s + request.path.to_s
         | 
| 99 89 | 
             
                  end
         | 
| 100 90 |  | 
| 101 | 
            -
                  def http_method
         | 
| 102 | 
            -
                    request.method
         | 
| 103 | 
            -
                  end
         | 
| 104 | 
            -
             | 
| 105 | 
            -
                  def request_headers
         | 
| 106 | 
            -
                    headers_s = ""
         | 
| 107 | 
            -
                    request.each_header do |key, value|
         | 
| 108 | 
            -
                      headers_s << key << ": " << value << "\n"
         | 
| 109 | 
            -
                    end
         | 
| 110 | 
            -
                    headers_s
         | 
| 111 | 
            -
                  end
         | 
| 112 | 
            -
             | 
| 113 | 
            -
                  def req_body
         | 
| 114 | 
            -
                    request.body
         | 
| 115 | 
            -
                  end
         | 
| 116 | 
            -
             | 
| 117 91 | 
             
                end
         | 
| 118 92 | 
             
              end
         | 
| 119 93 | 
             
            end
         | 
| @@ -1,7 +1,10 @@ | |
| 1 1 | 
             
            context = ChefCLI::Generator.context
         | 
| 2 2 | 
             
            cookbook_dir = File.join(context.cookbook_root, context.cookbook_name)
         | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 3 | 
            +
            new_file_basename = File.basename(context.new_file_basename)
         | 
| 4 | 
            +
            relative_path = File.dirname(context.new_file_basename)
         | 
| 5 | 
            +
            relative_path.slice! "."
         | 
| 6 | 
            +
            files_dir = File.join(cookbook_dir, 'files', relative_path)
         | 
| 7 | 
            +
            cookbook_file_path = File.join(files_dir, new_file_basename)
         | 
| 5 8 |  | 
| 6 9 | 
             
            directory files_dir do
         | 
| 7 10 | 
             
              recursive true
         | 
| @@ -19,5 +22,4 @@ else | |
| 19 22 | 
             
                source 'cookbook_file.erb'
         | 
| 20 23 | 
             
                helpers(ChefCLI::Generator::TemplateHelper)
         | 
| 21 24 | 
             
              end
         | 
| 22 | 
            -
             | 
| 23 25 | 
             
            end
         | 
| @@ -4,7 +4,7 @@ driver: | |
| 4 4 |  | 
| 5 5 | 
             
            ## The forwarded_port port feature lets you connect to ports on the VM guest via
         | 
| 6 6 | 
             
            ## localhost on the host.
         | 
| 7 | 
            -
            ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports | 
| 7 | 
            +
            ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports
         | 
| 8 8 |  | 
| 9 9 | 
             
            #  network:
         | 
| 10 10 | 
             
            #    - ["forwarded_port", {guest: 80, host: 8080}]
         | 
| @@ -4,7 +4,7 @@ driver: | |
| 4 4 |  | 
| 5 5 | 
             
            ## The forwarded_port port feature lets you connect to ports on the VM guest via
         | 
| 6 6 | 
             
            ## localhost on the host.
         | 
| 7 | 
            -
            ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports | 
| 7 | 
            +
            ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports
         | 
| 8 8 |  | 
| 9 9 | 
             
            #  network:
         | 
| 10 10 | 
             
            #    - ["forwarded_port", {guest: 80, host: 8080}]
         | 
    
        data/lib/chef-cli/version.rb
    CHANGED
    
    
    
        data/spec/test_helpers.rb
    CHANGED
    
    
| @@ -28,4 +28,13 @@ describe ChefCLI::Command::GeneratorCommands::CookbookFile do | |
| 28 28 | 
             
                let(:new_file_name) { "new_file.txt" }
         | 
| 29 29 |  | 
| 30 30 | 
             
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              include_examples "a file generator" do
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                let(:generator_name) { "file" }
         | 
| 35 | 
            +
                let(:generated_files) { [ "files/file/new_file.txt" ] }
         | 
| 36 | 
            +
                let(:new_file_name) { "file/new_file.txt" }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
             | 
| 31 40 | 
             
            end
         | 
| @@ -562,7 +562,7 @@ describe ChefCLI::Command::GeneratorCommands::Cookbook do | |
| 562 562 |  | 
| 563 563 | 
             
                        ## The forwarded_port port feature lets you connect to ports on the VM guest via
         | 
| 564 564 | 
             
                        ## localhost on the host.
         | 
| 565 | 
            -
                        ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports | 
| 565 | 
            +
                        ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports
         | 
| 566 566 |  | 
| 567 567 | 
             
                        #  network:
         | 
| 568 568 | 
             
                        #    - ["forwarded_port", {guest: 80, host: 8080}]
         | 
| @@ -645,7 +645,7 @@ describe ChefCLI::Command::GeneratorCommands::Cookbook do | |
| 645 645 |  | 
| 646 646 | 
             
                        ## The forwarded_port port feature lets you connect to ports on the VM guest via
         | 
| 647 647 | 
             
                        ## localhost on the host.
         | 
| 648 | 
            -
                        ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports | 
| 648 | 
            +
                        ## see also: https://www.vagrantup.com/docs/networking/forwarded_ports
         | 
| 649 649 |  | 
| 650 650 | 
             
                        #  network:
         | 
| 651 651 | 
             
                        #    - ["forwarded_port", {guest: 80, host: 8080}]
         | 
| @@ -26,7 +26,7 @@ describe ChefCLI::Command::GeneratorCommands::GeneratorGenerator do | |
| 26 26 | 
             
              let(:stdout_io) { StringIO.new }
         | 
| 27 27 | 
             
              let(:stderr_io) { StringIO.new }
         | 
| 28 28 |  | 
| 29 | 
            -
              let(:repo_root) { File.expand_path(" | 
| 29 | 
            +
              let(:repo_root) { File.expand_path("../../../..", __dir__) }
         | 
| 30 30 |  | 
| 31 31 | 
             
              let(:builtin_generator_path) { File.join(repo_root, "lib/chef-cli/skeletons/code_generator") }
         | 
| 32 32 |  | 
| @@ -181,7 +181,7 @@ describe ChefCLI::Command::GeneratorCommands::GeneratorGenerator do | |
| 181 181 | 
             
                    metadata_path = File.join(target_dir, "metadata.rb")
         | 
| 182 182 | 
             
                    metadata_content = IO.read(metadata_path)
         | 
| 183 183 | 
             
                    expected_metadata = <<~METADATA
         | 
| 184 | 
            -
                      name              | 
| 184 | 
            +
                      name             File.basename(File.dirname(__FILE__))
         | 
| 185 185 | 
             
                      description      'Custom code generator cookbook for use with #{ChefCLI::Dist::PRODUCT}'
         | 
| 186 186 | 
             
                      version          '0.1.0'
         | 
| 187 187 |  | 
| @@ -132,10 +132,6 @@ describe ChefCLI::Command::Update do | |
| 132 132 | 
             
                context "when the command is successful" do
         | 
| 133 133 | 
             
                  before do
         | 
| 134 134 | 
             
                    expect(install_service).to receive(:run)
         | 
| 135 | 
            -
                    expect(ChefCLI::PolicyfileServices::UpdateAttributes).to receive(:new)
         | 
| 136 | 
            -
                      .with(policyfile: nil, ui: command.ui, root_dir: Dir.pwd, chef_config: anything)
         | 
| 137 | 
            -
                      .and_return(update_attrs_service)
         | 
| 138 | 
            -
                    expect(update_attrs_service).to receive(:run)
         | 
| 139 135 | 
             
                  end
         | 
| 140 136 |  | 
| 141 137 | 
             
                  it "returns 0" do
         | 
| @@ -159,10 +155,6 @@ describe ChefCLI::Command::Update do | |
| 159 155 |  | 
| 160 156 | 
             
                  before do
         | 
| 161 157 | 
             
                    expect(install_service).to receive(:run).and_raise(exception)
         | 
| 162 | 
            -
                    expect(ChefCLI::PolicyfileServices::UpdateAttributes).to receive(:new)
         | 
| 163 | 
            -
                      .with(policyfile: nil, ui: command.ui, root_dir: Dir.pwd, chef_config: anything)
         | 
| 164 | 
            -
                      .and_return(update_attrs_service)
         | 
| 165 | 
            -
                    expect(update_attrs_service).to receive(:run)
         | 
| 166 158 | 
             
                  end
         | 
| 167 159 |  | 
| 168 160 | 
             
                  it "returns 1" do
         | 
| @@ -20,8 +20,9 @@ require "chef-cli/policyfile/source_uri" | |
| 20 20 | 
             
            require "chef-cli/policyfile/artifactory_cookbook_source"
         | 
| 21 21 |  | 
| 22 22 | 
             
            describe ChefCLI::Policyfile::ArtifactoryCookbookSource do
         | 
| 23 | 
            -
              subject { described_class.new(cookbook_source) }
         | 
| 23 | 
            +
              subject { described_class.new(cookbook_source, chef_config: config) }
         | 
| 24 24 |  | 
| 25 | 
            +
              let(:config) { nil }
         | 
| 25 26 | 
             
              let(:cookbook_source) { "https://supermarket.chef.io/api/v1" }
         | 
| 26 27 |  | 
| 27 28 | 
             
              let(:http_connection) { double("Chef::HTTP::Simple") }
         | 
| @@ -56,4 +57,29 @@ describe ChefCLI::Policyfile::ArtifactoryCookbookSource do | |
| 56 57 | 
             
                  expect(subject.source_options_for("apache2", "1.10.4")).to eq(expected_opts)
         | 
| 57 58 | 
             
                end
         | 
| 58 59 | 
             
              end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
              describe "#artifactory_api_key" do
         | 
| 62 | 
            +
                before do
         | 
| 63 | 
            +
                  ENV["ARTIFACTORY_API_KEY"] = "test"
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                context "when config is not present" do
         | 
| 67 | 
            +
                  let(:config) { nil }
         | 
| 68 | 
            +
                  it "should get artifactory key from the env" do
         | 
| 69 | 
            +
                    expect(subject.artifactory_api_key).to eq("test")
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                context "when config is present" do
         | 
| 74 | 
            +
                  let(:config) { double("Chef::Config") }
         | 
| 75 | 
            +
                  it "should get artifactory key from config when key is present" do
         | 
| 76 | 
            +
                    expect(config).to receive(:artifactory_api_key).and_return "test1"
         | 
| 77 | 
            +
                    expect(subject.artifactory_api_key).to eq("test1")
         | 
| 78 | 
            +
                  end
         | 
| 79 | 
            +
                  it "should get artifactory key from env when config is present but has a nil key" do
         | 
| 80 | 
            +
                    expect(config).to receive(:artifactory_api_key).and_return nil
         | 
| 81 | 
            +
                    expect(subject.artifactory_api_key).to eq("test")
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
              end
         | 
| 59 85 | 
             
            end
         | 
| @@ -223,7 +223,7 @@ describe ChefCLI::Policyfile::UndoStack do | |
| 223 223 | 
             
                  end
         | 
| 224 224 |  | 
| 225 225 | 
             
                  it "removes the oldest record" do
         | 
| 226 | 
            -
                    oldest_record_file = undo_stack_files. | 
| 226 | 
            +
                    oldest_record_file = undo_stack_files.min
         | 
| 227 227 |  | 
| 228 228 | 
             
                    undo_stack.push(incremented_undo_record(11))
         | 
| 229 229 |  | 
| @@ -251,7 +251,7 @@ describe ChefCLI::Policyfile::UndoStack do | |
| 251 251 | 
             
                    end
         | 
| 252 252 |  | 
| 253 253 | 
             
                    it "removes the oldest record" do
         | 
| 254 | 
            -
                      oldest_record_file = undo_stack_files. | 
| 254 | 
            +
                      oldest_record_file = undo_stack_files.min
         | 
| 255 255 |  | 
| 256 256 | 
             
                      undo_stack.push(incremented_undo_record(11))
         | 
| 257 257 |  | 
| @@ -19,7 +19,7 @@ require "spec_helper" | |
| 19 19 | 
             
            require "shared/setup_git_cookbooks"
         | 
| 20 20 | 
             
            require "shared/fixture_cookbook_checksums"
         | 
| 21 21 | 
             
            require "chef-cli/policyfile/storage_config"
         | 
| 22 | 
            -
            require "chef-cli/policyfile_lock | 
| 22 | 
            +
            require "chef-cli/policyfile_lock"
         | 
| 23 23 |  | 
| 24 24 | 
             
            describe ChefCLI::PolicyfileLock, "building a lockfile", :skip_on_windows do
         | 
| 25 25 |  | 
| @@ -54,6 +54,10 @@ describe ChefCLI::PolicyfileServices::Install do | |
| 54 54 |  | 
| 55 55 | 
             
              let(:overwrite) { false }
         | 
| 56 56 |  | 
| 57 | 
            +
              let(:cookbooks_to_update) { [] || [ "my_cookbook" ] }
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              let(:cookbooks_to_update_empty) { false }
         | 
| 60 | 
            +
             | 
| 57 61 | 
             
              let(:ui) { TestHelpers::TestUI.new }
         | 
| 58 62 |  | 
| 59 63 | 
             
              let(:install_service) { described_class.new(policyfile: policyfile_rb_name, ui: ui, root_dir: working_dir, overwrite: overwrite) }
         | 
| @@ -153,6 +157,90 @@ describe ChefCLI::PolicyfileServices::Install do | |
| 153 157 |  | 
| 154 158 | 
             
                end
         | 
| 155 159 |  | 
| 160 | 
            +
                context "when cookbook to update is empty and no policy lock exist" do
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                  let(:cookbooks_to_update_empty) { true }
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                  it "create the policy lock" do
         | 
| 165 | 
            +
                    install_service.run(:cookbooks_to_update)
         | 
| 166 | 
            +
                    generated_lock = result_policyfile_lock
         | 
| 167 | 
            +
                    expect(generated_lock.name).to eq("install-example")
         | 
| 168 | 
            +
                    expect(generated_lock.cookbook_locks).to have_key("local-cookbook")
         | 
| 169 | 
            +
                  end
         | 
| 170 | 
            +
             | 
| 171 | 
            +
                  it "checks for policy lock" do
         | 
| 172 | 
            +
                    lock = install_service.policyfile_lock
         | 
| 173 | 
            +
                    expect(lock).to eq(nil)
         | 
| 174 | 
            +
                  end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                context "when cookbook to update is empty and policy lock exist" do
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                  before do
         | 
| 181 | 
            +
                    install_service.dup.run
         | 
| 182 | 
            +
                  end
         | 
| 183 | 
            +
             | 
| 184 | 
            +
                  let(:cookbooks_to_update_empty) { true }
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                  it "create the policy lock" do
         | 
| 187 | 
            +
                    install_service.run(:cookbooks_to_update)
         | 
| 188 | 
            +
                    generated_lock = result_policyfile_lock
         | 
| 189 | 
            +
                    expect(generated_lock.name).to eq("install-example")
         | 
| 190 | 
            +
                    expect(generated_lock.cookbook_locks).to have_key("local-cookbook")
         | 
| 191 | 
            +
                  end
         | 
| 192 | 
            +
             | 
| 193 | 
            +
                  it "checks for policy lock" do
         | 
| 194 | 
            +
                    lock = install_service.policyfile_lock
         | 
| 195 | 
            +
                    expect(lock).to be_an_instance_of(ChefCLI::PolicyfileLock)
         | 
| 196 | 
            +
                    expect(lock.name).to eq("install-example")
         | 
| 197 | 
            +
                    expect(lock.cookbook_locks).to have_key("local-cookbook")
         | 
| 198 | 
            +
                  end
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                context "when cookbook to update is not empty and no policy lock exist" do
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                  let(:cookbooks_to_update) { [ "my_cookbook" ] }
         | 
| 205 | 
            +
             | 
| 206 | 
            +
                  it "create the policy lock" do
         | 
| 207 | 
            +
                    install_service.run(:cookbooks_to_update)
         | 
| 208 | 
            +
                    generated_lock = result_policyfile_lock
         | 
| 209 | 
            +
                    expect(generated_lock.name).to eq("install-example")
         | 
| 210 | 
            +
                    expect(generated_lock.cookbook_locks).to have_key("local-cookbook")
         | 
| 211 | 
            +
                  end
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                  it "checks for policy lock" do
         | 
| 214 | 
            +
                    lock = install_service.policyfile_lock
         | 
| 215 | 
            +
                    expect(lock).to eq(nil)
         | 
| 216 | 
            +
                  end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
                end
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                context "when cookbook to update is not empty and policy lock exist" do
         | 
| 221 | 
            +
             | 
| 222 | 
            +
                  before do
         | 
| 223 | 
            +
                    install_service.dup.run
         | 
| 224 | 
            +
                  end
         | 
| 225 | 
            +
             | 
| 226 | 
            +
                  let(:cookbooks_to_update) { [ "my_cookbook" ] }
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                  it "create the policy lock" do
         | 
| 229 | 
            +
                    install_service.run(:cookbooks_to_update)
         | 
| 230 | 
            +
                    generated_lock = result_policyfile_lock
         | 
| 231 | 
            +
                    expect(generated_lock.name).to eq("install-example")
         | 
| 232 | 
            +
                    expect(generated_lock.cookbook_locks).to have_key("local-cookbook")
         | 
| 233 | 
            +
                  end
         | 
| 234 | 
            +
             | 
| 235 | 
            +
                  it "create the policy lock" do
         | 
| 236 | 
            +
                    lock = install_service.policyfile_lock
         | 
| 237 | 
            +
                    expect(lock).to be_an_instance_of(ChefCLI::PolicyfileLock)
         | 
| 238 | 
            +
                    expect(lock.name).to eq("install-example")
         | 
| 239 | 
            +
                    expect(lock.cookbook_locks).to have_key("local-cookbook")
         | 
| 240 | 
            +
                  end
         | 
| 241 | 
            +
             | 
| 242 | 
            +
                end
         | 
| 243 | 
            +
             | 
| 156 244 | 
             
                context "and a lockfile exists and `overwrite` is specified" do
         | 
| 157 245 |  | 
| 158 246 | 
             
                  let(:overwrite) { true }
         | 
| @@ -16,8 +16,7 @@ | |
| 16 16 | 
             
            #
         | 
| 17 17 |  | 
| 18 18 | 
             
            require "spec_helper"
         | 
| 19 | 
            -
            require "net/http" | 
| 20 | 
            -
            require "chef/monkey_patches/net_http"
         | 
| 19 | 
            +
            require "net/http"
         | 
| 21 20 | 
             
            require "chef-cli/service_exception_inspectors/http"
         | 
| 22 21 |  | 
| 23 22 | 
             
            describe ChefCLI::ServiceExceptionInspectors::HTTP do
         | 
| @@ -64,7 +63,7 @@ describe ChefCLI::ServiceExceptionInspectors::HTTP do | |
| 64 63 | 
             
              end
         | 
| 65 64 |  | 
| 66 65 | 
             
              let(:exception) do
         | 
| 67 | 
            -
                Net::HTTPClientException.new(message, response) | 
| 66 | 
            +
                Net::HTTPClientException.new(message, response)
         | 
| 68 67 | 
             
              end
         | 
| 69 68 |  | 
| 70 69 | 
             
              subject(:inspector) { described_class.new(exception) }
         | 
| @@ -103,23 +102,10 @@ describe ChefCLI::ServiceExceptionInspectors::HTTP do | |
| 103 102 |  | 
| 104 103 | 
             
              end
         | 
| 105 104 |  | 
| 106 | 
            -
              describe "showing the  | 
| 105 | 
            +
              describe "showing the response in extended error info" do
         | 
| 107 106 |  | 
| 108 107 | 
             
                let(:response_body) { "this is the response" }
         | 
| 109 108 |  | 
| 110 | 
            -
                it "shows the request in a format similar to HTTP messages" do
         | 
| 111 | 
            -
                  expected_request_string = <<~E
         | 
| 112 | 
            -
                    --- REQUEST DATA ----
         | 
| 113 | 
            -
                    POST /organizations/chef-oss-dev/cookbooks
         | 
| 114 | 
            -
                    content-type: application/json
         | 
| 115 | 
            -
                    accept: application/json
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                    this is the request
         | 
| 118 | 
            -
             | 
| 119 | 
            -
                  E
         | 
| 120 | 
            -
                  expect(inspector.extended_error_info).to include(expected_request_string)
         | 
| 121 | 
            -
                end
         | 
| 122 | 
            -
             | 
| 123 109 | 
             
                it "shows the response in a format similar to HTTP messages" do
         | 
| 124 110 | 
             
                  expected_response_string = <<~E
         | 
| 125 111 | 
             
                    --- RESPONSE DATA ---
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: chef-cli
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 3. | 
| 4 | 
            +
              version: 3.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Chef Software, Inc.
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2021-02-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: mixlib-cli
         | 
| @@ -102,22 +102,22 @@ dependencies: | |
| 102 102 | 
             
              name: solve
         | 
| 103 103 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 104 104 | 
             
                requirements:
         | 
| 105 | 
            -
                - - ">"
         | 
| 106 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 107 | 
            -
                    version: '2.0'
         | 
| 108 105 | 
             
                - - "<"
         | 
| 109 106 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 107 | 
             
                    version: '5.0'
         | 
| 108 | 
            +
                - - ">"
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '2.0'
         | 
| 111 111 | 
             
              type: :runtime
         | 
| 112 112 | 
             
              prerelease: false
         | 
| 113 113 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 114 114 | 
             
                requirements:
         | 
| 115 | 
            -
                - - ">"
         | 
| 116 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            -
                    version: '2.0'
         | 
| 118 115 | 
             
                - - "<"
         | 
| 119 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| 120 117 | 
             
                    version: '5.0'
         | 
| 118 | 
            +
                - - ">"
         | 
| 119 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 120 | 
            +
                    version: '2.0'
         | 
| 121 121 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 122 122 | 
             
              name: addressable
         | 
| 123 123 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -601,7 +601,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 601 601 | 
             
                - !ruby/object:Gem::Version
         | 
| 602 602 | 
             
                  version: '0'
         | 
| 603 603 | 
             
            requirements: []
         | 
| 604 | 
            -
            rubygems_version: 3. | 
| 604 | 
            +
            rubygems_version: 3.1.4
         | 
| 605 605 | 
             
            signing_key: 
         | 
| 606 606 | 
             
            specification_version: 4
         | 
| 607 607 | 
             
            summary: A streamlined development and deployment workflow for Chef platform.
         |