require 'rubygems'
require 'spork'
#uncomment the following line to use spork with the debugger
#require 'spork/ext/ruby-debug'

ENV["RAILS_ENV"] ||= 'test'


require 'active_record'
require 'action_mailer'
require 'jam_db'
require "#{File.dirname(__FILE__)}/spec_db"


# recreate test database and migrate it
db_config = YAML::load(File.open('config/database.yml'))["test"]
# initialize ActiveRecord's db connection\
SpecDb::recreate_database(db_config)
ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.yml'))["test"])

require 'jam_ruby'

include JamRuby

# put ActionMailer into test mode
ActionMailer::Base.delivery_method = :test

Spork.prefork do
  # Loading more in this block will cause your tests to run faster. However,
  # if you change any configuration or code from libraries loaded here, you'll
  # need to restart spork for it take effect.
  # This file is copied to spec/ when you run 'rails generate rspec:install'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'rspec/autorun'


  require 'capybara'
  require 'capybara/rspec'
  require 'capybara-screenshot/rspec'
  require 'capybara/poltergeist'
  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, { debug: false, phantomjs_logger: File.open('log/phantomjs.out', 'w') })
  end
  Capybara.javascript_driver = :poltergeist
  Capybara.default_wait_time = 10

  if defined?(TEST_CONNECT_STATES) && TEST_CONNECT_STATES
    require 'capybara/poltergeist'
    TEST_CONNECT_STATE_JS_CONSOLE_IO = File.open(TEST_CONNECT_STATE_JS_CONSOLE, 'w')
    Capybara.register_driver :poltergeist do |app|
      Capybara::Poltergeist::Driver.new(app, { phantomjs_logger: TEST_CONNECT_STATE_JS_CONSOLE_IO })
    end
    Capybara.javascript_driver = :poltergeist
  end
  Capybara.configure do |config|
    config.match = :one
    config.exact_options = true
    config.ignore_hidden_elements = true
    config.visible_text_only = true
  end

  # Requires supporting ruby files with custom matchers and macros, etc,
  # in spec/support/ and its subdirectories.
  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  ActiveRecord::Base.logger = Logger.new(STDOUT) if defined?(ActiveRecord::Base)

  RSpec.configure do |config|
    # ## Mock Framework
    #
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
    #
    # config.mock_with :mocha
    # config.mock_with :flexmock
    # config.mock_with :rr
    config.mock_with :rspec

    # by default, do not run tests marked as 'slow'
    config.filter_run_excluding slow: true unless ENV['RUN_SLOW_TESTS'] == "1"

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
    config.fixture_path = "#{::Rails.root}/spec/fixtures"

    # If you're not using ActiveRecord, or you'd prefer not to run each of your
    # examples within a transaction, remove the following line or assign false
    # instead of true.
    config.use_transactional_fixtures = false

    # If true, the base class of anonymous controllers will be inferred
    # automatically. This will be the default behavior in future versions of
    # rspec-rails.
    config.infer_base_class_for_anonymous_controllers = false

    config.before(:suite) do
      DatabaseCleaner.clean_with(:truncation, {:except => %w[instruments genres] })
    end

    config.before(:each) do
     # DatabaseCleaner.strategy = :transaction
      DatabaseCleaner.strategy = :truncation, {:except => %w[instruments genres] }

      if example.metadata[:js]
        page.driver.resize(1920, 1080)
      end
    end

    config.before(:each, :js => true) do
      DatabaseCleaner.strategy = :truncation, {:except => %w[instruments genres] }
    end

    config.before(:each) do
      DatabaseCleaner.start
    end

    config.after(:each) do
      if example.metadata[:js]
        sleep 0.2 # ugh.  necessary though otherwise intermittent failures: http://stackoverflow.com/questions/14265983/upgrading-capybara-from-1-0-1-to-1-1-4-makes-database-cleaner-break-my-specs
      end
      DatabaseCleaner.clean
    end
  end
end

Spork.each_run do
  # This code will be run each time you run your specs.

end






