diff -r 000000000000 -r 3cc90e88c6ab spec/spec_helper.rb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/spec/spec_helper.rb Thu Nov 05 10:34:15 2015 -0800 @@ -0,0 +1,110 @@ +#!/usr/bin/ruby +# coding: utf-8 + +BEGIN { + require 'pathname' + basedir = Pathname( __FILE__ ).dirname.parent + + thingfishdir = basedir.parent + 'Thingfish' + thingfishlib = thingfishdir + 'lib' + + $LOAD_PATH.unshift( thingfishlib.to_s ) if thingfishlib.exist? +} + + +# SimpleCov test coverage reporting; enable this using the :coverage rake task +require 'simplecov' if ENV['COVERAGE'] + +require 'loggability' +require 'loggability/spechelpers' +require 'configurability' +require 'configurability/behavior' + +require 'rspec' +require 'thingfish' +require 'thingfish/spechelpers' +require 'thingfish/behaviors' +require 'thingfish/metastore' + +Loggability.format_with( :color ) if $stdout.tty? + +# Some helper functions for testing. Usage: +# +# # in spec/spec_helper.rb +# RSpec.configure do |c| +# c.include( Thingfish::Metastore::PgGraph::SpecHelpers ) +# end +# +# # in my_class_spec.rb; mark an example as needing database setup +# describe MyClass, db: true do +# end +# +module Thingfish::MetastorePGSpecHelpers + + TESTDB_ENV_VAR = 'THINGFISH_DB_URI' + + ### Inclusion callback -- install some hooks + def self::included( context ) + + context.before( :all ) do + if ((db_uri = ENV[ TESTDB_ENV_VAR ])) + Thingfish::Metastore::PgGraph.configure( uri: db_uri ) + end + end + + context.after( :all ) do + Thingfish::Metastore::PgGraph.teardown_database if Thingfish::Metastore::PgGraph.db + end + + context.around( :each ) do |example| + if (( setting = example.metadata[:db] )) + Loggability[ Thingfish::Metastore::PgGraph ].debug "DB setting: %p" % [ setting ] + + if ((db = Thingfish::Metastore::PgGraph.db)) + if setting == :no_transaction || setting == :without_transaction + Loggability[ Thingfish::Metastore::PgGraph ].debug " running without a transaction" + example.run + else + Loggability[ Thingfish::Metastore::PgGraph ].debug " running with a transaction" + db.transaction( rollback: :always ) do + example.run + end + end + elsif setting.to_s == 'pending' + example.metadata[:pending] ||= + "a configured database URI in #{TESTDB_ENV_VAR}" + else + fail "No database connection! " + + "Ensure you have the #{TESTDB_ENV_VAR} ENV variable set to " + + "the URI of an (empty) test database you have write permissions to." + end + else + example.run + end + end + + super + end + +end # module Thingfish::Metastore::PgGraph::SpecHelpers + + +### Mock with RSpec +RSpec.configure do |c| + include Thingfish::SpecHelpers + include Thingfish::SpecHelpers::Constants + + c.run_all_when_everything_filtered = true + c.filter_run :focus + # c.order = 'random' + c.mock_with( :rspec ) do |mock| + mock.syntax = :expect + end + + c.include( Loggability::SpecHelpers ) + c.include( Thingfish::SpecHelpers ) + c.include( Thingfish::MetastorePGSpecHelpers ) +end + +# vim: set nosta noet ts=4 sw=4: +