control 'chef workstation functionality' do
  title 'Chef workstation packages and configs'

  describe package('chefdk') do
    it { should be_installed }
  end

  chefdk_tools = %w(
    jsonlint
    knife-block
    rubocop
  )
  chefdk_tools.each do |tool|
    describe gem(tool, '/opt/chefdk/embedded/bin/gem') do
      it { should be_installed }
    end
  end

  describe directory('/var/lib/jenkins/.chef') do
    it { should exist }
    its('group') { should eq 'jenkins' }
    its('owner') { should eq 'jenkins' }
    its('mode') { should cmp '0750' }
  end

  require 'json'

  data_bag_path = 'chef_repo/data_bags/secrets/jenkins_chef_workstation.json'
  data_bag_item = JSON.parse(File.read(data_bag_path)).to_hash

  user_home = '/var/lib/jenkins'
  data_bag_item['chef_servers'].each do |chef_server|
    describe file("#{user_home}/.chef/knife-#{chef_server['name']}.rb") do
      it { should exist }
      its('group') { should eq 'jenkins' }
      its('owner') { should eq 'jenkins' }
      its('mode') { should cmp '0750' }
    end
    describe file("#{user_home}/.chef/#{chef_server['username']}-#{chef_server['name']}.pem") do
      it { should exist }
      its('group') { should eq 'jenkins' }
      its('owner') { should eq 'jenkins' }
      its('mode') { should cmp '0600' }
      its('content') { should eq chef_server['key'] }
    end
    next unless chef_server['default']
    describe file("#{user_home}/.chef/knife.rb") do
      it { should be_symlink }
      it { should be_linked_to "#{user_home}/.chef/knife-#{chef_server['name']}.rb" }
    end
  end

  describe file("#{user_home}/.bash_profile") do
    its('content') { should match(/eval \"\$\(chef shell-init bash\)\"/) }
  end
end
