0
|
1 |
#!/usr/bin/ruby
|
|
2 |
# coding: utf-8
|
|
3 |
|
|
4 |
BEGIN {
|
|
5 |
require 'pathname'
|
|
6 |
basedir = Pathname( __FILE__ ).dirname.parent
|
|
7 |
|
|
8 |
thingfishdir = basedir.parent + 'Thingfish'
|
|
9 |
thingfishlib = thingfishdir + 'lib'
|
|
10 |
|
|
11 |
$LOAD_PATH.unshift( thingfishlib.to_s ) if thingfishlib.exist?
|
|
12 |
}
|
|
13 |
|
|
14 |
|
|
15 |
# SimpleCov test coverage reporting; enable this using the :coverage rake task
|
|
16 |
require 'simplecov' if ENV['COVERAGE']
|
|
17 |
|
|
18 |
require 'loggability'
|
|
19 |
require 'loggability/spechelpers'
|
|
20 |
require 'configurability'
|
|
21 |
require 'configurability/behavior'
|
|
22 |
|
|
23 |
require 'rspec'
|
|
24 |
require 'thingfish'
|
|
25 |
require 'thingfish/spechelpers'
|
|
26 |
require 'thingfish/behaviors'
|
|
27 |
require 'thingfish/metastore'
|
|
28 |
|
|
29 |
Loggability.format_with( :color ) if $stdout.tty?
|
|
30 |
|
|
31 |
# Some helper functions for testing. Usage:
|
|
32 |
#
|
|
33 |
# # in spec/spec_helper.rb
|
|
34 |
# RSpec.configure do |c|
|
|
35 |
# c.include( Thingfish::Metastore::PgGraph::SpecHelpers )
|
|
36 |
# end
|
|
37 |
#
|
|
38 |
# # in my_class_spec.rb; mark an example as needing database setup
|
|
39 |
# describe MyClass, db: true do
|
|
40 |
# end
|
|
41 |
#
|
|
42 |
module Thingfish::MetastorePGSpecHelpers
|
|
43 |
|
|
44 |
TESTDB_ENV_VAR = 'THINGFISH_DB_URI'
|
|
45 |
|
|
46 |
### Inclusion callback -- install some hooks
|
|
47 |
def self::included( context )
|
|
48 |
|
|
49 |
context.before( :all ) do
|
|
50 |
if ((db_uri = ENV[ TESTDB_ENV_VAR ]))
|
|
51 |
Thingfish::Metastore::PgGraph.configure( uri: db_uri )
|
|
52 |
end
|
|
53 |
end
|
|
54 |
|
|
55 |
context.after( :all ) do
|
|
56 |
Thingfish::Metastore::PgGraph.teardown_database if Thingfish::Metastore::PgGraph.db
|
|
57 |
end
|
|
58 |
|
|
59 |
context.around( :each ) do |example|
|
|
60 |
if (( setting = example.metadata[:db] ))
|
|
61 |
Loggability[ Thingfish::Metastore::PgGraph ].debug "DB setting: %p" % [ setting ]
|
|
62 |
|
|
63 |
if ((db = Thingfish::Metastore::PgGraph.db))
|
|
64 |
if setting == :no_transaction || setting == :without_transaction
|
|
65 |
Loggability[ Thingfish::Metastore::PgGraph ].debug " running without a transaction"
|
|
66 |
example.run
|
|
67 |
else
|
|
68 |
Loggability[ Thingfish::Metastore::PgGraph ].debug " running with a transaction"
|
|
69 |
db.transaction( rollback: :always ) do
|
|
70 |
example.run
|
|
71 |
end
|
|
72 |
end
|
|
73 |
elsif setting.to_s == 'pending'
|
|
74 |
example.metadata[:pending] ||=
|
|
75 |
"a configured database URI in #{TESTDB_ENV_VAR}"
|
|
76 |
else
|
|
77 |
fail "No database connection! " +
|
|
78 |
"Ensure you have the #{TESTDB_ENV_VAR} ENV variable set to " +
|
|
79 |
"the URI of an (empty) test database you have write permissions to."
|
|
80 |
end
|
|
81 |
else
|
|
82 |
example.run
|
|
83 |
end
|
|
84 |
end
|
|
85 |
|
|
86 |
super
|
|
87 |
end
|
|
88 |
|
|
89 |
end # module Thingfish::Metastore::PgGraph::SpecHelpers
|
|
90 |
|
|
91 |
|
|
92 |
### Mock with RSpec
|
|
93 |
RSpec.configure do |c|
|
|
94 |
include Thingfish::SpecHelpers
|
|
95 |
include Thingfish::SpecHelpers::Constants
|
|
96 |
|
|
97 |
c.run_all_when_everything_filtered = true
|
|
98 |
c.filter_run :focus
|
|
99 |
# c.order = 'random'
|
|
100 |
c.mock_with( :rspec ) do |mock|
|
|
101 |
mock.syntax = :expect
|
|
102 |
end
|
|
103 |
|
|
104 |
c.include( Loggability::SpecHelpers )
|
|
105 |
c.include( Thingfish::SpecHelpers )
|
|
106 |
c.include( Thingfish::MetastorePGSpecHelpers )
|
|
107 |
end
|
|
108 |
|
|
109 |
# vim: set nosta noet ts=4 sw=4:
|
|
110 |
|