travis-api/spec/spec_helper.rb
2016-08-05 16:31:53 +02:00

104 lines
2.5 KiB
Ruby

ENV['RACK_ENV'] = ENV['RAILS_ENV'] = ENV['ENV'] = 'test'
require 'support/coverage' unless ENV['SKIP_COVERAGE']
require 'rspec'
require 'rspec/its'
require 'database_cleaner'
require 'logger'
require 'gh'
require 'multi_json'
require 'pry'
require 'stackprof'
require 'webmock/rspec'
require 'travis/api/app'
require 'travis/testing'
require 'travis/testing/scenario'
require 'travis/testing/factories'
require 'travis/testing/matchers'
require 'support/formats'
require 'support/gcs'
require 'support/matchers'
require 'support/payloads'
require 'support/private_key'
require 'support/s3'
require 'support/test_helpers'
require 'support/shared_examples'
module TestHelpers
include Sinatra::TestHelpers
def custom_endpoints
@custom_endpoints ||= []
end
def add_settings_endpoint(name, options = {})
if options[:singleton]
Travis::Api::App::SingletonSettingsEndpoint.subclass(name)
else
Travis::Api::App::SettingsEndpoint.subclass(name)
end
set_app Travis::Api::App.new
end
def add_endpoint(prefix, &block)
endpoint = Sinatra.new(Travis::Api::App::Endpoint, &block)
endpoint.set(prefix: prefix)
set_app Travis::Api::App.new
custom_endpoints << endpoint
end
def parsed_body
MultiJson.decode(body)
end
end
RSpec.configure do |c|
c.mock_framework = :mocha
c.expect_with :rspec
c.include TestHelpers
c.before :suite do
Travis.logger = Logger.new(StringIO.new)
Travis::Api::App.setup
Travis.config.client_domain = "www.example.com"
Travis.config.endpoints.ssh_key = true
DatabaseCleaner.clean_with :truncation
DatabaseCleaner.strategy = :transaction
# This sets up a scenario in the db as an initial state. The db will be
# rolled back to this state after each test. Several tests in ./spec depend
# on this scenario, so this gives a performance benefit, but also can be
# confusing.
Scenario.default
end
c.before :each do
DatabaseCleaner.start
Redis.new.flushall
Travis.config.oauth2.scope = "user:email,public_repo"
end
c.before :each, set_app: true do
set_app Travis::Api::App.new
end
c.after :each do
DatabaseCleaner.clean
custom_endpoints.each do |endpoint|
endpoint.superclass.direct_subclasses.delete(endpoint)
end
end
end
require 'timecop'
Timecop.freeze(Time.now.utc)
describe Time do
let(:time) { Time.now.utc }
example { expect(Time.now.utc).to eq(time) }
example { expect(Time.now.utc + 5.minutes ).to eq(time + 5.minutes) }
end