jam-cloud/ruby/spec/spec_helper.rb

182 lines
6.0 KiB
Ruby

ENV["RAILS_ENV"] = "test"
require 'simplecov'
require 'support/utilities'
require 'support/profile'
require 'support/maxmind'
require 'support/lesson_session'
require 'active_record'
#require 'jam_db'
require 'spec_db'
require 'uses_temp_files'
require 'resque_spec'
require 'resque_failed_job_mailer'
require 'stripe_mock'
require 'webmock/rspec'
# to prevent embedded resque code from forking
ENV['FORK_PER_JOB'] = 'false'
IS_BUILD_SERVER = !ENV['BUILD_SERVER'].nil?
# recreate test database and migrate it
#SpecDb::recreate_database
JamRuby::TestSupport.recreate_database if ENV['SKIP_DB_PREP'].nil?
# initialize ActiveRecord's db connection
ActiveRecord::Base.establish_connection(YAML::load(File.open('config/database.yml'))["test"])
#ActiveRecord::Base.raise_in_transactional_callbacks = true
# so jam_ruby models that use APP_CONFIG in metadata will load. this is later stubbed pre test run
APP_CONFIG = app_config
require 'jam_ruby'
require 'factory_girl'
require 'rubygems'
require 'spork'
require 'database_cleaner'
require 'factories'
require 'timecop'
require 'resque_spec/scheduler'
# uncomment this to see active record logs
# ActiveRecord::Base.logger = Logger.new(STDOUT) if defined?(ActiveRecord::Base)
include JamRuby
# manually register observers
ActiveRecord::Base.add_observer InvitedUserObserver.instance
ActiveRecord::Base.add_observer UserObserver.instance
ActiveRecord::Base.add_observer FeedbackObserver.instance
ActiveRecord::Base.add_observer RecordedTrackObserver.instance
ActiveRecord::Base.add_observer RecordedBackingTrackObserver.instance
ActiveRecord::Base.add_observer QuickMixObserver.instance
#RecordedTrack.observers.disable :all # only a few tests want this observer active
# put ActionMailer into test mode
ActionMailer::Base.delivery_method = :test
# set up carrierwave to use file (instead of say, fog) for testing
CarrierWave.configure do |config|
config.storage = :file
config.enable_processing = false
end
Stripe.api_key = "sk_test_OkjoIF7FmdjunyNsdVqJD02D"
Recurly::API.net_http = {
ssl_version: :TLSv1_2,
#...
}
#uncomment the following line to use spork with the debugger
#require 'spork/ext/ruby-debug'
#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'
#ENV["RAILS_ENV"] ||= 'test'
#require File.expand_path("../../config/environment", __FILE__)
require 'rspec/autorun'
#require 'rspec/rails'
# This file was generated by the `rspec --init` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# Require this file using `require "spec_helper"` to ensure that it is only
# loaded once.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
config.color_enabled = true
config.treat_symbols_as_metadata_keys_with_true_values = true
config.run_all_when_everything_filtered = true
config.filter_run :focus
#config.formatter = :documentation
# you can mark a test as slow so that developers won't commonly hit it, but build server will http://blog.davidchelimsky.net/2010/06/14/filtering-examples-in-rspec-2/
config.filter_run_excluding slow: true unless run_tests? :slow
config.filter_run_excluding aws: true unless run_tests? :aws
config.filter_run_excluding intermittent: true if IS_BUILD_SERVER
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:deletion, {pre_count: true, :except => %w[gift_card_types lesson_package_types instruments languages subjects genres icecast_server_groups jamcompany jamisp geoipblocks geoipisp geoiplocations cities regions countries generic_state spatial_ref_sys] })
end
config.around(:each) do |example|
# set no_transaction: true as metadata on your test to use deletion strategy instead
if example.metadata[:no_transaction]
DatabaseCleaner.strategy = :deletion, {pre_count: true, :except => %w[gift_card_types lesson_package_types instruments languages subjects genres icecast_server_groups jamcompany jamisp geoipblocks geoipisp geoiplocations cities regions countries generic_state spatial_ref_sys] }
else
DatabaseCleaner.strategy = :transaction
end
DatabaseCleaner.start
WebMock.allow_net_connect!
example.run
end
config.before(:each) do
stub_const("APP_CONFIG", app_config)
end
config.after(:each) do
Timecop.return
DatabaseCleaner.clean
end
config.after(:suite) do
wipe_s3_test_bucket
end
# 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 = true
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = 'random'
REDIS_PID = "#{Rails.root}/tmp/pids/redis-test.pid"
REDIS_CACHE_PATH = "#{Rails.root}/tmp/cache/"
config.before(:suite) do
redis_options = {
"--daemonize" => 'yes',
"--pidfile" => REDIS_PID,
"--port" => 9736,
"--timeout" => 300,
"--save 900" => 1,
"--save 300" => 1,
"--save 60" => 10000,
"--dbfilename" => "dump.rdb",
"--dir" => REDIS_CACHE_PATH,
"--loglevel" => "debug",
"--logfile" => "stdout",
"--databases" => 16
}.map { |k, v| "#{k} #{v}" }.join(" ")
`redis-server #{redis_options}`
end
config.after(:suite) do
%x{
cat #{REDIS_PID} | xargs kill -QUIT
rm -f #{REDIS_CACHE_PATH}dump.rdb
}
end
end
#end
#Spork.each_run do
# This code will be run each time you run your specs.
#end