require 'chef/encrypted_data_bag_item'

module EncryptedDataBag
  def setup
    super
    FileUtils.cp $base_dir.join('support', 'data_bag_key'), 'data_bag_key'
    FileUtils.cp_r $base_dir.join('support', 'secret_cookbook'), 'site-cookbooks/secret_cookbook'
    File.open('.chef/knife.rb', 'a') do |f|
      f.puts 'encrypted_data_bag_secret "data_bag_key"'
    end
    @password = "essential particles busy loud"
    create_data_bag
  end

  def create_data_bag
    secret = Chef::EncryptedDataBagItem.load_secret('data_bag_key')
    data = {"id" => "passwords", "admin" => @password}
    encrypted_data = Chef::EncryptedDataBagItem.encrypt_data_bag_item(data, secret)
    write_json_file('data_bags/dev/passwords.json', encrypted_data)
  end

  # Test that we can read an encrypted data bag value
  # NOTE: This shells out to ssh, so may not be windows-compatible
  def test_reading_encrypted_data_bag
    write_nodefile(run_list: ["recipe[secret_cookbook]"])
    assert_subcommand "cook"
    actual = `ssh #{connection_string} cat /etc/admin_password`
    assert_equal @password, actual
  end
end
