# encoding: utf-8
# author: Christoph Hartmann
# author: Dominik Richter
# author: Joe Nuspl

require 'helper'
require 'inspec/resource'

describe 'Inspec::Resources::Gem' do
  it 'verify gem is not installed' do
    resource = load_resource('gem', 'not-installed')
    _(resource.installed?).must_equal false
  end

  it 'verify gem package detail parsing' do
    resource = load_resource('gem', 'rubocop')
    pkg = {
      name: 'rubocop',
      version: '0.33.0',
      type: 'gem',
      installed: true,
    }
    _(resource.installed?).must_equal true
    _(resource.info).must_equal pkg
    _(resource.gem_binary).must_equal 'gem'
  end

  it 'specifying gem binary' do
    resource = load_resource('gem', 'pry', '/opt/ruby-2.3.1/embedded/bin/gem')
    pkg = {
      name: 'pry',
      version: '0.10.4',
      type: 'gem',
      installed: true,
    }
    _(resource.installed?).must_equal true
    _(resource.info).must_equal pkg
    _(resource.gem_binary).must_equal '/opt/ruby-2.3.1/embedded/bin/gem'
  end

  it 'verify gem in :chef' do
    resource = load_resource('gem', 'chef-sugar', :chef)
    pkg = {
      name: 'chef-sugar',
      version: '3.4.0',
      type: 'gem',
      installed: true,
    }
    _(resource.installed?).must_equal true
    _(resource.info).must_equal pkg
    _(resource.gem_binary).must_equal '/opt/chef/embedded/bin/gem'
  end

  it 'verify gem in :chef on windows' do
    resource = MockLoader.new(:windows).load_resource('gem', 'json', :chef)
    pkg = {
      name: 'json',
      version: '1.8.3',
      type: 'gem',
      installed: true,
    }
    _(resource.installed?).must_equal true
    _(resource.info).must_equal pkg
    _(resource.gem_binary).must_equal 'c:\opscode\chef\embedded\bin\gem.bat'
  end

  it 'verify gem in :chef_server' do
    resource = load_resource('gem', 'knife-backup', :chef_server)
    pkg = {
      name: 'knife-backup',
      version: '0.0.12',
      type: 'gem',
      installed: true,
    }
    _(resource.installed?).must_equal true
    _(resource.info).must_equal pkg
    _(resource.gem_binary).must_equal '/opt/opscode/embedded/bin/gem'
  end
end