require "helper"
require "inspec/dependency_loader"

describe "dependency_loader" do
  let(:config_dir_path) { File.expand_path "test/fixtures/config_dirs" }
  let(:gem_list) { [{ name: "inspec-test-fixture", version: "0.1.0" }] }

  def reset_globals
    ENV["HOME"] = Dir.home
  end

  before(:each) do
    reset_globals
    ENV["HOME"] = File.join(config_dir_path, "test-fixture-1-float/gems/2.7.0")
  end

  after(:each) do
    reset_globals
  end

  let(:gem_path) { [ENV["HOME"]] }
  let(:dependency_loader) { Inspec::DependencyLoader.new(gem_path, gem_list) }

  describe "load" do
    it "loads the gem dependency if already installed on the given gem path." do
      result = dependency_loader.load
      _(result).must_equal gem_list
    end

    it "raises error if the gem dependency not exist on the given gem path." do
      dependency_loader.gem_list = [{ name: "test_gem", version: "0.0.1" }]
      err = _ { dependency_loader.load }.must_raise Inspec::GemDependencyLoadError
      _(err.message).must_equal "Unable to resolve dependency: user requested \'test_gem (= 0.0.1)\'"
    end
  end

  describe "gem_installed?" do
    it "returns the list of gems installed if gem already installed" do
      result = dependency_loader.gem_installed?("inspec-test-fixture")
      _(result).must_equal true
    end

    it "returns nil if specified gem is not already installed." do
      result = dependency_loader.gem_installed?("test_gem")
      _(result).must_equal false
    end
  end

  describe "gem_version_installed?" do
    it "returns the list of gems installed if gem with specified version is already installed" do
      result = dependency_loader.gem_version_installed?("inspec-test-fixture", "0.1.0")
      _(result).must_equal true
    end

    it "returns nil if gem with specified version is not already installed." do
      result = dependency_loader.gem_version_installed?("test_gem", "0.0.1")
      _(result).must_equal false
    end
  end
end
