require 'rubygems'
require 'require_relative' if RUBY_VERSION < '1.9'

require_relative 'common.rb'

describe Deltacloud::API do

  before do
    def app; run_frontend; end
  end

  it 'has the config set property' do
    Deltacloud::config[:deltacloud].must_be_kind_of Deltacloud::Server
    root_url.must_equal Deltacloud[:deltacloud].root_url
  end

  it 'must provide the root_url entrypoint' do
    get root_url
    status.must_equal 200
    xml.root.name.must_equal 'api'
  end

  it 'must advertise current API version in response headers' do
    get root_url
    headers['Server'].must_match(/Apache-Deltacloud\/(\d+).(\d+).(\d+)/)
    xml.root.name.must_equal 'api'
  end

  it 'must advertise current API driver in response headers' do
    get root_url
    headers['X-Deltacloud-Driver'].must_equal Deltacloud[:deltacloud].default_driver.to_s
    xml.root.name.must_equal 'api'
  end

  it 'must force authentication when :force_auth param set' do
    get root_url, :force_auth => '1'
    status.must_equal 401
    authorize 'mockuser', 'mockpassword'
    get root_url, :force_auth => '1'
    status.must_equal 200
  end

  it 'must return list of collections on OPTIONS' do
    options root_url
    headers['Allow'].wont_be_nil
    headers['Allow'].split(',').must_include 'Sinatra::Rabbit::DriversCollection'
  end

  it 'must support setting driver and provider using POST' do
    post root_url, { :driver => :ec2 }
    headers['Location'].wont_be_nil
    headers['Location'].must_match(/\/api;driver=ec2/)
    post root_url, { :provider => :test_provider }
    headers['Location'].wont_be_nil
    headers['Location'].must_match(/\/api;provider=test_provider/)
  end

  it 'must support matrix parameters for changing API driver' do
    get root_url + ';driver=ec2'
    headers['X-Deltacloud-Driver'].must_equal 'ec2'
    xml.root.name.must_equal 'api'
  end

  it 'must support matrix parameters for changing API provider' do
    get root_url + ';provider=someprovider'
    headers['X-Deltacloud-Provider'].must_equal 'someprovider'
    xml.root.name.must_equal 'api'
  end

  it 'must support matrix parameters for changing both API provider and driver' do
    get root_url + ';provider=someprovider;driver=ec2'
    headers['X-Deltacloud-Provider'].must_equal 'someprovider'
    headers['X-Deltacloud-Driver'].must_equal 'ec2'
    xml.root.name.must_equal 'api'
  end

  it 'must change driver back to default when no matrix param set' do
    get root_url + ';driver=ec2'
    headers['X-Deltacloud-Driver'].must_equal 'ec2'
    get root_url
    headers['X-Deltacloud-Driver'].must_equal Deltacloud[:deltacloud].default_driver.to_s
    xml.root.name.must_equal 'api'
  end

  it 'must change provider back to default when no matrix param set' do
    get root_url + ';provider=someprovider'
    headers['X-Deltacloud-Provider'].must_equal 'someprovider'
    get root_url
    headers['X-Deltacloud-Provider'].must_be_nil
    xml.root.name.must_equal 'api'
  end

  it 'must support matrix params when they are part of URL' do
    get root_url + ';driver=ec2/hardware_profiles'
    headers['X-Deltacloud-Driver'].must_equal 'ec2'
    status.must_equal 200
    xml.root.name.must_equal 'hardware_profiles'
  end

  it 'must switch driver using X-Deltacloud-Driver HTTP header in request' do
    header 'X-Deltacloud-Driver', 'ec2'
    get root_url
    headers['X-Deltacloud-Driver'].must_equal 'ec2'
    header 'X-Deltacloud-Driver', 'mock'
    get root_url
    headers['X-Deltacloud-Driver'].must_equal 'mock'
  end

  it 'must switch provider using X-Deltacloud-Provider HTTP header in request' do
    header 'X-Deltacloud-Provider', 'someprovider'
    get root_url
    headers['X-Deltacloud-Provider'].must_equal 'someprovider'
    header 'X-Deltacloud-Provider', nil
    get root_url
    headers['X-Deltacloud-Provider'].must_be_nil
  end

  it 'must support media type negotiation for JSON format' do
    header 'Accept', 'application/json'
    get root_url
    status.must_equal 200
    headers['Content-Type'].must_equal 'application/json'
    JSON::parse(response_body).must_be_kind_of Hash
    JSON::parse(response_body)['api'].must_be_kind_of Hash
  end

  it 'must support media type negotiation for HTML format' do
    header 'Accept', 'text/html'
    get root_url
    status.must_equal 200
    headers['Content-Type'].must_equal 'text/html'
    response_body.must_match(/^<\!DOCTYPE html>/)
  end

  it 'must support media type negotiation for XML format' do
    header 'Accept', 'application/xml'
    get root_url
    status.must_equal 200
    headers['Content-Type'].must_equal 'application/xml'
    xml.root.name.must_equal 'api'
  end

  it 'must return proper error when unknown media type requested' do
    header 'Accept', 'application/unknown'
    get root_url
    status.must_equal 406
  end

end
