--- /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:
+