require 'spec_helper'

module Omnibus
  describe Config do
    it 'extends Mixlib::Config' do
      expect(described_class).to be_a(Mixlib::Config)
    end

    before do
      described_class.reset
      stub_ohai(platform: 'linux')
    end

    shared_examples 'a configurable' do |id, default|
      it "responds to .#{id}" do
        expect(described_class).to have_method_defined(id)
      end

      it ".#{id} defaults to #{default.inspect}" do
        expect(described_class.send(id)).to eq(default)
      end
    end

    include_examples 'a configurable', :cache_dir, '/var/cache/omnibus/cache'
    include_examples 'a configurable', :install_path_cache_dir, '/var/cache/omnibus/cache/install_path'
    include_examples 'a configurable', :source_dir, '/var/cache/omnibus/src'
    include_examples 'a configurable', :build_dir, '/var/cache/omnibus/build'
    include_examples 'a configurable', :package_dir, '/var/cache/omnibus/pkg'
    include_examples 'a configurable', :package_tmp, '/var/cache/omnibus/pkg-tmp'
    include_examples 'a configurable', :project_root, Dir.pwd
    include_examples 'a configurable', :install_dir, '/opt/chef'
    include_examples 'a configurable', :build_dmg, true
    include_examples 'a configurable', :dmg_window_bounds, '100, 100, 750, 600'
    include_examples 'a configurable', :dmg_pkg_position, '535, 50'
    include_examples 'a configurable', :use_s3_caching, false
    include_examples 'a configurable', :s3_bucket, nil
    include_examples 'a configurable', :s3_access_key, nil
    include_examples 'a configurable', :release_s3_bucket, nil
    include_examples 'a configurable', :release_s3_access_key, nil
    include_examples 'a configurable', :release_s3_secret_key, nil
    include_examples 'a configurable', :override_file, nil
    include_examples 'a configurable', :software_gem, 'omnibus-software'
    include_examples 'a configurable', :solaris_compiler, nil
    include_examples 'a configurable', :append_timestamp, true
    include_examples 'a configurable', :build_retries, 3

    context 'on Windows' do
      before do
        stub_ohai(platform: 'windows')
        stub_const('File::ALT_SEPARATOR', '\\')
      end

      include_examples 'a configurable', :cache_dir, 'C:\\omnibus-ruby\\cache'
      include_examples 'a configurable', :install_path_cache_dir, 'C:\\omnibus-ruby\\cache\\install_path'
      include_examples 'a configurable', :source_dir, 'C:\\omnibus-ruby\\src'
      include_examples 'a configurable', :build_dir, 'C:\\omnibus-ruby\\build'
      include_examples 'a configurable', :package_dir, 'C:\\omnibus-ruby\\pkg'
      include_examples 'a configurable', :package_tmp, 'C:\\omnibus-ruby\\pkg-tmp'
    end
  end
end