require 'minitest/spec'

describe_recipe 'haproxy::default' do
  include MiniTest::Chef::Resources
  include MiniTest::Chef::Assertions

  it 'installs haproxy' do
    package('haproxy').must_be_installed
  end

  it 'sets up /etc/default/haproxy for only debian based systems' do
    case node[:platform]
    when "debian","ubuntu"
      file('/etc/default/haproxy').must_exist.with(:mode, '644').and(:owner, 'root').and(:group, 'root')
    else
      file('/etc/default/haproxy').wont_exist
    end
  end

  it 'enables and starts haproxy' do
    service('haproxy').must_be_enabled
    service('haproxy').must_be_running
  end

  it 'creates haproxy.cfg' do
    file('/etc/haproxy/haproxy.cfg').must_exist.with(:mode, '644').and(:owner, 'root').and(:group, 'root')
  end

  it 'sets up configuration' do
    file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:global_max_connections]
    file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:default_max_connections]
    file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:client_timeout]
    file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:server_timeout]
    file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:queue_timeout]
    file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:connect_timeout]
    file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:http_request_timeout]
    if node[:haproxy][:enable_stats]
      file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:stats_user]
      file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:stats_password]
      file('/etc/haproxy/haproxy.cfg').must_include node[:haproxy][:stats_url]
    end
  end
end
