require 'rspec'
require 'moo_moo'
require 'vcr'
require 'extlib'

MooMoo.configure do |config|
  config.host = ENV['OPENSRS_TEST_URL']
  config.key = ENV['OPENSRS_TEST_KEY']
  config.user = ENV['OPENSRS_TEST_USER']
  config.pass = ENV['OPENSRS_TEST_PASS']
end

VCR.config do |c|
  c.cassette_library_dir = 'spec/vcr_cassettes'
  c.stub_with :fakeweb

  c.default_cassette_options = {:record => :new_episodes, :match_requests_on => [:uri]}
end

def requires_attr(attr, &block)
  expect { block.call }.to raise_error(MooMoo::MooMooArgumentError, /Missing required parameter: #{attr}/i)
end

def live_test?
  !ENV['OPENSRS_REAL'].nil?
end

def random_domain
  "domainthatsnottaken#{Time.now.to_i}.com"
end

def test_contacts
  contact = {
    :first_name  => "Owen",
    :last_name   => "Ottway",
    :phone       => "+1.4165550123x1902",
    :fax         => "+1.4165550124",
    :email       => "ottway@example.com",
    :org_name    => "Example Inc.",
    :address1    => "32 Oak Street",
    :address2    => "Suite 500",
    :address3    => "Owner",
    :city        => "SomeCity",
    :state       => "CA",
    :country     => "US",
    :postal_code => "90210",
    :url         => "http://www.example.com"
  }

  out = {
    :title   => "blahblah",
    :owner   => contact,
    :admin   => contact,
    :billing => contact,
    :tech    => contact
  }
end

RSpec.configure do |c|
  c.extend VCR::RSpec::Macros
  c.before(:each) do
    if live_test?
      MooMoo.configure do |config|
        config.host = ENV['OPENSRS_TEST_URL']
        config.key = ENV['OPENSRS_TEST_KEY']
        config.user = ENV['OPENSRS_TEST_USER']
        config.pass = ENV['OPENSRS_TEST_PASS']
      end
    else
      MooMoo.configure do |config|
        config.host = 'server.com'
        config.key = '123key'
        config.user = 'opensrs_user'
        config.pass = 'password'
      end
    end
  end
end

RSpec::Matchers.define :have_attr_accessor do |attribute|
  match do |object|
    object.respond_to?(attribute) && object.respond_to?("#{attribute}=")
  end

  description do
    "have attr_accessor :#{attribute}"
  end
end