mirror of
https://github.com/awesome-print/awesome_print
synced 2023-03-27 23:22:34 -04:00
e41d317e51
Update the Rails 4.2 ActiveRecord tests to test for the current format of AR models Prior to this change the tests were broken
83 lines
2.7 KiB
Ruby
83 lines
2.7 KiB
Ruby
# Copyright (c) 2010-2013 Michael Dvorkin
|
|
#
|
|
# Awesome Print is freely distributable under the terms of MIT license.
|
|
# See LICENSE file or http://www.opensource.org/licenses/mit-license.php
|
|
#------------------------------------------------------------------------------
|
|
#
|
|
# Running specs from the command line:
|
|
# $ rake spec # Entire spec suite.
|
|
# $ rspec spec/objects_spec.rb # Individual spec file.
|
|
#
|
|
# NOTE: To successfully run specs with Ruby 1.8.6 the older versions of
|
|
# Bundler and RSpec gems are required:
|
|
#
|
|
# $ gem install bundler -v=1.0.2
|
|
# $ gem install rspec -v=2.6.0
|
|
#
|
|
require 'codeclimate-test-reporter'
|
|
CodeClimate::TestReporter.start
|
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
|
|
Dir[File.dirname(__FILE__) + '/support/**/*.rb'].each do |file|
|
|
require file
|
|
end
|
|
|
|
ExtVerifier.require_dependencies!(%w{rails active_record action_view
|
|
active_support/all mongoid mongo_mapper ripple nobrainer})
|
|
require 'nokogiri'
|
|
require 'awesome_print'
|
|
|
|
RSpec.configure do |config|
|
|
config.disable_monkey_patching!
|
|
# TODO: Make specs not order dependent
|
|
# config.order = :random
|
|
Kernel.srand config.seed
|
|
config.filter_run focus: true
|
|
config.run_all_when_everything_filtered = true
|
|
config.expect_with :rspec do |expectations|
|
|
expectations.syntax = :expect
|
|
end
|
|
config.mock_with :rspec do |mocks|
|
|
mocks.syntax = :expect
|
|
mocks.verify_partial_doubles = true
|
|
end
|
|
if config.files_to_run.one?
|
|
config.default_formatter = 'doc'
|
|
end
|
|
end
|
|
|
|
# This matcher handles the normalization of objects to replace non deterministic
|
|
# parts (such as object IDs) with simple placeholder strings before doing a
|
|
# comparison with a given string. It's important that this method only matches
|
|
# a string which strictly conforms to the expected object ID format.
|
|
RSpec::Matchers.define :be_similar_to do |expected, options|
|
|
match do |actual|
|
|
options ||= {}
|
|
@actual = normalize_object_id_strings(actual, options)
|
|
values_match? expected, @actual
|
|
end
|
|
|
|
diffable
|
|
end
|
|
|
|
# Override the Object IDs with a placeholder so that we are only checking
|
|
# that an ID is present and not that it matches a certain value. This is
|
|
# necessary as the Object IDs are not deterministic.
|
|
def normalize_object_id_strings(str, options)
|
|
str = str.gsub(/#<(.*?):0x[a-f\d]+/, '#<\1:placeholder_id') unless options[:skip_standard]
|
|
str = str.gsub(/BSON::ObjectId\('[a-f\d]{24}'\)/, 'placeholder_bson_id') unless options[:skip_bson]
|
|
str
|
|
end
|
|
|
|
def stub_dotfile!
|
|
dotfile = File.join(ENV["HOME"], ".aprc")
|
|
expect(File).to receive(:readable?).at_least(:once).with(dotfile).and_return(false)
|
|
end
|
|
|
|
def capture!
|
|
standard, $stdout = $stdout, StringIO.new
|
|
yield
|
|
ensure
|
|
$stdout = standard
|
|
end
|