require 'json'

control 'orchard_repo' do
  title 'Checking orchard_repo recipe'

  describe command('yum repolist') do
    its('stdout') { should include 'mysql56-community' }
  end

  packages = %w(
    freetype-devel
    ftp
    gcc
    git
    httpd
    httpd-devel
    libevent
    libjpeg-turbo
    libjpeg-turbo-devel
    libmcrypt
    libmcrypt-devel
    libmemcached
    libpng-devel
    libtiff
    libtiff-devel
    libxml2-devel
    mysql-community-client
    mysql-community-devel
    postgresql
    postgresql-devel
    openssl-devel
    s3cmd
    samba-common
    sendmail
    sqlite-devel
    unzip
    zip
  )

  packages.each do |package|
    describe package(package) do
      it { should be_installed }
    end
  end

  attribute_file = '/tmp/kitchen/node_attributes.json'
  if file(attribute_file).exist?
    node = json(attribute_file).params

    user_home = Dir.home(node['default']['ssh']['jenkins_user'])
    pub_key = 'AAAAB3NzaC1yc2EAAAADAQABAAACAQDQLyir3adlxEtThY9PLvFz3hc26hFRfsnUs9tyb2IrKMATE8bL6rIjDGL3/W6X0uzjRPmfaXMxCIV3b1MjBUvrYIG2pVgJuXC6Q20+cdK7H3ho8+dyeYjEYbz4AhvGCNUXnolT2JmCbk0r+FfFU5g624TlbA5Xj5/9eh5aase1XAXN/aTrbBfbHc4GX6/iU+7TyVbK9jBOLzyxs07avnv0qhcDX5NMNVIo0h2MbqZIf4VvprnUahyxRRW1pGhKk2ySC8WnySNvgHkZolnGIOzESX4Xiqi0Bch/XkSwTvp1acouP5nEnWAUY7EkPjexd5yCgp/Jl/VX3Adwd1gBXFhldW3vTpv1uTydslwnZ1+tlJQ/zkvAKRB2lCDiNf+Il8v2v7Oggib9Ec9O+OIznbDlC1SVg46Icg2/uKSlEgfkltCN+H7fbq6Ai9IVlUQ0ICS/OJoN3zyXYip3TVCOjGY7GfV8Rx3Q+rbLVN2DELJk0H1Q839Mk01cVukapvSjLAz1b17i8+aeU8IqU7xpsDlgqO+fBjLoDAGaBmdmsFB6x2gz5jNq076tXT1vaeA9beepRdX2IEm0x2yE35zZd0r5WLkx2E9Z6duGw4U9ZkD5spIrSUYp10DdRyt4HZ8g0IbYDAH0TxGayboE0e5DJ0hpnFFzHk4OKbwrVb8P9NZDtQ=='
    describe file("#{user_home}/.ssh/authorized_keys") do
      it { should exist }
      its('content') { should include pub_key }
    end

    git_directories = %w(
      /var/www/html
    )

    git_directories.each do |directory_name|
      describe directory(directory_name) do
        it { should exist }
        its('owner') { should eq node['default']['git']['owner'] }
        its('group') { should eq node['default']['git']['group'] }
        its('mode') { should cmp '0755' }
      end
    end

    # Lifehook for checking git repositories
    repo_url = 'git@github.com:/theorchard/orchard.git'
    describe file('/var/www/html/.git/config') do
      it { should exist }
      its('owner') { should eq node['default']['git']['owner'] }
      its('group') { should eq node['default']['git']['group'] }
      its('content') { should match(/url = #{repo_url}/) }
    end

  else
    puts "File #{attribute_file} does not exist, skipping attribute-depending checks"
  end
end
