require 'chefspec'
require 'chefspec/berkshelf'

describe 'irrigate-sqlrelay::default' do
  before do
    stub_data_bag('secrets').and_return(%w(test_data_bag test_creds))
    stub_data_bag_item('secrets', 'test_data_bag').and_return(
      connection_user: 'user', connection_password: 'password')

    stub_data_bag_item('secrets', 'test_creds').and_return(
      username: 'user', password: 'password')

    allow(Chef::EncryptedDataBagItem).to receive(:load).with('secrets', 'test_data_bag').and_return(connection_user: 'user', connection_password: 'password')
    allow(Chef::EncryptedDataBagItem).to receive(:load).with('secrets', 'test_creds').and_return(username: 'user', password: 'password')
  end
  let(:chef_run) do
    ChefSpec::SoloRunner.new(platform: 'centos', version: '7.3.1611') do |node|
      node.normal['sqlrelay']['instances'] = {
        'instance_test' => {
          'name' => 'test',
          'connection_data_bag_name' => 'test_data_bag',
          'sqlrelay_credentials' => 'test_creds',
        },
      }
    end.converge(described_recipe)
  end

  it 'create a yum_repository called orchard-sqlrelay' do
    expect(chef_run).to create_yum_repository('orchard-sqlrelay')
  end

  it 'create a yum_repository called orchard-snowflake' do
    expect(chef_run).to create_yum_repository('orchard-snowflake')
  end

  packages = %w(
    epel-release
    gcc
    gcc-c++
    krb5-devel
    libcurl-devel
    libedit-devel
    libiodbc
    make
    openssl-devel
    pygpgme
    rudiments
    rudiments-debuginfo
    rudiments-devel
    sqlrelay
    sqlrelay-c++
    sqlrelay-c++-devel
    sqlrelay-c
    sqlrelay-c-devel
    sqlrelay-cachemanager
    sqlrelay-clients
    sqlrelay-common
    sqlrelay-common-devel
    sqlrelay-debuginfo
    sqlrelay-odbc
    sqlrelay-router
    sqlrelay-server-devel
    odbc-sqlrelay
    unixODBC
    unixODBC-devel
    unzip
    zip
  )

  packages.each do |package|
    it "installs #{package}" do
      expect(chef_run).to install_package(package)
    end
  end

  it 'installs snowflake driver with specific version' do
    expect(chef_run).to install_package('snowflake-odbc').with(version: '2.13.0-1')
  end

  it 'creates a template for sqlrelay' do
    expect(chef_run).to create_template('/etc/sqlrelay.conf.d/snowflake.conf').with(
      connection_user: connection_user,
      connection_password: connection_password,
      username: username,
      password: password
    )
  end
end
