RAILS_ROOT = File.join(File.dirname(__FILE__), '..') unless defined? RAILS_ROOT

require 'rubygems'
require 'test/unit'

gem 'activesupport', '= 2.3.2'
gem 'activerecord', '= 2.3.2'
gem 'actionpack', '= 2.3.2'
gem 'rails', '= 2.3.2'

require 'active_support'
require 'active_support/core_ext'
require 'active_support/test_case'
require 'active_record'
require 'active_record/fixtures'
require 'action_controller'
require 'action_controller/test_case'
require 'action_controller/test_process'
require 'action_controller/integration'
require 'action_controller/assertions/selector_assertions'
require 'action_controller/assertions/response_assertions'
require 'sqlite3'

require File.join(File.dirname(__FILE__), '..', '..', '..', 'lib', 'restfulx')
require File.join(File.dirname(__FILE__), '..',  'models', 'note')
require File.join(File.dirname(__FILE__), '..', 'models', 'user')
require File.join(File.dirname(__FILE__), '..', 'models', 'project')
require File.join(File.dirname(__FILE__), '..', 'models', 'location')
require File.join(File.dirname(__FILE__), '..', 'models', 'task')
require File.join(File.dirname(__FILE__), '..', 'models', 'simple_property')

class MockResponse
  attr_reader :body, :content_type

  def initialize(body, content_type = 'xml')
    @body = body
    @content_type = content_type
  end

end

class ActiveSupport::TestCase
  include ActiveRecord::TestFixtures
  include ActionController::TestProcess
  include ActionController::Assertions::SelectorAssertions
  include ActionController::Assertions::ResponseAssertions

  self.fixture_path = File.join(File.dirname(__FILE__), "../fixtures")

  self.use_transactional_fixtures = false
  self.use_instantiated_fixtures = false

  # load up fixtures
  # fixtures :all
end

class ActiveRecord::TestCase #:nodoc:
  # Add more helper methods to be used by all tests here...

  # Use this to test xml or fxml responses in unit tests.  For example,
  # set_response_to user.to_fxml
  # assert_xml_select 'user name', 'quentin'
  def set_response_to(response, content_type = 'xml')
    @response = MockResponse.new(response, content_type)
  end

  # Make xml functional testing work.
  # From http://weblog.jamisbuck.org/2007/1/4/assert_xml_select
  def xml_document
    @xml_document ||= HTML::Document.new(@response.body, false, true)
  end  

  def assert_xml_select(*args, &block)
    @html_document = xml_document
    assert_select(*args, &block)
  end
  
  def assert_invalid(record)
    assert !record.valid?
  end
end