Merge pull request #541 from botandrose/rspec3
Upgrade to RSpec 3 and randomize spec order to enforce test isolation
This commit is contained in:
commit
fe1d9f8400
4
.rspec
4
.rspec
|
@ -1,4 +1,4 @@
|
||||||
--color
|
--color
|
||||||
--format documentation
|
--format documentation
|
||||||
mtime
|
--require spec_helper
|
||||||
--backtrace
|
--order rand
|
||||||
|
|
123
Gemfile.lock
123
Gemfile.lock
|
@ -6,17 +6,6 @@ PATH
|
||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
abstract (1.0.0)
|
|
||||||
actionpack (3.0.0)
|
|
||||||
activemodel (= 3.0.0)
|
|
||||||
activesupport (= 3.0.0)
|
|
||||||
builder (~> 2.1.2)
|
|
||||||
erubis (~> 2.6.6)
|
|
||||||
i18n (~> 0.4.1)
|
|
||||||
rack (~> 1.2.1)
|
|
||||||
rack-mount (~> 0.6.12)
|
|
||||||
rack-test (~> 0.5.4)
|
|
||||||
tzinfo (~> 0.3.23)
|
|
||||||
activemodel (3.0.0)
|
activemodel (3.0.0)
|
||||||
activesupport (= 3.0.0)
|
activesupport (= 3.0.0)
|
||||||
builder (~> 2.1.2)
|
builder (~> 2.1.2)
|
||||||
|
@ -43,7 +32,7 @@ GEM
|
||||||
bson_ext (1.12.5)
|
bson_ext (1.12.5)
|
||||||
bson (~> 1.12.5)
|
bson (~> 1.12.5)
|
||||||
builder (2.1.2)
|
builder (2.1.2)
|
||||||
coderay (1.1.0)
|
coderay (1.1.2)
|
||||||
couch_potato (1.3.0)
|
couch_potato (1.3.0)
|
||||||
activemodel
|
activemodel
|
||||||
couchrest (~> 1.2.0)
|
couchrest (~> 1.2.0)
|
||||||
|
@ -69,7 +58,7 @@ GEM
|
||||||
dm-transactions (~> 1.2.0)
|
dm-transactions (~> 1.2.0)
|
||||||
dm-types (~> 1.2.0)
|
dm-types (~> 1.2.0)
|
||||||
dm-validations (~> 1.2.0)
|
dm-validations (~> 1.2.0)
|
||||||
diff-lcs (1.2.5)
|
diff-lcs (1.3)
|
||||||
dm-aggregates (1.2.0)
|
dm-aggregates (1.2.0)
|
||||||
dm-core (~> 1.2.0)
|
dm-core (~> 1.2.0)
|
||||||
dm-constraints (1.2.0)
|
dm-constraints (1.2.0)
|
||||||
|
@ -112,29 +101,32 @@ GEM
|
||||||
data_objects (= 0.10.14)
|
data_objects (= 0.10.14)
|
||||||
do_jdbc (= 0.10.14)
|
do_jdbc (= 0.10.14)
|
||||||
jdbc-sqlite3 (>= 3.5.8)
|
jdbc-sqlite3 (>= 3.5.8)
|
||||||
erubis (2.6.6)
|
|
||||||
abstract (>= 1.0.0)
|
|
||||||
faraday (0.9.0)
|
faraday (0.9.0)
|
||||||
multipart-post (>= 1.2, < 3)
|
multipart-post (>= 1.2, < 3)
|
||||||
faraday_middleware (0.9.1)
|
faraday_middleware (0.9.1)
|
||||||
faraday (>= 0.7.4, < 0.10)
|
faraday (>= 0.7.4, < 0.10)
|
||||||
fastercsv (1.5.5)
|
fastercsv (1.5.5)
|
||||||
ffi (1.9.6)
|
ffi (1.9.23)
|
||||||
ffi (1.9.6-java)
|
ffi (1.9.23-java)
|
||||||
formatador (0.2.5)
|
formatador (0.2.5)
|
||||||
gherkin (2.11.6)
|
gherkin (2.11.6)
|
||||||
json (>= 1.7.6)
|
json (>= 1.7.6)
|
||||||
gherkin (2.11.6-java)
|
gherkin (2.11.6-java)
|
||||||
json (>= 1.7.6)
|
json (>= 1.7.6)
|
||||||
guard (1.8.3)
|
guard (2.14.2)
|
||||||
formatador (>= 0.2.4)
|
formatador (>= 0.2.4)
|
||||||
listen (~> 1.3)
|
listen (>= 2.7, < 4.0)
|
||||||
lumberjack (>= 1.0.2)
|
lumberjack (>= 1.0.12, < 2.0)
|
||||||
pry (>= 0.9.10)
|
nenv (~> 0.1)
|
||||||
thor (>= 0.14.6)
|
notiffany (~> 0.0)
|
||||||
guard-rspec (2.5.4)
|
pry (>= 0.9.12)
|
||||||
guard (>= 1.1)
|
shellany (~> 0.0)
|
||||||
rspec (~> 2.11)
|
thor (>= 0.18.1)
|
||||||
|
guard-compat (1.2.1)
|
||||||
|
guard-rspec (4.7.3)
|
||||||
|
guard (~> 2.1)
|
||||||
|
guard-compat (~> 1.1)
|
||||||
|
rspec (>= 2.99.0, < 4.0)
|
||||||
httparty (0.13.3)
|
httparty (0.13.3)
|
||||||
json (~> 1.8)
|
json (~> 1.8)
|
||||||
multi_xml (>= 0.5.2)
|
multi_xml (>= 0.5.2)
|
||||||
|
@ -144,12 +136,11 @@ GEM
|
||||||
json (1.8.6)
|
json (1.8.6)
|
||||||
json (1.8.6-java)
|
json (1.8.6-java)
|
||||||
json_pure (1.8.1)
|
json_pure (1.8.1)
|
||||||
listen (1.3.1)
|
listen (3.0.8)
|
||||||
rb-fsevent (>= 0.9.3)
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||||
rb-inotify (>= 0.9)
|
rb-inotify (~> 0.9, >= 0.9.7)
|
||||||
rb-kqueue (>= 0.2)
|
lumberjack (1.0.13)
|
||||||
lumberjack (1.0.9)
|
method_source (0.9.0)
|
||||||
method_source (0.8.2)
|
|
||||||
mime-types (1.25.1)
|
mime-types (1.25.1)
|
||||||
mongo (1.12.5)
|
mongo (1.12.5)
|
||||||
bson (= 1.12.5)
|
bson (= 1.12.5)
|
||||||
|
@ -170,6 +161,7 @@ GEM
|
||||||
multipart-post (2.0.0)
|
multipart-post (2.0.0)
|
||||||
mysql (2.9.1)
|
mysql (2.9.1)
|
||||||
mysql2 (0.3.18)
|
mysql2 (0.3.18)
|
||||||
|
nenv (0.3.0)
|
||||||
neo4j-community (2.1.5)
|
neo4j-community (2.1.5)
|
||||||
neo4j-core (3.0.8)
|
neo4j-core (3.0.8)
|
||||||
activesupport
|
activesupport
|
||||||
|
@ -185,66 +177,52 @@ GEM
|
||||||
nest (1.1.2)
|
nest (1.1.2)
|
||||||
redis
|
redis
|
||||||
net-http-persistent (2.9.4)
|
net-http-persistent (2.9.4)
|
||||||
|
notiffany (0.1.1)
|
||||||
|
nenv (~> 0.1)
|
||||||
|
shellany (~> 0.0)
|
||||||
ohm (0.1.5)
|
ohm (0.1.5)
|
||||||
nest (~> 1.0)
|
nest (~> 1.0)
|
||||||
os (0.9.6)
|
os (0.9.6)
|
||||||
pg (0.18.2)
|
pg (0.18.2)
|
||||||
plucky (0.5.2)
|
plucky (0.5.2)
|
||||||
mongo (~> 1.5)
|
mongo (~> 1.5)
|
||||||
pry (0.10.1)
|
pry (0.11.3)
|
||||||
coderay (~> 1.1.0)
|
coderay (~> 1.1.0)
|
||||||
method_source (~> 0.8.1)
|
method_source (~> 0.9.0)
|
||||||
slop (~> 3.4)
|
pry (0.11.3-java)
|
||||||
pry (0.10.1-java)
|
|
||||||
coderay (~> 1.1.0)
|
coderay (~> 1.1.0)
|
||||||
method_source (~> 0.8.1)
|
method_source (~> 0.9.0)
|
||||||
slop (~> 3.4)
|
|
||||||
spoon (~> 0.0)
|
spoon (~> 0.0)
|
||||||
rack (1.2.8)
|
|
||||||
rack-mount (0.6.14)
|
|
||||||
rack (>= 1.0.0)
|
|
||||||
rack-test (0.5.7)
|
|
||||||
rack (>= 1.0)
|
|
||||||
railties (3.0.0)
|
|
||||||
actionpack (= 3.0.0)
|
|
||||||
activesupport (= 3.0.0)
|
|
||||||
rake (>= 0.8.4)
|
|
||||||
thor (~> 0.14.0)
|
|
||||||
rake (11.1.2)
|
rake (11.1.2)
|
||||||
rb-fsevent (0.9.4)
|
rb-fsevent (0.10.3)
|
||||||
rb-inotify (0.9.5)
|
rb-inotify (0.9.10)
|
||||||
ffi (>= 0.5.0)
|
ffi (>= 0.5.0, < 2)
|
||||||
rb-kqueue (0.2.3)
|
|
||||||
ffi (>= 0.5.0)
|
|
||||||
rdoc (4.1.2)
|
rdoc (4.1.2)
|
||||||
json (~> 1.4)
|
json (~> 1.4)
|
||||||
redis (3.1.0)
|
redis (3.1.0)
|
||||||
rest-client (1.6.8)
|
rest-client (1.6.8)
|
||||||
mime-types (~> 1.16)
|
mime-types (~> 1.16)
|
||||||
rdoc (>= 2.4.2)
|
rdoc (>= 2.4.2)
|
||||||
rspec (2.14.1)
|
rspec (3.7.0)
|
||||||
rspec-core (~> 2.14.0)
|
rspec-core (~> 3.7.0)
|
||||||
rspec-expectations (~> 2.14.0)
|
rspec-expectations (~> 3.7.0)
|
||||||
rspec-mocks (~> 2.14.0)
|
rspec-mocks (~> 3.7.0)
|
||||||
rspec-core (2.14.8)
|
rspec-core (3.7.1)
|
||||||
rspec-expectations (2.14.5)
|
rspec-support (~> 3.7.0)
|
||||||
diff-lcs (>= 1.1.3, < 2.0)
|
rspec-expectations (3.7.0)
|
||||||
rspec-mocks (2.14.6)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
rspec-rails (2.14.2)
|
rspec-support (~> 3.7.0)
|
||||||
actionpack (>= 3.0)
|
rspec-mocks (3.7.0)
|
||||||
activemodel (>= 3.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
activesupport (>= 3.0)
|
rspec-support (~> 3.7.0)
|
||||||
railties (>= 3.0)
|
rspec-support (3.7.1)
|
||||||
rspec-core (~> 2.14.0)
|
|
||||||
rspec-expectations (~> 2.14.0)
|
|
||||||
rspec-mocks (~> 2.14.0)
|
|
||||||
sequel (3.21.0)
|
sequel (3.21.0)
|
||||||
slop (3.6.0)
|
shellany (0.0.1)
|
||||||
spoon (0.0.4)
|
spoon (0.0.6)
|
||||||
ffi
|
ffi
|
||||||
sqlite3 (1.3.10)
|
sqlite3 (1.3.10)
|
||||||
stringex (1.5.1)
|
stringex (1.5.1)
|
||||||
thor (0.14.6)
|
thor (0.20.0)
|
||||||
tzinfo (0.3.48)
|
tzinfo (0.3.48)
|
||||||
uuidtools (2.1.5)
|
uuidtools (2.1.5)
|
||||||
zip (2.0.2)
|
zip (2.0.2)
|
||||||
|
@ -266,6 +244,7 @@ DEPENDENCIES
|
||||||
dm-sqlite-adapter
|
dm-sqlite-adapter
|
||||||
guard-rspec
|
guard-rspec
|
||||||
json_pure
|
json_pure
|
||||||
|
listen (~> 3.0.0)
|
||||||
mongo (~> 1.12.0)
|
mongo (~> 1.12.0)
|
||||||
mongo_ext
|
mongo_ext
|
||||||
mongo_mapper
|
mongo_mapper
|
||||||
|
@ -278,7 +257,7 @@ DEPENDENCIES
|
||||||
ohm (~> 0.1.3)
|
ohm (~> 0.1.3)
|
||||||
pg
|
pg
|
||||||
rake
|
rake
|
||||||
rspec-rails (~> 2.14.2)
|
rspec
|
||||||
sequel (~> 3.21.0)
|
sequel (~> 3.21.0)
|
||||||
sqlite3
|
sqlite3
|
||||||
tzinfo
|
tzinfo
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
# A sample Guardfile
|
guard :rspec, cmd: "bundle exec rspec" do
|
||||||
# More info at https://github.com/guard/guard#readme
|
|
||||||
|
|
||||||
guard 'rspec', :version => 2 do
|
|
||||||
watch(%r{^spec/.+_spec\.rb$})
|
watch(%r{^spec/.+_spec\.rb$})
|
||||||
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
||||||
watch('spec/spec_helper.rb') { "spec" }
|
watch("spec/spec_helper.rb") { "spec" }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,8 @@ Gem::Specification.new do |s|
|
||||||
s.add_development_dependency "sequel", "~> 3.21.0"
|
s.add_development_dependency "sequel", "~> 3.21.0"
|
||||||
s.add_development_dependency 'ohm', '~> 0.1.3'
|
s.add_development_dependency 'ohm', '~> 0.1.3'
|
||||||
s.add_development_dependency 'guard-rspec'
|
s.add_development_dependency 'guard-rspec'
|
||||||
s.add_development_dependency "rspec-rails", "~> 2.14.2"
|
s.add_development_dependency "listen", "~> 3.0.0" # 3.1 requires Ruby >= 2.2
|
||||||
|
s.add_development_dependency "rspec"
|
||||||
s.add_development_dependency "cucumber"
|
s.add_development_dependency "cucumber"
|
||||||
|
|
||||||
unless RUBY_PLATFORM =~ /java/
|
unless RUBY_PLATFORM =~ /java/
|
||||||
|
|
|
@ -79,7 +79,7 @@ module DatabaseCleaner
|
||||||
if ::ActiveRecord::Base.respond_to?(:descendants)
|
if ::ActiveRecord::Base.respond_to?(:descendants)
|
||||||
database_name = connection_hash["database"] || connection_hash[:database]
|
database_name = connection_hash["database"] || connection_hash[:database]
|
||||||
models = ::ActiveRecord::Base.descendants
|
models = ::ActiveRecord::Base.descendants
|
||||||
models.detect { |m| m.connection_pool.spec.config[:database] == database_name }
|
models.select(&:connection_pool).detect { |m| m.connection_pool.spec.config[:database] == database_name }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
require 'database_cleaner/active_record/base'
|
require 'database_cleaner/active_record/base'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
|
require 'support/active_record/schema_setup'
|
||||||
|
|
||||||
class FakeModel
|
class FakeModel
|
||||||
def self.connection
|
def self.connection
|
||||||
|
@ -9,51 +9,53 @@ class FakeModel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
module DatabaseCleaner
|
RSpec.describe DatabaseCleaner::ActiveRecord do
|
||||||
describe ActiveRecord do
|
it { is_expected.to respond_to(:available_strategies) }
|
||||||
it { should respond_to(:available_strategies) }
|
|
||||||
|
|
||||||
describe "config_file_location" do
|
describe "config_file_location" do
|
||||||
subject { ActiveRecord.config_file_location }
|
after do
|
||||||
|
# prevent global state leakage
|
||||||
it "should default to DatabaseCleaner.root / config / database.yml" do
|
DatabaseCleaner::ActiveRecord.config_file_location=nil
|
||||||
ActiveRecord.config_file_location=nil
|
|
||||||
DatabaseCleaner.should_receive(:app_root).and_return("/path/to")
|
|
||||||
subject.should eq '/path/to/config/database.yml'
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should default to DatabaseCleaner.root / config / database.yml" do
|
||||||
|
DatabaseCleaner::ActiveRecord.config_file_location=nil
|
||||||
|
expect(DatabaseCleaner).to receive(:app_root).and_return("/path/to")
|
||||||
|
expect(DatabaseCleaner::ActiveRecord.config_file_location).to eq '/path/to/config/database.yml'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module DatabaseCleaner
|
||||||
module ActiveRecord
|
module ActiveRecord
|
||||||
class ExampleStrategy
|
class ExampleStrategy
|
||||||
include ::DatabaseCleaner::ActiveRecord::Base
|
include DatabaseCleaner::ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ExampleStrategy do
|
RSpec.describe ExampleStrategy do
|
||||||
let :config_location do
|
let(:config_location) { '/path/to/config/database.yml' }
|
||||||
'/path/to/config/database.yml'
|
|
||||||
end
|
|
||||||
|
|
||||||
before { ::DatabaseCleaner::ActiveRecord.stub(:config_file_location).and_return(config_location) }
|
before do
|
||||||
|
allow(DatabaseCleaner::ActiveRecord).to receive(:config_file_location).and_return(config_location)
|
||||||
|
end
|
||||||
|
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
|
|
||||||
describe "db" do
|
describe "db" do
|
||||||
|
|
||||||
it "should store my desired db" do
|
it "should store my desired db" do
|
||||||
subject.stub(:load_config)
|
allow(subject).to receive(:load_config)
|
||||||
|
|
||||||
subject.db = :my_db
|
subject.db = :my_db
|
||||||
subject.db.should eq :my_db
|
expect(subject.db).to eq :my_db
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should default to :default" do
|
it "should default to :default" do
|
||||||
subject.db.should eq :default
|
expect(subject.db).to eq :default
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should load_config when I set db" do
|
it "should load_config when I set db" do
|
||||||
subject.should_receive(:load_config)
|
expect(subject).to receive(:load_config)
|
||||||
subject.db = :my_db
|
subject.db = :my_db
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -66,12 +68,12 @@ module DatabaseCleaner
|
||||||
my_db:
|
my_db:
|
||||||
database: <%= "ONE".downcase %>
|
database: <%= "ONE".downcase %>
|
||||||
Y
|
Y
|
||||||
File.stub(:file?).with(config_location).and_return(true)
|
allow(File).to receive(:file?).with(config_location).and_return(true)
|
||||||
IO.stub(:read).with(config_location).and_return(yaml)
|
allow(IO).to receive(:read).with(config_location).and_return(yaml)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should parse the config" do
|
it "should parse the config" do
|
||||||
YAML.should_receive(:load).and_return({ :nil => nil })
|
expect(YAML).to receive(:load).and_return({ :nil => nil })
|
||||||
subject.load_config
|
subject.load_config
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -80,62 +82,62 @@ my_db:
|
||||||
my_db:
|
my_db:
|
||||||
database: one
|
database: one
|
||||||
Y
|
Y
|
||||||
YAML.should_receive(:load).with(transformed).and_return({ "my_db" => { "database" => "one" } })
|
expect(YAML).to receive(:load).with(transformed).and_return({ "my_db" => { "database" => "one" } })
|
||||||
subject.load_config
|
subject.load_config
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'use ActiveRecord::Base.configuration' do
|
context 'use ActiveRecord::Base.configuration' do
|
||||||
it 'when config file different with it' do
|
it 'when config file different with it' do
|
||||||
::ActiveRecord::Base.stub(:configurations).and_return({ "my_db" =>{ "database" => "two"} })
|
allow(::ActiveRecord::Base).to receive(:configurations).and_return({ "my_db" =>{ "database" => "two"} })
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should eq({ "database" => "two"})
|
expect(subject.connection_hash).to eq({ "database" => "two"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'use config file' do
|
context 'use config file' do
|
||||||
it 'when config file same with it' do
|
it 'when config file same with it' do
|
||||||
::ActiveRecord::Base.stub(:configurations).and_return({ "my_db" =>{ "database" => "one"} })
|
allow(::ActiveRecord::Base).to receive(:configurations).and_return({ "my_db" =>{ "database" => "one"} })
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should eq({ "database" => "one"})
|
expect(subject.connection_hash).to eq({ "database" => "one"})
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'when ::ActiveRecord::Base.configurations nil' do
|
it 'when ::ActiveRecord::Base.configurations nil' do
|
||||||
::ActiveRecord::Base.stub(:configurations).and_return(nil)
|
allow(::ActiveRecord::Base).to receive(:configurations).and_return(nil)
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should eq({ "database" => "one"})
|
expect(subject.connection_hash).to eq({ "database" => "one"})
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'when ::ActiveRecord::Base.configurations empty' do
|
it 'when ::ActiveRecord::Base.configurations empty' do
|
||||||
::ActiveRecord::Base.stub(:configurations).and_return({})
|
allow(::ActiveRecord::Base).to receive(:configurations).and_return({})
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should eq({ "database" => "one"})
|
expect(subject.connection_hash).to eq({ "database" => "one"})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should store the relevant config in connection_hash" do
|
it "should store the relevant config in connection_hash" do
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should eq( "database" => "one" )
|
expect(subject.connection_hash).to eq( "database" => "one" )
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should skip config if config file is not available" do
|
it "should skip config if config file is not available" do
|
||||||
File.should_receive(:file?).with(config_location).and_return(false)
|
expect(File).to receive(:file?).with(config_location).and_return(false)
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should_not be
|
expect(subject.connection_hash).not_to be
|
||||||
end
|
end
|
||||||
|
|
||||||
it "skips the file when the model is set" do
|
it "skips the file when the model is set" do
|
||||||
subject.db = FakeModel
|
subject.db = FakeModel
|
||||||
YAML.should_not_receive(:load)
|
expect(YAML).not_to receive(:load)
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should_not be
|
expect(subject.connection_hash).not_to be
|
||||||
end
|
end
|
||||||
|
|
||||||
it "skips the file when the db is set to :default" do
|
it "skips the file when the db is set to :default" do
|
||||||
# to avoid https://github.com/bmabey/database_cleaner/issues/72
|
# to avoid https://github.com/bmabey/database_cleaner/issues/72
|
||||||
subject.db = :default
|
subject.db = :default
|
||||||
YAML.should_not_receive(:load)
|
expect(YAML).not_to receive(:load)
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_hash.should_not be
|
expect(subject.connection_hash).not_to be
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -143,14 +145,14 @@ my_db:
|
||||||
describe "connection_hash" do
|
describe "connection_hash" do
|
||||||
it "should store connection_hash" do
|
it "should store connection_hash" do
|
||||||
subject.connection_hash = { :key => "value" }
|
subject.connection_hash = { :key => "value" }
|
||||||
subject.connection_hash.should eq( :key => "value" )
|
expect(subject.connection_hash).to eq( :key => "value" )
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "connection_class" do
|
describe "connection_class" do
|
||||||
it { expect { subject.connection_class }.to_not raise_error }
|
it { expect { subject.connection_class }.to_not raise_error }
|
||||||
it "should default to ActiveRecord::Base" do
|
it "should default to ActiveRecord::Base" do
|
||||||
subject.connection_class.should eq ::ActiveRecord::Base
|
expect(subject.connection_class).to eq ::ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with database models" do
|
context "with database models" do
|
||||||
|
@ -159,25 +161,24 @@ my_db:
|
||||||
subject.db = FakeModel
|
subject.db = FakeModel
|
||||||
subject.connection_hash = { }
|
subject.connection_hash = { }
|
||||||
subject.load_config
|
subject.load_config
|
||||||
subject.connection_class.should eq FakeModel
|
expect(subject.connection_class).to eq FakeModel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "connection_hash is not set" do
|
context "connection_hash is not set" do
|
||||||
it "allows for database models to be passed in" do
|
it "allows for database models to be passed in" do
|
||||||
subject.db = FakeModel
|
subject.db = FakeModel
|
||||||
subject.connection_class.should eq FakeModel
|
expect(subject.connection_class).to eq FakeModel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when connection_hash is set" do
|
context "when connection_hash is set" do
|
||||||
let(:hash) { double("hash") }
|
let(:hash) { {} }
|
||||||
before { ::ActiveRecord::Base.stub(:respond_to?).and_return(false) }
|
before { allow(subject).to receive(:connection_hash).and_return(hash) }
|
||||||
before { subject.stub(:connection_hash).and_return(hash) }
|
|
||||||
|
|
||||||
it "establish a connection using ActiveRecord::Base" do
|
it "establish a connection using ActiveRecord::Base" do
|
||||||
::ActiveRecord::Base.should_receive(:establish_connection).with(hash)
|
expect(::ActiveRecord::Base).to receive(:establish_connection).with(hash)
|
||||||
|
|
||||||
expect(subject.connection_class).to eq ::ActiveRecord::Base
|
expect(subject.connection_class).to eq ::ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,46 +1,41 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'database_cleaner/active_record/transaction'
|
require 'database_cleaner/active_record/transaction'
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module ActiveRecord
|
module ActiveRecord
|
||||||
|
|
||||||
describe Transaction do
|
RSpec.describe Transaction do
|
||||||
let (:connection) { double("connection") }
|
let (:connection) { double("connection") }
|
||||||
let (:connection_2) { double("connection") }
|
let (:connection_2) { double("connection") }
|
||||||
let (:connection_pool) { double("connection_pool")}
|
let (:connection_pool) { double("connection_pool")}
|
||||||
before(:each) do
|
before(:each) do
|
||||||
::ActiveRecord::Base.stub(:connection_pool).and_return(connection_pool)
|
allow(::ActiveRecord::Base).to receive(:connection_pool).and_return(connection_pool)
|
||||||
connection_pool.stub(:connections).and_return([connection])
|
allow(connection_pool).to receive(:connections).and_return([connection])
|
||||||
::ActiveRecord::Base.stub(:connection).and_return(connection)
|
allow(::ActiveRecord::Base).to receive(:connection).and_return(connection)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#start" do
|
describe "#start" do
|
||||||
[:begin_transaction, :begin_db_transaction].each do |begin_transaction_method|
|
[:begin_transaction, :begin_db_transaction].each do |begin_transaction_method|
|
||||||
context "using #{begin_transaction_method}" do
|
context "using #{begin_transaction_method}" do
|
||||||
before do
|
before do
|
||||||
connection.stub(:transaction)
|
allow(connection).to receive(:transaction)
|
||||||
connection.stub(begin_transaction_method)
|
allow(connection).to receive(begin_transaction_method)
|
||||||
connection.stub(:respond_to?).with(:begin_transaction).and_return(:begin_transaction == begin_transaction_method)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should increment open transactions if possible" do
|
it "should increment open transactions if possible" do
|
||||||
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(true)
|
expect(connection).to receive(:increment_open_transactions)
|
||||||
connection.should_receive(:increment_open_transactions)
|
|
||||||
Transaction.new.start
|
Transaction.new.start
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should tell ActiveRecord to increment connection if its not possible to increment current connection" do
|
it "should tell ActiveRecord to increment connection if its not possible to increment current connection" do
|
||||||
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(false)
|
expect(::ActiveRecord::Base).to receive(:increment_open_transactions)
|
||||||
::ActiveRecord::Base.should_receive(:increment_open_transactions)
|
|
||||||
Transaction.new.start
|
Transaction.new.start
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should start a transaction" do
|
it "should start a transaction" do
|
||||||
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(true)
|
allow(connection).to receive(:increment_open_transactions)
|
||||||
connection.stub(:increment_open_transactions)
|
expect(connection).to receive(begin_transaction_method)
|
||||||
connection.should_receive(begin_transaction_method)
|
expect(connection).to receive(:transaction)
|
||||||
connection.should_receive(:transaction)
|
|
||||||
Transaction.new.start
|
Transaction.new.start
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -50,74 +45,59 @@ module DatabaseCleaner
|
||||||
describe "#clean" do
|
describe "#clean" do
|
||||||
context "manual accounting of transaction count" do
|
context "manual accounting of transaction count" do
|
||||||
it "should start a transaction" do
|
it "should start a transaction" do
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
|
|
||||||
connection.stub(:decrement_open_transactions)
|
allow(connection).to receive(:decrement_open_transactions)
|
||||||
|
|
||||||
connection.should_receive(:rollback_db_transaction)
|
expect(connection).to receive(:rollback_db_transaction)
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should decrement open transactions if possible" do
|
it "should decrement open transactions if possible" do
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
|
|
||||||
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(true)
|
allow(connection).to receive(:rollback_db_transaction)
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
||||||
connection.stub(:rollback_db_transaction)
|
|
||||||
|
|
||||||
connection.should_receive(:decrement_open_transactions)
|
expect(connection).to receive(:decrement_open_transactions)
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not try to decrement or rollback if open_transactions is 0 for whatever reason" do
|
it "should not try to decrement or rollback if open_transactions is 0 for whatever reason" do
|
||||||
connection.should_receive(:open_transactions).and_return(0)
|
expect(connection).to receive(:open_transactions).and_return(0)
|
||||||
|
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should decrement connection via ActiveRecord::Base if connection won't" do
|
it "should decrement connection via ActiveRecord::Base if connection won't" do
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
allow(connection).to receive(:rollback_db_transaction)
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
||||||
connection.stub(:rollback_db_transaction)
|
|
||||||
|
|
||||||
::ActiveRecord::Base.should_receive(:decrement_open_transactions)
|
expect(::ActiveRecord::Base).to receive(:decrement_open_transactions)
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should rollback open transactions in all connections" do
|
it "should rollback open transactions in all connections" do
|
||||||
connection_pool.stub(:connections).and_return([connection, connection_2])
|
allow(connection_pool).to receive(:connections).and_return([connection, connection_2])
|
||||||
|
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
allow(connection).to receive(:rollback_db_transaction)
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
||||||
connection.stub(:rollback_db_transaction)
|
|
||||||
|
|
||||||
connection_2.should_receive(:open_transactions).and_return(1)
|
expect(connection_2).to receive(:open_transactions).and_return(1)
|
||||||
connection_2.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
allow(connection_2).to receive(:rollback_db_transaction)
|
||||||
connection_2.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
||||||
connection_2.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
||||||
connection_2.stub(:rollback_db_transaction)
|
|
||||||
|
|
||||||
::ActiveRecord::Base.should_receive(:decrement_open_transactions).twice
|
expect(::ActiveRecord::Base).to receive(:decrement_open_transactions).twice
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should rollback open transactions in all connections with an open transaction" do
|
it "should rollback open transactions in all connections with an open transaction" do
|
||||||
connection_pool.stub(:connections).and_return([connection, connection_2])
|
allow(connection_pool).to receive(:connections).and_return([connection, connection_2])
|
||||||
|
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
allow(connection).to receive(:rollback_db_transaction)
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
||||||
connection.stub(:rollback_db_transaction)
|
|
||||||
|
|
||||||
connection_2.should_receive(:open_transactions).and_return(0)
|
expect(connection_2).to receive(:open_transactions).and_return(0)
|
||||||
|
|
||||||
::ActiveRecord::Base.should_receive(:decrement_open_transactions).exactly(1).times
|
expect(::ActiveRecord::Base).to receive(:decrement_open_transactions).exactly(1).times
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -126,35 +106,33 @@ module DatabaseCleaner
|
||||||
before {stub_const("ActiveRecord::VERSION::MAJOR", 4) }
|
before {stub_const("ActiveRecord::VERSION::MAJOR", 4) }
|
||||||
|
|
||||||
it "should start a transaction" do
|
it "should start a transaction" do
|
||||||
connection.stub(:rollback_db_transaction)
|
allow(connection).to receive(:rollback_db_transaction)
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
|
|
||||||
connection.should_not_receive(:decrement_open_transactions)
|
expect(connection).not_to receive(:decrement_open_transactions)
|
||||||
connection.should_receive(:rollback_transaction)
|
expect(connection).to receive(:rollback_transaction)
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should decrement open transactions if possible" do
|
it "should decrement open transactions if possible" do
|
||||||
connection.stub(:rollback_transaction)
|
allow(connection).to receive(:rollback_transaction)
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
|
|
||||||
connection.should_not_receive(:decrement_open_transactions)
|
expect(connection).not_to receive(:decrement_open_transactions)
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not try to decrement or rollback if open_transactions is 0 for whatever reason" do
|
it "should not try to decrement or rollback if open_transactions is 0 for whatever reason" do
|
||||||
connection.should_receive(:open_transactions).and_return(0)
|
expect(connection).to receive(:open_transactions).and_return(0)
|
||||||
|
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should decrement connection via ActiveRecord::Base if connection won't" do
|
it "should decrement connection via ActiveRecord::Base if connection won't" do
|
||||||
connection.should_receive(:open_transactions).and_return(1)
|
expect(connection).to receive(:open_transactions).and_return(1)
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
allow(connection).to receive(:rollback_transaction)
|
||||||
connection.stub(:respond_to?).with(:rollback_transaction).and_return(true)
|
|
||||||
connection.stub(:rollback_transaction)
|
|
||||||
|
|
||||||
::ActiveRecord::Base.should_not_receive(:decrement_open_transactions)
|
expect(::ActiveRecord::Base).not_to receive(:decrement_open_transactions)
|
||||||
Transaction.new.clean
|
Transaction.new.clean
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -163,11 +141,11 @@ module DatabaseCleaner
|
||||||
describe "#connection_maintains_transaction_count?" do
|
describe "#connection_maintains_transaction_count?" do
|
||||||
it "should return true if the major active record version is < 4" do
|
it "should return true if the major active record version is < 4" do
|
||||||
stub_const("ActiveRecord::VERSION::MAJOR", 3)
|
stub_const("ActiveRecord::VERSION::MAJOR", 3)
|
||||||
Transaction.new.connection_maintains_transaction_count?.should be_true
|
expect(Transaction.new.connection_maintains_transaction_count?).to be_truthy
|
||||||
end
|
end
|
||||||
it "should return false if the major active record version is > 3" do
|
it "should return false if the major active record version is > 3" do
|
||||||
stub_const("ActiveRecord::VERSION::MAJOR", 4)
|
stub_const("ActiveRecord::VERSION::MAJOR", 4)
|
||||||
Transaction.new.connection_maintains_transaction_count?.should be_false
|
expect(Transaction.new.connection_maintains_transaction_count?).to be_falsey
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,38 +1,43 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
require 'support/active_record/mysql2_setup'
|
require 'support/active_record/mysql2_setup'
|
||||||
require 'database_cleaner/active_record/truncation'
|
require 'database_cleaner/active_record/truncation'
|
||||||
require 'database_cleaner/active_record/truncation/shared_fast_truncation'
|
require 'database_cleaner/active_record/truncation/shared_fast_truncation'
|
||||||
|
|
||||||
module ActiveRecord
|
RSpec.describe DatabaseCleaner::ActiveRecord::Truncation do
|
||||||
module ConnectionAdapters
|
let(:helper) { MySQL2Helper.new }
|
||||||
describe do
|
|
||||||
before(:all) { active_record_mysql2_setup }
|
|
||||||
|
|
||||||
let(:connection) { active_record_mysql2_connection }
|
let(:connection) do
|
||||||
|
helper.active_record_mysql2_connection
|
||||||
|
end
|
||||||
|
|
||||||
describe "#truncate_table" do
|
around do |example|
|
||||||
it "should truncate the table" do
|
helper.active_record_mysql2_setup
|
||||||
2.times { User.create }
|
|
||||||
|
|
||||||
connection.truncate_table('users')
|
example.run
|
||||||
User.count.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should reset AUTO_INCREMENT index of table" do
|
helper.active_record_mysql2_teardown
|
||||||
2.times { User.create }
|
end
|
||||||
User.delete_all
|
|
||||||
|
|
||||||
connection.truncate_table('users')
|
describe "AR connection adapter monkeypatches" do
|
||||||
|
describe "#truncate_table" do
|
||||||
|
it "should truncate the table" do
|
||||||
|
2.times { User.create }
|
||||||
|
|
||||||
User.create.id.should eq 1
|
connection.truncate_table('users')
|
||||||
end
|
expect(User.count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like "an adapter with pre-count truncation" do
|
it "should reset AUTO_INCREMENT index of table" do
|
||||||
let(:connection) { active_record_mysql2_connection }
|
2.times { User.create }
|
||||||
|
User.delete_all
|
||||||
|
|
||||||
|
connection.truncate_table('users')
|
||||||
|
|
||||||
|
expect(User.create.id).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it_behaves_like "an adapter with pre-count truncation"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,38 +1,43 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
require 'support/active_record/mysql_setup'
|
require 'support/active_record/mysql_setup'
|
||||||
require 'database_cleaner/active_record/truncation'
|
require 'database_cleaner/active_record/truncation'
|
||||||
require 'database_cleaner/active_record/truncation/shared_fast_truncation'
|
require 'database_cleaner/active_record/truncation/shared_fast_truncation'
|
||||||
|
|
||||||
module ActiveRecord
|
RSpec.describe DatabaseCleaner::ActiveRecord::Truncation do
|
||||||
module ConnectionAdapters
|
let(:helper) { MySQLHelper.new }
|
||||||
describe do
|
|
||||||
before(:all) { active_record_mysql_setup }
|
|
||||||
|
|
||||||
let(:connection) { active_record_mysql_connection }
|
let(:connection) do
|
||||||
|
helper.active_record_mysql_connection
|
||||||
|
end
|
||||||
|
|
||||||
describe "#truncate_table" do
|
around do |example|
|
||||||
it "should truncate the table" do
|
helper.active_record_mysql_setup
|
||||||
2.times { User.create }
|
|
||||||
|
|
||||||
connection.truncate_table('users')
|
example.run
|
||||||
User.count.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "should reset AUTO_INCREMENT index of table" do
|
helper.active_record_mysql_teardown
|
||||||
2.times { User.create }
|
end
|
||||||
User.delete_all
|
|
||||||
|
|
||||||
connection.truncate_table('users')
|
describe "AR connection adapter monkeypatches" do
|
||||||
|
describe "#truncate_table" do
|
||||||
|
it "should truncate the table" do
|
||||||
|
2.times { User.create }
|
||||||
|
|
||||||
User.create.id.should eq 1
|
connection.truncate_table('users')
|
||||||
end
|
expect(User.count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like "an adapter with pre-count truncation" do
|
it "should reset AUTO_INCREMENT index of table" do
|
||||||
let(:connection) { active_record_mysql_connection }
|
2.times { User.create }
|
||||||
|
User.delete_all
|
||||||
|
|
||||||
|
connection.truncate_table('users')
|
||||||
|
|
||||||
|
expect(User.create.id).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it_behaves_like "an adapter with pre-count truncation"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,75 +1,78 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
require 'support/active_record/postgresql_setup'
|
require 'support/active_record/postgresql_setup'
|
||||||
require 'database_cleaner/active_record/truncation'
|
require 'database_cleaner/active_record/truncation'
|
||||||
require 'database_cleaner/active_record/truncation/shared_fast_truncation'
|
require 'database_cleaner/active_record/truncation/shared_fast_truncation'
|
||||||
|
|
||||||
module ActiveRecord
|
RSpec.describe DatabaseCleaner::ActiveRecord::Truncation do
|
||||||
module ConnectionAdapters
|
let(:helper) { PostgreSQLHelper.new }
|
||||||
describe "schema_migrations table" do
|
|
||||||
it "is not truncated" do
|
let(:connection) do
|
||||||
active_record_pg_migrate
|
helper.active_record_pg_connection
|
||||||
DatabaseCleaner::ActiveRecord::Truncation.new.clean
|
end
|
||||||
result = active_record_pg_connection.execute("select count(*) from schema_migrations;")
|
|
||||||
result.values.first.should eq ["2"]
|
around do |example|
|
||||||
|
helper.active_record_pg_setup
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
helper.active_record_pg_teardown
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "AR connection adapter monkeypatches" do
|
||||||
|
describe "#truncate_table" do
|
||||||
|
it "truncates the table" do
|
||||||
|
2.times { User.create }
|
||||||
|
|
||||||
|
connection.truncate_table('users')
|
||||||
|
expect(User.count).to eq 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "truncates the table without id sequence" do
|
||||||
|
2.times { Agent.create }
|
||||||
|
|
||||||
|
connection.truncate_table('agents')
|
||||||
|
expect(Agent.count).to eq 0
|
||||||
|
end
|
||||||
|
|
||||||
|
it "resets AUTO_INCREMENT index of table" do
|
||||||
|
2.times { User.create }
|
||||||
|
User.delete_all
|
||||||
|
|
||||||
|
connection.truncate_table('users')
|
||||||
|
|
||||||
|
expect(User.create.id).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe do
|
describe ":except option cleanup" do
|
||||||
before(:all) { active_record_pg_setup }
|
it "should not truncate the tables specified in the :except option" do
|
||||||
|
2.times { User.create }
|
||||||
|
|
||||||
let(:connection) do
|
described_class.new(except: ['users']).clean
|
||||||
active_record_pg_connection
|
|
||||||
end
|
|
||||||
|
|
||||||
before(:each) do
|
expect( User.count ).to eq 2
|
||||||
connection.truncate_tables connection.tables
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#truncate_table" do
|
describe '#database_cleaner_table_cache' do
|
||||||
it "truncates the table" do
|
it 'should default to the list of tables with their schema' do
|
||||||
2.times { User.create }
|
expect(connection.database_cleaner_table_cache.first).to match(/^public\./)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
connection.truncate_table('users')
|
it_behaves_like "an adapter with pre-count truncation"
|
||||||
User.count.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "truncates the table without id sequence" do
|
describe "schema_migrations table" do
|
||||||
2.times { Agent.create }
|
it "is not truncated" do
|
||||||
|
helper.active_record_pg_teardown
|
||||||
|
helper.active_record_pg_migrate
|
||||||
|
|
||||||
connection.truncate_table('agents')
|
subject.clean
|
||||||
Agent.count.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "resets AUTO_INCREMENT index of table" do
|
|
||||||
2.times { User.create }
|
|
||||||
User.delete_all
|
|
||||||
|
|
||||||
connection.truncate_table('users')
|
|
||||||
|
|
||||||
User.create.id.should eq 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe ":except option cleanup" do
|
|
||||||
it "should not truncate the tables specified in the :except option" do
|
|
||||||
2.times { User.create }
|
|
||||||
|
|
||||||
::DatabaseCleaner::ActiveRecord::Truncation.new(:except => ['users']).clean
|
|
||||||
expect( User.count ).to eq 2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#database_cleaner_table_cache' do
|
|
||||||
it 'should default to the list of tables with their schema' do
|
|
||||||
connection.database_cleaner_table_cache.first.should match(/^public\./)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
it_behaves_like "an adapter with pre-count truncation" do
|
|
||||||
let(:connection) { active_record_pg_connection }
|
|
||||||
end
|
|
||||||
|
|
||||||
|
result = connection.execute("select count(*) from schema_migrations;")
|
||||||
|
expect(result.values.first).to eq ["2"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
shared_examples_for "an adapter with pre-count truncation" do
|
RSpec.shared_examples_for "an adapter with pre-count truncation" do
|
||||||
describe "#pre_count_truncate_tables" do
|
describe "#pre_count_truncate_tables" do
|
||||||
|
|
||||||
context "with :reset_ids set true" do
|
context "with :reset_ids set true" do
|
||||||
|
@ -6,7 +6,7 @@ shared_examples_for "an adapter with pre-count truncation" do
|
||||||
2.times { User.create }
|
2.times { User.create }
|
||||||
|
|
||||||
connection.pre_count_truncate_tables(%w[users], :reset_ids => true)
|
connection.pre_count_truncate_tables(%w[users], :reset_ids => true)
|
||||||
User.count.should be_zero
|
expect(User.count).to be_zero
|
||||||
end
|
end
|
||||||
|
|
||||||
it "resets AUTO_INCREMENT index of table" do
|
it "resets AUTO_INCREMENT index of table" do
|
||||||
|
@ -14,7 +14,7 @@ shared_examples_for "an adapter with pre-count truncation" do
|
||||||
User.delete_all
|
User.delete_all
|
||||||
|
|
||||||
connection.pre_count_truncate_tables(%w[users]) # true is also the default
|
connection.pre_count_truncate_tables(%w[users]) # true is also the default
|
||||||
User.create.id.should eq 1
|
expect(User.create.id).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ shared_examples_for "an adapter with pre-count truncation" do
|
||||||
2.times { User.create }
|
2.times { User.create }
|
||||||
|
|
||||||
connection.pre_count_truncate_tables(%w[users], :reset_ids => false)
|
connection.pre_count_truncate_tables(%w[users], :reset_ids => false)
|
||||||
User.count.should be_zero
|
expect(User.count).to be_zero
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not reset AUTO_INCREMENT index of table" do
|
it "does not reset AUTO_INCREMENT index of table" do
|
||||||
|
@ -33,7 +33,7 @@ shared_examples_for "an adapter with pre-count truncation" do
|
||||||
|
|
||||||
connection.pre_count_truncate_tables(%w[users], :reset_ids => false)
|
connection.pre_count_truncate_tables(%w[users], :reset_ids => false)
|
||||||
|
|
||||||
User.create.id.should eq 3
|
expect(User.create.id).to eq 3
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,39 +1,39 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
require 'support/active_record/sqlite3_setup'
|
require 'support/active_record/sqlite3_setup'
|
||||||
require 'database_cleaner/active_record/truncation'
|
require 'database_cleaner/active_record/truncation'
|
||||||
|
|
||||||
module ActiveRecord
|
RSpec.describe DatabaseCleaner::ActiveRecord::Truncation do
|
||||||
module ConnectionAdapters
|
let(:helper) { SQLite3Helper.new }
|
||||||
describe do
|
|
||||||
before(:all) { active_record_sqlite3_setup }
|
|
||||||
|
|
||||||
let(:connection) do
|
let(:connection) do
|
||||||
active_record_sqlite3_connection
|
helper.active_record_sqlite3_connection
|
||||||
|
end
|
||||||
|
|
||||||
|
around do |example|
|
||||||
|
helper.active_record_sqlite3_setup
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
helper.active_record_sqlite3_teardown
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "AR connection adapter monkeypatches" do
|
||||||
|
describe "#truncate_table" do
|
||||||
|
it "truncates the table" do
|
||||||
|
2.times { User.create }
|
||||||
|
|
||||||
|
connection.truncate_table('users')
|
||||||
|
expect(User.count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
before(:each) do
|
it "resets AUTO_INCREMENT index of table" do
|
||||||
connection.truncate_tables connection.tables
|
2.times { User.create }
|
||||||
|
User.delete_all
|
||||||
|
|
||||||
|
connection.truncate_table('users')
|
||||||
|
|
||||||
|
expect(User.create.id).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#truncate_table" do
|
|
||||||
it "truncates the table" do
|
|
||||||
2.times { User.create }
|
|
||||||
|
|
||||||
connection.truncate_table('users')
|
|
||||||
User.count.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "resets AUTO_INCREMENT index of table" do
|
|
||||||
2.times { User.create }
|
|
||||||
User.delete_all
|
|
||||||
|
|
||||||
connection.truncate_table('users')
|
|
||||||
|
|
||||||
User.create.id.should eq 1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
require 'active_record/connection_adapters/mysql_adapter'
|
require 'active_record/connection_adapters/mysql_adapter'
|
||||||
require 'active_record/connection_adapters/mysql2_adapter'
|
require 'active_record/connection_adapters/mysql2_adapter'
|
||||||
|
@ -11,9 +10,9 @@ module ActiveRecord
|
||||||
module ConnectionAdapters
|
module ConnectionAdapters
|
||||||
#JdbcAdapter IBM_DBAdapter
|
#JdbcAdapter IBM_DBAdapter
|
||||||
[ MysqlAdapter, Mysql2Adapter, SQLite3Adapter, PostgreSQLAdapter ].each do |adapter|
|
[ MysqlAdapter, Mysql2Adapter, SQLite3Adapter, PostgreSQLAdapter ].each do |adapter|
|
||||||
describe adapter, "#truncate_table" do
|
RSpec.describe adapter, "#truncate_table" do
|
||||||
it "responds" do
|
it "responds" do
|
||||||
adapter.instance_methods.should include(:truncate_table)
|
expect(adapter.instance_methods).to include(:truncate_table)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -23,64 +22,64 @@ end
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module ActiveRecord
|
module ActiveRecord
|
||||||
|
|
||||||
describe Truncation do
|
RSpec.describe Truncation do
|
||||||
let(:connection) { double('connection') }
|
let(:connection) { double('connection') }
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
connection.stub(:disable_referential_integrity).and_yield
|
allow(connection).to receive(:disable_referential_integrity).and_yield
|
||||||
connection.stub(:database_cleaner_view_cache).and_return([])
|
allow(connection).to receive(:database_cleaner_view_cache).and_return([])
|
||||||
::ActiveRecord::Base.stub(:connection).and_return(connection)
|
allow(::ActiveRecord::Base).to receive(:connection).and_return(connection)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#clean' do
|
describe '#clean' do
|
||||||
it "should truncate all tables except for schema_migrations" do
|
it "should truncate all tables except for schema_migrations" do
|
||||||
connection.stub(:database_cleaner_table_cache).and_return(%w[schema_migrations widgets dogs])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return(%w[schema_migrations widgets dogs])
|
||||||
|
|
||||||
connection.should_receive(:truncate_tables).with(['widgets', 'dogs'])
|
expect(connection).to receive(:truncate_tables).with(['widgets', 'dogs'])
|
||||||
Truncation.new.clean
|
Truncation.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should use ActiveRecord's SchemaMigration.table_name" do
|
it "should use ActiveRecord's SchemaMigration.table_name" do
|
||||||
connection.stub(:database_cleaner_table_cache).and_return(%w[pre_schema_migrations_suf widgets dogs])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return(%w[pre_schema_migrations_suf widgets dogs])
|
||||||
::ActiveRecord::Base.stub(:table_name_prefix).and_return('pre_')
|
allow(::ActiveRecord::Base).to receive(:table_name_prefix).and_return('pre_')
|
||||||
::ActiveRecord::Base.stub(:table_name_suffix).and_return('_suf')
|
allow(::ActiveRecord::Base).to receive(:table_name_suffix).and_return('_suf')
|
||||||
|
|
||||||
connection.should_receive(:truncate_tables).with(['widgets', 'dogs'])
|
expect(connection).to receive(:truncate_tables).with(['widgets', 'dogs'])
|
||||||
|
|
||||||
Truncation.new.clean
|
Truncation.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should only truncate the tables specified in the :only option when provided" do
|
it "should only truncate the tables specified in the :only option when provided" do
|
||||||
connection.stub(:database_cleaner_table_cache).and_return(%w[schema_migrations widgets dogs])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return(%w[schema_migrations widgets dogs])
|
||||||
|
|
||||||
connection.should_receive(:truncate_tables).with(['widgets'])
|
expect(connection).to receive(:truncate_tables).with(['widgets'])
|
||||||
|
|
||||||
Truncation.new(:only => ['widgets']).clean
|
Truncation.new(:only => ['widgets']).clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not truncate the tables specified in the :except option" do
|
it "should not truncate the tables specified in the :except option" do
|
||||||
connection.stub(:database_cleaner_table_cache).and_return(%w[schema_migrations widgets dogs])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return(%w[schema_migrations widgets dogs])
|
||||||
|
|
||||||
connection.should_receive(:truncate_tables).with(['dogs'])
|
expect(connection).to receive(:truncate_tables).with(['dogs'])
|
||||||
|
|
||||||
Truncation.new(:except => ['widgets']).clean
|
Truncation.new(:except => ['widgets']).clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should raise an error when :only and :except options are used" do
|
it "should raise an error when :only and :except options are used" do
|
||||||
running {
|
expect {
|
||||||
Truncation.new(:except => ['widgets'], :only => ['widgets'])
|
Truncation.new(:except => ['widgets'], :only => ['widgets'])
|
||||||
}.should raise_error(ArgumentError)
|
}.to raise_error(ArgumentError)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should raise an error when invalid options are provided" do
|
it "should raise an error when invalid options are provided" do
|
||||||
running { Truncation.new(:foo => 'bar') }.should raise_error(ArgumentError)
|
expect { Truncation.new(:foo => 'bar') }.to raise_error(ArgumentError)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not truncate views" do
|
it "should not truncate views" do
|
||||||
connection.stub(:database_cleaner_table_cache).and_return(%w[widgets dogs])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return(%w[widgets dogs])
|
||||||
connection.stub(:database_cleaner_view_cache).and_return(["widgets"])
|
allow(connection).to receive(:database_cleaner_view_cache).and_return(["widgets"])
|
||||||
|
|
||||||
connection.should_receive(:truncate_tables).with(['dogs'])
|
expect(connection).to receive(:truncate_tables).with(['dogs'])
|
||||||
|
|
||||||
Truncation.new.clean
|
Truncation.new.clean
|
||||||
end
|
end
|
||||||
|
@ -89,25 +88,25 @@ module DatabaseCleaner
|
||||||
subject { Truncation.new }
|
subject { Truncation.new }
|
||||||
|
|
||||||
it "should rely on #pre_count_truncate_tables if #pre_count? returns true" do
|
it "should rely on #pre_count_truncate_tables if #pre_count? returns true" do
|
||||||
connection.stub(:database_cleaner_table_cache).and_return(%w[widgets dogs])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return(%w[widgets dogs])
|
||||||
connection.stub(:database_cleaner_view_cache).and_return(["widgets"])
|
allow(connection).to receive(:database_cleaner_view_cache).and_return(["widgets"])
|
||||||
|
|
||||||
subject.instance_variable_set(:"@pre_count", true)
|
subject.instance_variable_set(:"@pre_count", true)
|
||||||
|
|
||||||
connection.should_not_receive(:truncate_tables).with(['dogs'])
|
expect(connection).not_to receive(:truncate_tables).with(['dogs'])
|
||||||
connection.should_receive(:pre_count_truncate_tables).with(['dogs'], :reset_ids => true)
|
expect(connection).to receive(:pre_count_truncate_tables).with(['dogs'], :reset_ids => true)
|
||||||
|
|
||||||
subject.clean
|
subject.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not rely on #pre_count_truncate_tables if #pre_count? return false" do
|
it "should not rely on #pre_count_truncate_tables if #pre_count? return false" do
|
||||||
connection.stub(:database_cleaner_table_cache).and_return(%w[widgets dogs])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return(%w[widgets dogs])
|
||||||
connection.stub(:database_cleaner_view_cache).and_return(["widgets"])
|
allow(connection).to receive(:database_cleaner_view_cache).and_return(["widgets"])
|
||||||
|
|
||||||
subject.instance_variable_set(:"@pre_count", false)
|
subject.instance_variable_set(:"@pre_count", false)
|
||||||
|
|
||||||
connection.should_not_receive(:pre_count_truncate_tables).with(['dogs'], :reset_ids => true)
|
expect(connection).not_to receive(:pre_count_truncate_tables).with(['dogs'], :reset_ids => true)
|
||||||
connection.should_receive(:truncate_tables).with(['dogs'])
|
expect(connection).to receive(:truncate_tables).with(['dogs'])
|
||||||
|
|
||||||
subject.clean
|
subject.clean
|
||||||
end
|
end
|
||||||
|
@ -115,20 +114,20 @@ module DatabaseCleaner
|
||||||
|
|
||||||
context 'when :cache_tables is set to true' do
|
context 'when :cache_tables is set to true' do
|
||||||
it 'caches the list of tables to be truncated' do
|
it 'caches the list of tables to be truncated' do
|
||||||
connection.should_receive(:database_cleaner_table_cache).and_return([])
|
expect(connection).to receive(:database_cleaner_table_cache).and_return([])
|
||||||
connection.should_not_receive(:tables)
|
expect(connection).not_to receive(:tables)
|
||||||
|
|
||||||
connection.stub(:truncate_tables)
|
allow(connection).to receive(:truncate_tables)
|
||||||
Truncation.new({ :cache_tables => true }).clean
|
Truncation.new({ :cache_tables => true }).clean
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when :cache_tables is set to false' do
|
context 'when :cache_tables is set to false' do
|
||||||
it 'does not cache the list of tables to be truncated' do
|
it 'does not cache the list of tables to be truncated' do
|
||||||
connection.should_not_receive(:database_cleaner_table_cache)
|
expect(connection).not_to receive(:database_cleaner_table_cache)
|
||||||
connection.should_receive(:tables).and_return([])
|
expect(connection).to receive(:tables).and_return([])
|
||||||
|
|
||||||
connection.stub(:truncate_tables)
|
allow(connection).to receive(:truncate_tables)
|
||||||
Truncation.new({ :cache_tables => false }).clean
|
Truncation.new({ :cache_tables => false }).clean
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -136,43 +135,49 @@ module DatabaseCleaner
|
||||||
|
|
||||||
describe '#pre_count?' do
|
describe '#pre_count?' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
connection.stub(:disable_referential_integrity).and_yield
|
allow(connection).to receive(:disable_referential_integrity).and_yield
|
||||||
connection.stub(:database_cleaner_view_cache).and_return([])
|
allow(connection).to receive(:database_cleaner_view_cache).and_return([])
|
||||||
::ActiveRecord::Base.stub(:connection).and_return(connection)
|
allow(::ActiveRecord::Base).to receive(:connection).and_return(connection)
|
||||||
end
|
end
|
||||||
|
|
||||||
subject { Truncation.new }
|
subject { Truncation.new }
|
||||||
its(:pre_count?) { should eq false }
|
|
||||||
|
it 'should return false initially' do
|
||||||
|
expect(subject.send(:pre_count?)).to eq false
|
||||||
|
end
|
||||||
|
|
||||||
it 'should return true if @reset_id is set and non false or nil' do
|
it 'should return true if @reset_id is set and non false or nil' do
|
||||||
subject.instance_variable_set(:"@pre_count", true)
|
subject.instance_variable_set(:"@pre_count", true)
|
||||||
subject.send(:pre_count?).should eq true
|
expect(subject.send(:pre_count?)).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return false if @reset_id is set to false' do
|
it 'should return false if @reset_id is set to false' do
|
||||||
subject.instance_variable_set(:"@pre_count", false)
|
subject.instance_variable_set(:"@pre_count", false)
|
||||||
subject.send(:pre_count?).should eq false
|
expect(subject.send(:pre_count?)).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe '#reset_ids?' do
|
describe '#reset_ids?' do
|
||||||
before(:each) do
|
before(:each) do
|
||||||
connection.stub(:disable_referential_integrity).and_yield
|
allow(connection).to receive(:disable_referential_integrity).and_yield
|
||||||
connection.stub(:database_cleaner_view_cache).and_return([])
|
allow(connection).to receive(:database_cleaner_view_cache).and_return([])
|
||||||
::ActiveRecord::Base.stub(:connection).and_return(connection)
|
allow(::ActiveRecord::Base).to receive(:connection).and_return(connection)
|
||||||
end
|
end
|
||||||
|
|
||||||
subject { Truncation.new }
|
subject { Truncation.new }
|
||||||
its(:reset_ids?) { should eq true }
|
|
||||||
|
|
||||||
it 'should return true if @reset_id is set and non false or nil' do
|
it 'should return true initially' do
|
||||||
|
expect(subject.send(:reset_ids?)).to eq true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should return true if @reset_id is set and non falsey' do
|
||||||
subject.instance_variable_set(:"@reset_ids", 'Something')
|
subject.instance_variable_set(:"@reset_ids", 'Something')
|
||||||
subject.send(:reset_ids?).should eq true
|
expect(subject.send(:reset_ids?)).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return false if @reset_id is set to false' do
|
it 'should return false if @reset_id is set to false' do
|
||||||
subject.instance_variable_set(:"@reset_ids", false)
|
subject.instance_variable_set(:"@reset_ids", false)
|
||||||
subject.send(:reset_ids?).should eq false
|
expect(subject.send(:reset_ids?)).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
require File.dirname(__FILE__) + '/../spec_helper'
|
|
||||||
require 'database_cleaner/active_record/transaction'
|
require 'database_cleaner/active_record/transaction'
|
||||||
require 'database_cleaner/data_mapper/transaction'
|
require 'database_cleaner/data_mapper/transaction'
|
||||||
require 'database_cleaner/mongo_mapper/truncation'
|
require 'database_cleaner/mongo_mapper/truncation'
|
||||||
|
@ -7,187 +6,144 @@ require 'database_cleaner/couch_potato/truncation'
|
||||||
require 'database_cleaner/neo4j/transaction'
|
require 'database_cleaner/neo4j/transaction'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe Base do
|
RSpec.describe Base do
|
||||||
|
|
||||||
let(:mock_strategy) {
|
let(:mock_strategy) {
|
||||||
double("strategy").tap{|strategy|
|
double("strategy").tap{|strategy|
|
||||||
strategy.stub(:to_ary => [strategy])
|
allow(strategy).to receive_messages(:to_ary => [strategy])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
describe "autodetect" do
|
describe "autodetect" do
|
||||||
|
before do
|
||||||
#Cache all ORMs, we'll need them later but not now.
|
hide_const("ActiveRecord")
|
||||||
before(:all) do
|
hide_const("DataMapper")
|
||||||
Temp_AR = ::ActiveRecord if defined?(::ActiveRecord) and not defined?(Temp_AR)
|
hide_const("MongoMapper")
|
||||||
Temp_DM = ::DataMapper if defined?(::DataMapper) and not defined?(Temp_DM)
|
hide_const("Mongoid")
|
||||||
Temp_MM = ::MongoMapper if defined?(::MongoMapper) and not defined?(Temp_MM)
|
hide_const("CouchPotato")
|
||||||
Temp_MO = ::Mongoid if defined?(::Mongoid) and not defined?(Temp_MO)
|
hide_const("Sequel")
|
||||||
Temp_CP = ::CouchPotato if defined?(::CouchPotato) and not defined?(Temp_CP)
|
hide_const("Moped")
|
||||||
Temp_SQ = ::Sequel if defined?(::Sequel) and not defined?(Temp_SQ)
|
hide_const("Redis")
|
||||||
Temp_MP = ::Moped if defined?(::Moped) and not defined?(Temp_MP)
|
hide_const("Ohm")
|
||||||
Temp_RS = ::Redis if defined?(::Redis) and not defined?(Temp_RS)
|
hide_const("Neo4j")
|
||||||
Temp_OH = ::Ohm if defined?(::Ohm) and not defined?(Temp_OH)
|
|
||||||
Temp_NJ = ::Neo4j if defined?(::Neo4j) and not defined?(Temp_NJ)
|
|
||||||
end
|
|
||||||
|
|
||||||
#Remove all ORM mocks and restore from cache
|
|
||||||
after(:all) do
|
|
||||||
Object.send(:remove_const, 'ActiveRecord') if defined?(::ActiveRecord)
|
|
||||||
Object.send(:remove_const, 'DataMapper') if defined?(::DataMapper)
|
|
||||||
Object.send(:remove_const, 'MongoMapper') if defined?(::MongoMapper)
|
|
||||||
Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
|
|
||||||
Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
|
|
||||||
Object.send(:remove_const, 'Sequel') if defined?(::Sequel)
|
|
||||||
Object.send(:remove_const, 'Moped') if defined?(::Moped)
|
|
||||||
Object.send(:remove_const, 'Ohm') if defined?(::Ohm)
|
|
||||||
Object.send(:remove_const, 'Redis') if defined?(::Redis)
|
|
||||||
Object.send(:remove_const, 'Neo4j') if defined?(::Neo4j)
|
|
||||||
|
|
||||||
|
|
||||||
# Restore ORMs
|
|
||||||
::ActiveRecord = Temp_AR if defined? Temp_AR
|
|
||||||
::DataMapper = Temp_DM if defined? Temp_DM
|
|
||||||
::MongoMapper = Temp_MM if defined? Temp_MM
|
|
||||||
::Mongoid = Temp_MO if defined? Temp_MO
|
|
||||||
::CouchPotato = Temp_CP if defined? Temp_CP
|
|
||||||
::Sequel = Temp_SQ if defined? Temp_SQ
|
|
||||||
::Moped = Temp_MP if defined? Temp_MP
|
|
||||||
::Ohm = Temp_OH if defined? Temp_OH
|
|
||||||
::Redis = Temp_RS if defined? Temp_RS
|
|
||||||
::Neo4j = Temp_NJ if defined? Temp_NJ
|
|
||||||
end
|
|
||||||
|
|
||||||
#reset the orm mocks
|
|
||||||
before(:each) do
|
|
||||||
Object.send(:remove_const, 'ActiveRecord') if defined?(::ActiveRecord)
|
|
||||||
Object.send(:remove_const, 'DataMapper') if defined?(::DataMapper)
|
|
||||||
Object.send(:remove_const, 'MongoMapper') if defined?(::MongoMapper)
|
|
||||||
Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
|
|
||||||
Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
|
|
||||||
Object.send(:remove_const, 'Sequel') if defined?(::Sequel)
|
|
||||||
Object.send(:remove_const, 'Moped') if defined?(::Moped)
|
|
||||||
Object.send(:remove_const, 'Ohm') if defined?(::Ohm)
|
|
||||||
Object.send(:remove_const, 'Redis') if defined?(::Redis)
|
|
||||||
Object.send(:remove_const, 'Neo4j') if defined?(::Neo4j)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
let(:cleaner) { DatabaseCleaner::Base.new :autodetect }
|
let(:cleaner) { DatabaseCleaner::Base.new :autodetect }
|
||||||
|
|
||||||
it "should raise an error when no ORM is detected" do
|
it "should raise an error when no ORM is detected" do
|
||||||
running { cleaner }.should raise_error(DatabaseCleaner::NoORMDetected)
|
expect { cleaner }.to raise_error(DatabaseCleaner::NoORMDetected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should detect ActiveRecord first" do
|
it "should detect ActiveRecord first" do
|
||||||
Object.const_set('ActiveRecord','Actively mocking records.')
|
stub_const('ActiveRecord','Actively mocking records.')
|
||||||
Object.const_set('DataMapper', 'Mapping data mocks')
|
stub_const('DataMapper', 'Mapping data mocks')
|
||||||
Object.const_set('MongoMapper', 'Mapping mock mongos')
|
stub_const('MongoMapper', 'Mapping mock mongos')
|
||||||
Object.const_set('Mongoid', 'Mongoid mock')
|
stub_const('Mongoid', 'Mongoid mock')
|
||||||
Object.const_set('CouchPotato', 'Couching mock potatos')
|
stub_const('CouchPotato', 'Couching mock potatos')
|
||||||
Object.const_set('Sequel', 'Sequel mock')
|
stub_const('Sequel', 'Sequel mock')
|
||||||
Object.const_set('Moped', 'Moped mock')
|
stub_const('Moped', 'Moped mock')
|
||||||
Object.const_set('Ohm', 'Ohm mock')
|
stub_const('Ohm', 'Ohm mock')
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :active_record
|
expect(cleaner.orm).to eq :active_record
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should detect DataMapper second" do
|
it "should detect DataMapper second" do
|
||||||
Object.const_set('DataMapper', 'Mapping data mocks')
|
stub_const('DataMapper', 'Mapping data mocks')
|
||||||
Object.const_set('MongoMapper', 'Mapping mock mongos')
|
stub_const('MongoMapper', 'Mapping mock mongos')
|
||||||
Object.const_set('Mongoid', 'Mongoid mock')
|
stub_const('Mongoid', 'Mongoid mock')
|
||||||
Object.const_set('CouchPotato', 'Couching mock potatos')
|
stub_const('CouchPotato', 'Couching mock potatos')
|
||||||
Object.const_set('Sequel', 'Sequel mock')
|
stub_const('Sequel', 'Sequel mock')
|
||||||
Object.const_set('Moped', 'Moped mock')
|
stub_const('Moped', 'Moped mock')
|
||||||
Object.const_set('Ohm', 'Ohm mock')
|
stub_const('Ohm', 'Ohm mock')
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :data_mapper
|
expect(cleaner.orm).to eq :data_mapper
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should detect MongoMapper third" do
|
it "should detect MongoMapper third" do
|
||||||
Object.const_set('MongoMapper', 'Mapping mock mongos')
|
stub_const('MongoMapper', 'Mapping mock mongos')
|
||||||
Object.const_set('Mongoid', 'Mongoid mock')
|
stub_const('Mongoid', 'Mongoid mock')
|
||||||
Object.const_set('CouchPotato', 'Couching mock potatos')
|
stub_const('CouchPotato', 'Couching mock potatos')
|
||||||
Object.const_set('Sequel', 'Sequel mock')
|
stub_const('Sequel', 'Sequel mock')
|
||||||
Object.const_set('Moped', 'Moped mock')
|
stub_const('Moped', 'Moped mock')
|
||||||
Object.const_set('Ohm', 'Ohm mock')
|
stub_const('Ohm', 'Ohm mock')
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :mongo_mapper
|
expect(cleaner.orm).to eq :mongo_mapper
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should detect Mongoid fourth" do
|
it "should detect Mongoid fourth" do
|
||||||
Object.const_set('Mongoid', 'Mongoid mock')
|
stub_const('Mongoid', 'Mongoid mock')
|
||||||
Object.const_set('CouchPotato', 'Couching mock potatos')
|
stub_const('CouchPotato', 'Couching mock potatos')
|
||||||
Object.const_set('Sequel', 'Sequel mock')
|
stub_const('Sequel', 'Sequel mock')
|
||||||
Object.const_set('Moped', 'Moped mock')
|
stub_const('Moped', 'Moped mock')
|
||||||
Object.const_set('Ohm', 'Ohm mock')
|
stub_const('Ohm', 'Ohm mock')
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :mongoid
|
expect(cleaner.orm).to eq :mongoid
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should detect CouchPotato fifth" do
|
it "should detect CouchPotato fifth" do
|
||||||
Object.const_set('CouchPotato', 'Couching mock potatos')
|
stub_const('CouchPotato', 'Couching mock potatos')
|
||||||
Object.const_set('Sequel', 'Sequel mock')
|
stub_const('Sequel', 'Sequel mock')
|
||||||
Object.const_set('Moped', 'Moped mock')
|
stub_const('Moped', 'Moped mock')
|
||||||
Object.const_set('Ohm', 'Ohm mock')
|
stub_const('Ohm', 'Ohm mock')
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :couch_potato
|
expect(cleaner.orm).to eq :couch_potato
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should detect Sequel sixth" do
|
it "should detect Sequel sixth" do
|
||||||
Object.const_set('Sequel', 'Sequel mock')
|
stub_const('Sequel', 'Sequel mock')
|
||||||
Object.const_set('Moped', 'Moped mock')
|
stub_const('Moped', 'Moped mock')
|
||||||
Object.const_set('Ohm', 'Ohm mock')
|
stub_const('Ohm', 'Ohm mock')
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :sequel
|
expect(cleaner.orm).to eq :sequel
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'detects Moped seventh' do
|
it 'detects Moped seventh' do
|
||||||
Object.const_set('Moped', 'Moped mock')
|
stub_const('Moped', 'Moped mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :moped
|
expect(cleaner.orm).to eq :moped
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'detects Ohm eighth' do
|
it 'detects Ohm eighth' do
|
||||||
Object.const_set('Ohm', 'Ohm mock')
|
stub_const('Ohm', 'Ohm mock')
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :ohm
|
expect(cleaner.orm).to eq :ohm
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'detects Redis ninth' do
|
it 'detects Redis ninth' do
|
||||||
Object.const_set('Redis', 'Redis mock')
|
stub_const('Redis', 'Redis mock')
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :redis
|
expect(cleaner.orm).to eq :redis
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'detects Neo4j tenth' do
|
it 'detects Neo4j tenth' do
|
||||||
Object.const_set('Neo4j', 'Neo4j mock')
|
stub_const('Neo4j', 'Neo4j mock')
|
||||||
|
|
||||||
cleaner.orm.should eq :neo4j
|
expect(cleaner.orm).to eq :neo4j
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -197,11 +153,11 @@ module DatabaseCleaner
|
||||||
mockule = double("module")
|
mockule = double("module")
|
||||||
|
|
||||||
cleaner = ::DatabaseCleaner::Base.new
|
cleaner = ::DatabaseCleaner::Base.new
|
||||||
cleaner.should_receive(:orm).and_return(orm)
|
expect(cleaner).to receive(:orm).and_return(orm)
|
||||||
|
|
||||||
::DatabaseCleaner.should_receive(:orm_module).with(orm).and_return(mockule)
|
expect(::DatabaseCleaner).to receive(:orm_module).with(orm).and_return(mockule)
|
||||||
|
|
||||||
cleaner.send(:orm_module).should eq mockule
|
expect(cleaner.send(:orm_module)).to eq mockule
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -213,8 +169,8 @@ module DatabaseCleaner
|
||||||
two = DatabaseCleaner::Base.new(:active_record,:connection => :default)
|
two = DatabaseCleaner::Base.new(:active_record,:connection => :default)
|
||||||
two.strategy = mock_strategy
|
two.strategy = mock_strategy
|
||||||
|
|
||||||
one.should eq two
|
expect(one).to eq two
|
||||||
two.should eq one
|
expect(two).to eq one
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not be equal if orm are not the same" do
|
it "should not be equal if orm are not the same" do
|
||||||
|
@ -224,8 +180,8 @@ module DatabaseCleaner
|
||||||
two = DatabaseCleaner::Base.new(:active_record, :connection => :default)
|
two = DatabaseCleaner::Base.new(:active_record, :connection => :default)
|
||||||
two.strategy = mock_strategy
|
two.strategy = mock_strategy
|
||||||
|
|
||||||
one.should_not eq two
|
expect(one).not_to eq two
|
||||||
two.should_not eq one
|
expect(two).not_to eq one
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not be equal if connection are not the same" do
|
it "should not be equal if connection are not the same" do
|
||||||
|
@ -236,8 +192,8 @@ module DatabaseCleaner
|
||||||
two = DatabaseCleaner::Base.new(:active_record, :connection => :other)
|
two = DatabaseCleaner::Base.new(:active_record, :connection => :other)
|
||||||
two.strategy = :truncation
|
two.strategy = :truncation
|
||||||
|
|
||||||
one.should_not eq two
|
expect(one).not_to eq two
|
||||||
two.should_not eq one
|
expect(two).not_to eq one
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -246,50 +202,50 @@ module DatabaseCleaner
|
||||||
subject { ::DatabaseCleaner::Base.new(:active_record,:connection => :my_db) }
|
subject { ::DatabaseCleaner::Base.new(:active_record,:connection => :my_db) }
|
||||||
|
|
||||||
it "should store db from :connection in params hash" do
|
it "should store db from :connection in params hash" do
|
||||||
subject.db.should eq :my_db
|
expect(subject.db).to eq :my_db
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "orm" do
|
describe "orm" do
|
||||||
it "should store orm" do
|
it "should store orm" do
|
||||||
cleaner = ::DatabaseCleaner::Base.new :a_orm
|
cleaner = ::DatabaseCleaner::Base.new :a_orm
|
||||||
cleaner.orm.should eq :a_orm
|
expect(cleaner.orm).to eq :a_orm
|
||||||
end
|
end
|
||||||
|
|
||||||
it "converts string to symbols" do
|
it "converts string to symbols" do
|
||||||
cleaner = ::DatabaseCleaner::Base.new "mongoid"
|
cleaner = ::DatabaseCleaner::Base.new "mongoid"
|
||||||
cleaner.orm.should eq :mongoid
|
expect(cleaner.orm).to eq :mongoid
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is autodetected if orm is not provided" do
|
it "is autodetected if orm is not provided" do
|
||||||
cleaner = ::DatabaseCleaner::Base.new
|
cleaner = ::DatabaseCleaner::Base.new
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it "is autodetected if you specify :autodetect" do
|
it "is autodetected if you specify :autodetect" do
|
||||||
cleaner = ::DatabaseCleaner::Base.new "autodetect"
|
cleaner = ::DatabaseCleaner::Base.new "autodetect"
|
||||||
cleaner.should be_auto_detected
|
expect(cleaner).to be_auto_detected
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should default to autodetect upon initalisation" do
|
it "should default to autodetect upon initalisation" do
|
||||||
subject.should be_auto_detected
|
expect(subject).to be_auto_detected
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "db" do
|
describe "db" do
|
||||||
it "should default to :default" do
|
it "should default to :default" do
|
||||||
subject.db.should eq :default
|
expect(subject.db).to eq :default
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return any stored db value" do
|
it "should return any stored db value" do
|
||||||
subject.stub(:strategy_db=)
|
allow(subject).to receive(:strategy_db=)
|
||||||
subject.db = :test_db
|
subject.db = :test_db
|
||||||
subject.db.should eq :test_db
|
expect(subject.db).to eq :test_db
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should pass db to any specified strategy" do
|
it "should pass db to any specified strategy" do
|
||||||
subject.should_receive(:strategy_db=).with(:a_new_db)
|
expect(subject).to receive(:strategy_db=).with(:a_new_db)
|
||||||
subject.db = :a_new_db
|
subject.db = :a_new_db
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -302,26 +258,21 @@ module DatabaseCleaner
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should check that strategy supports db specification" do
|
it "should check that strategy supports db specification" do
|
||||||
strategy.should_receive(:respond_to?).with(:db=).and_return(true)
|
allow(strategy).to receive(:db=)
|
||||||
strategy.stub(:db=)
|
|
||||||
subject.strategy_db = :a_db
|
subject.strategy_db = :a_db
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when strategy supports db specification" do
|
context "when strategy supports db specification" do
|
||||||
before(:each) { strategy.stub(:respond_to?).with(:db=).and_return true }
|
|
||||||
|
|
||||||
it "should pass db to the strategy" do
|
it "should pass db to the strategy" do
|
||||||
strategy.should_receive(:db=).with(:a_db)
|
expect(strategy).to receive(:db=).with(:a_db)
|
||||||
subject.strategy_db = :a_db
|
subject.strategy_db = :a_db
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "when strategy doesn't supports db specification" do
|
context "when strategy doesn't supports db specification" do
|
||||||
before(:each) { strategy.stub(:respond_to?).with(:db=).and_return false }
|
|
||||||
|
|
||||||
it "should check to see if db is :default" do
|
it "should check to see if db is :default" do
|
||||||
db = double("default")
|
db = double("default")
|
||||||
db.should_receive(:==).with(:default).and_return(true)
|
expect(db).to receive(:==).with(:default).and_return(true)
|
||||||
|
|
||||||
subject.strategy_db = db
|
subject.strategy_db = db
|
||||||
end
|
end
|
||||||
|
@ -336,40 +287,40 @@ module DatabaseCleaner
|
||||||
describe "clean_with" do
|
describe "clean_with" do
|
||||||
let (:strategy) { double("strategy",:clean => true) }
|
let (:strategy) { double("strategy",:clean => true) }
|
||||||
|
|
||||||
before(:each) { subject.stub(:create_strategy).with(anything).and_return(strategy) }
|
before(:each) { allow(subject).to receive(:create_strategy).with(anything).and_return(strategy) }
|
||||||
|
|
||||||
it "should pass all arguments to create_strategy" do
|
it "should pass all arguments to create_strategy" do
|
||||||
subject.should_receive(:create_strategy).with(:lorum, :dollar, :amet, :ipsum => "random").and_return(strategy)
|
expect(subject).to receive(:create_strategy).with(:lorum, :dollar, :amet, :ipsum => "random").and_return(strategy)
|
||||||
subject.clean_with :lorum, :dollar, :amet, { :ipsum => "random" }
|
subject.clean_with :lorum, :dollar, :amet, { :ipsum => "random" }
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should invoke clean on the created strategy" do
|
it "should invoke clean on the created strategy" do
|
||||||
strategy.should_receive(:clean)
|
expect(strategy).to receive(:clean)
|
||||||
subject.clean_with :strategy
|
subject.clean_with :strategy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the strategy" do
|
it "should return the strategy" do
|
||||||
subject.clean_with( :strategy ).should eq strategy
|
expect(subject.clean_with( :strategy )).to eq strategy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "clean_with!" do
|
describe "clean_with!" do
|
||||||
let (:strategy) { double("strategy",:clean => true) }
|
let (:strategy) { double("strategy",:clean => true) }
|
||||||
|
|
||||||
before(:each) { subject.stub(:create_strategy).with(anything).and_return(strategy) }
|
before(:each) { allow(subject).to receive(:create_strategy).with(anything).and_return(strategy) }
|
||||||
|
|
||||||
it "should pass all arguments to create_strategy" do
|
it "should pass all arguments to create_strategy" do
|
||||||
subject.should_receive(:create_strategy).with(:lorum, :dollar, :amet, :ipsum => "random").and_return(strategy)
|
expect(subject).to receive(:create_strategy).with(:lorum, :dollar, :amet, :ipsum => "random").and_return(strategy)
|
||||||
subject.clean_with! :lorum, :dollar, :amet, { :ipsum => "random" }
|
subject.clean_with! :lorum, :dollar, :amet, { :ipsum => "random" }
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should invoke clean on the created strategy" do
|
it "should invoke clean on the created strategy" do
|
||||||
strategy.should_receive(:clean)
|
expect(strategy).to receive(:clean)
|
||||||
subject.clean_with! :strategy
|
subject.clean_with! :strategy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the strategy" do
|
it "should return the strategy" do
|
||||||
subject.clean_with!( :strategy ).should eq strategy
|
expect(subject.clean_with!( :strategy )).to eq strategy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -377,31 +328,31 @@ module DatabaseCleaner
|
||||||
let(:strategy_class) { double("strategy_class",:new => double("instance")) }
|
let(:strategy_class) { double("strategy_class",:new => double("instance")) }
|
||||||
|
|
||||||
before :each do
|
before :each do
|
||||||
subject.stub(:orm_strategy).and_return(strategy_class)
|
allow(subject).to receive(:orm_strategy).and_return(strategy_class)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should pass the first argument to orm_strategy" do
|
it "should pass the first argument to orm_strategy" do
|
||||||
subject.should_receive(:orm_strategy).with(:strategy).and_return(Object)
|
expect(subject).to receive(:orm_strategy).with(:strategy).and_return(Object)
|
||||||
subject.create_strategy :strategy
|
subject.create_strategy :strategy
|
||||||
end
|
end
|
||||||
it "should pass the remainding argument to orm_strategy.new" do
|
it "should pass the remainding argument to orm_strategy.new" do
|
||||||
strategy_class.should_receive(:new).with(:params => {:lorum => "ipsum"})
|
expect(strategy_class).to receive(:new).with(:params => {:lorum => "ipsum"})
|
||||||
|
|
||||||
subject.create_strategy :strategy, {:params => {:lorum => "ipsum"}}
|
subject.create_strategy :strategy, {:params => {:lorum => "ipsum"}}
|
||||||
end
|
end
|
||||||
it "should return the resulting strategy" do
|
it "should return the resulting strategy" do
|
||||||
subject.create_strategy( :strategy ).should eq strategy_class.new
|
expect(subject.create_strategy( :strategy )).to eq strategy_class.new
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "strategy=" do
|
describe "strategy=" do
|
||||||
it "should proxy symbolised strategies to create_strategy" do
|
it "should proxy symbolised strategies to create_strategy" do
|
||||||
subject.should_receive(:create_strategy).with(:symbol)
|
expect(subject).to receive(:create_strategy).with(:symbol)
|
||||||
subject.strategy = :symbol
|
subject.strategy = :symbol
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy params with symbolised strategies" do
|
it "should proxy params with symbolised strategies" do
|
||||||
subject.should_receive(:create_strategy).with(:symbol,:param => "one")
|
expect(subject).to receive(:create_strategy).with(:symbol,:param => "one")
|
||||||
subject.strategy= :symbol, {:param => "one"}
|
subject.strategy= :symbol, {:param => "one"}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -414,14 +365,14 @@ module DatabaseCleaner
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should attempt to set strategy db" do
|
it "should attempt to set strategy db" do
|
||||||
subject.stub(:db).and_return(:my_db)
|
allow(subject).to receive(:db).and_return(:my_db)
|
||||||
subject.should_receive(:set_strategy_db).with(mock_strategy, :my_db)
|
expect(subject).to receive(:set_strategy_db).with(mock_strategy, :my_db)
|
||||||
subject.strategy = mock_strategy
|
subject.strategy = mock_strategy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the stored strategy" do
|
it "should return the stored strategy" do
|
||||||
result = subject.strategy = mock_strategy
|
result = subject.strategy = mock_strategy
|
||||||
result.should eq mock_strategy
|
expect(result).to eq mock_strategy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -429,20 +380,20 @@ module DatabaseCleaner
|
||||||
subject { ::DatabaseCleaner::Base.new :a_orm }
|
subject { ::DatabaseCleaner::Base.new :a_orm }
|
||||||
|
|
||||||
it "returns a null strategy when strategy is not set and undetectable" do
|
it "returns a null strategy when strategy is not set and undetectable" do
|
||||||
subject.strategy.should eq DatabaseCleaner::NullStrategy
|
expect(subject.strategy).to eq DatabaseCleaner::NullStrategy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "returns the set strategy" do
|
it "returns the set strategy" do
|
||||||
subject.strategy = mock_strategy
|
subject.strategy = mock_strategy
|
||||||
subject.strategy.should eq mock_strategy
|
expect(subject.strategy).to eq mock_strategy
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "orm=" do
|
describe "orm=" do
|
||||||
it "should stored the desired orm" do
|
it "should stored the desired orm" do
|
||||||
subject.orm.should_not eq :desired_orm
|
expect(subject.orm).not_to eq :desired_orm
|
||||||
subject.orm = :desired_orm
|
subject.orm = :desired_orm
|
||||||
subject.orm.should eq :desired_orm
|
expect(subject.orm).to eq :desired_orm
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -451,20 +402,20 @@ module DatabaseCleaner
|
||||||
|
|
||||||
it "should return orm if orm set" do
|
it "should return orm if orm set" do
|
||||||
subject.instance_variable_set "@orm", mock_orm
|
subject.instance_variable_set "@orm", mock_orm
|
||||||
subject.orm.should eq mock_orm
|
expect(subject.orm).to eq mock_orm
|
||||||
end
|
end
|
||||||
|
|
||||||
context "orm isn't set" do
|
context "orm isn't set" do
|
||||||
before(:each) { subject.instance_variable_set "@orm", nil }
|
before(:each) { subject.instance_variable_set "@orm", nil }
|
||||||
|
|
||||||
it "should run autodetect if orm isn't set" do
|
it "should run autodetect if orm isn't set" do
|
||||||
subject.should_receive(:autodetect)
|
expect(subject).to receive(:autodetect)
|
||||||
subject.orm
|
subject.orm
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return the result of autodetect if orm isn't set" do
|
it "should return the result of autodetect if orm isn't set" do
|
||||||
subject.stub(:autodetect).and_return(mock_orm)
|
allow(subject).to receive(:autodetect).and_return(mock_orm)
|
||||||
subject.orm.should eq mock_orm
|
expect(subject.orm).to eq mock_orm
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -473,33 +424,33 @@ module DatabaseCleaner
|
||||||
let (:strategy) { double("strategy") }
|
let (:strategy) { double("strategy") }
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
subject.stub(:strategy).and_return(strategy)
|
allow(subject).to receive(:strategy).and_return(strategy)
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "start" do
|
describe "start" do
|
||||||
it "should proxy start to the strategy" do
|
it "should proxy start to the strategy" do
|
||||||
strategy.should_receive(:start)
|
expect(strategy).to receive(:start)
|
||||||
subject.start
|
subject.start
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "clean" do
|
describe "clean" do
|
||||||
it "should proxy clean to the strategy" do
|
it "should proxy clean to the strategy" do
|
||||||
strategy.should_receive(:clean)
|
expect(strategy).to receive(:clean)
|
||||||
subject.clean
|
subject.clean
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "clean!" do
|
describe "clean!" do
|
||||||
it "should proxy clean! to the strategy clean" do
|
it "should proxy clean! to the strategy clean" do
|
||||||
strategy.should_receive(:clean)
|
expect(strategy).to receive(:clean)
|
||||||
subject.clean!
|
subject.clean!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "cleaning" do
|
describe "cleaning" do
|
||||||
it "should proxy cleaning to the strategy" do
|
it "should proxy cleaning to the strategy" do
|
||||||
strategy.should_receive(:cleaning)
|
expect(strategy).to receive(:cleaning)
|
||||||
subject.cleaning { }
|
subject.cleaning { }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -508,12 +459,12 @@ module DatabaseCleaner
|
||||||
describe "auto_detected?" do
|
describe "auto_detected?" do
|
||||||
it "should return true unless @autodetected is nil" do
|
it "should return true unless @autodetected is nil" do
|
||||||
subject.instance_variable_set("@autodetected","not nil")
|
subject.instance_variable_set("@autodetected","not nil")
|
||||||
subject.auto_detected?.should be_true
|
expect(subject.auto_detected?).to be_truthy
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return false if @autodetect is nil" do
|
it "should return false if @autodetect is nil" do
|
||||||
subject.instance_variable_set("@autodetected",nil)
|
subject.instance_variable_set("@autodetected",nil)
|
||||||
subject.auto_detected?.should be_false
|
expect(subject.auto_detected?).to be_falsey
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -521,29 +472,28 @@ module DatabaseCleaner
|
||||||
let (:strategy_class) { double("strategy_class") }
|
let (:strategy_class) { double("strategy_class") }
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
subject.stub(:orm_module).and_return(strategy_class)
|
allow(subject).to receive(:orm_module).and_return(strategy_class)
|
||||||
end
|
end
|
||||||
|
|
||||||
context "in response to a LoadError" do
|
context "in response to a LoadError" do
|
||||||
before(:each) { subject.should_receive(:require).with(anything).and_raise(LoadError) }
|
before(:each) { expect(subject).to receive(:require).with(anything).and_raise(LoadError) }
|
||||||
|
|
||||||
it "should raise UnknownStrategySpecified" do
|
it "should raise UnknownStrategySpecified" do
|
||||||
expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
|
expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should ask orm_module if it will list available_strategies" do
|
it "should ask orm_module if it will list available_strategies" do
|
||||||
strategy_class.should_receive(:respond_to?).with(:available_strategies)
|
expect(strategy_class).to receive(:respond_to?).with(:available_strategies)
|
||||||
|
|
||||||
subject.stub(:orm_module).and_return(strategy_class)
|
allow(subject).to receive(:orm_module).and_return(strategy_class)
|
||||||
|
|
||||||
expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
|
expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should use available_strategies (for the error message) if its available" do
|
it "should use available_strategies (for the error message) if its available" do
|
||||||
strategy_class.stub(:respond_to?).with(:available_strategies).and_return(true)
|
expect(strategy_class).to receive(:available_strategies).and_return([])
|
||||||
strategy_class.should_receive(:available_strategies).and_return([])
|
|
||||||
|
|
||||||
subject.stub(:orm_module).and_return(strategy_class)
|
allow(subject).to receive(:orm_module).and_return(strategy_class)
|
||||||
|
|
||||||
expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
|
expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
|
||||||
end
|
end
|
||||||
|
@ -552,11 +502,11 @@ module DatabaseCleaner
|
||||||
it "should return the constant of the Strategy class requested" do
|
it "should return the constant of the Strategy class requested" do
|
||||||
strategy_strategy_class = double("strategy strategy_class")
|
strategy_strategy_class = double("strategy strategy_class")
|
||||||
|
|
||||||
subject.stub(:require).with(anything).and_return(true)
|
allow(subject).to receive(:require).with(anything).and_return(true)
|
||||||
|
|
||||||
strategy_class.should_receive(:const_get).with("Cunningplan").and_return(strategy_strategy_class)
|
expect(strategy_class).to receive(:const_get).with("Cunningplan").and_return(strategy_strategy_class)
|
||||||
|
|
||||||
subject.send(:orm_strategy, :cunningplan).should eq strategy_strategy_class
|
expect(subject.send(:orm_strategy, :cunningplan)).to eq strategy_strategy_class
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -564,52 +514,52 @@ module DatabaseCleaner
|
||||||
describe 'set_default_orm_strategy' do
|
describe 'set_default_orm_strategy' do
|
||||||
it 'sets strategy to :transaction for ActiveRecord' do
|
it 'sets strategy to :transaction for ActiveRecord' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:active_record)
|
cleaner = DatabaseCleaner::Base.new(:active_record)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::ActiveRecord::Transaction
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::ActiveRecord::Transaction
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :transaction for DataMapper' do
|
it 'sets strategy to :transaction for DataMapper' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:data_mapper)
|
cleaner = DatabaseCleaner::Base.new(:data_mapper)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::DataMapper::Transaction
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::DataMapper::Transaction
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :truncation for MongoMapper' do
|
it 'sets strategy to :truncation for MongoMapper' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:mongo_mapper)
|
cleaner = DatabaseCleaner::Base.new(:mongo_mapper)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::MongoMapper::Truncation
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::MongoMapper::Truncation
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :truncation for Mongoid' do
|
it 'sets strategy to :truncation for Mongoid' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:mongoid)
|
cleaner = DatabaseCleaner::Base.new(:mongoid)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Mongoid::Truncation
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::Mongoid::Truncation
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :truncation for CouchPotato' do
|
it 'sets strategy to :truncation for CouchPotato' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:couch_potato)
|
cleaner = DatabaseCleaner::Base.new(:couch_potato)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::CouchPotato::Truncation
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::CouchPotato::Truncation
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :transaction for Sequel' do
|
it 'sets strategy to :transaction for Sequel' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:sequel)
|
cleaner = DatabaseCleaner::Base.new(:sequel)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Sequel::Transaction
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::Sequel::Transaction
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :truncation for Moped' do
|
it 'sets strategy to :truncation for Moped' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:moped)
|
cleaner = DatabaseCleaner::Base.new(:moped)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Moped::Truncation
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::Moped::Truncation
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :truncation for Ohm' do
|
it 'sets strategy to :truncation for Ohm' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:ohm)
|
cleaner = DatabaseCleaner::Base.new(:ohm)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Ohm::Truncation
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::Ohm::Truncation
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :truncation for Redis' do
|
it 'sets strategy to :truncation for Redis' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:redis)
|
cleaner = DatabaseCleaner::Base.new(:redis)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Redis::Truncation
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::Redis::Truncation
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'sets strategy to :transaction for Neo4j' do
|
it 'sets strategy to :transaction for Neo4j' do
|
||||||
cleaner = DatabaseCleaner::Base.new(:neo4j)
|
cleaner = DatabaseCleaner::Base.new(:neo4j)
|
||||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Neo4j::Transaction
|
expect(cleaner.strategy).to be_instance_of DatabaseCleaner::Neo4j::Transaction
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
require 'spec_helper'
|
|
||||||
module ArrayHelper
|
module ArrayHelper
|
||||||
def zipmap(array, vals)
|
def zipmap(array, vals)
|
||||||
Hash[*(array.zip(vals).flatten)]
|
Hash[*(array.zip(vals).flatten)]
|
||||||
|
@ -11,6 +10,7 @@ module DatabaseCleaner
|
||||||
def reset
|
def reset
|
||||||
@cleaners = nil
|
@cleaners = nil
|
||||||
@connections = nil
|
@connections = nil
|
||||||
|
@app_root = nil
|
||||||
end
|
end
|
||||||
# hackey, hack.. connections needs to stick around until I can properly deprecate the API
|
# hackey, hack.. connections needs to stick around until I can properly deprecate the API
|
||||||
def connections_stub(array)
|
def connections_stub(array)
|
||||||
|
@ -20,192 +20,192 @@ module DatabaseCleaner
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ::DatabaseCleaner do
|
RSpec.describe DatabaseCleaner do
|
||||||
before(:each) { ::DatabaseCleaner.reset }
|
before(:each) { DatabaseCleaner.reset }
|
||||||
|
|
||||||
context "orm specification" do
|
context "orm specification" do
|
||||||
it "should not accept unrecognised orms" do
|
it "should not accept unrecognised orms" do
|
||||||
expect { ::DatabaseCleaner[nil] }.to raise_error(::DatabaseCleaner::NoORMDetected)
|
expect { DatabaseCleaner[nil] }.to raise_error(DatabaseCleaner::NoORMDetected)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept :active_record" do
|
it "should accept :active_record" do
|
||||||
cleaner = ::DatabaseCleaner[:active_record]
|
cleaner = DatabaseCleaner[:active_record]
|
||||||
cleaner.should be_a(::DatabaseCleaner::Base)
|
expect(cleaner).to be_a(DatabaseCleaner::Base)
|
||||||
cleaner.orm.should eq :active_record
|
expect(cleaner.orm).to eq :active_record
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept :data_mapper" do
|
it "should accept :data_mapper" do
|
||||||
cleaner = ::DatabaseCleaner[:data_mapper]
|
cleaner = DatabaseCleaner[:data_mapper]
|
||||||
cleaner.should be_a(::DatabaseCleaner::Base)
|
expect(cleaner).to be_a(DatabaseCleaner::Base)
|
||||||
cleaner.orm.should eq :data_mapper
|
expect(cleaner.orm).to eq :data_mapper
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept :mongo_mapper" do
|
it "should accept :mongo_mapper" do
|
||||||
cleaner = ::DatabaseCleaner[:mongo_mapper]
|
cleaner = DatabaseCleaner[:mongo_mapper]
|
||||||
cleaner.should be_a(::DatabaseCleaner::Base)
|
expect(cleaner).to be_a(DatabaseCleaner::Base)
|
||||||
cleaner.orm.should eq :mongo_mapper
|
expect(cleaner.orm).to eq :mongo_mapper
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept :couch_potato" do
|
it "should accept :couch_potato" do
|
||||||
cleaner = ::DatabaseCleaner[:couch_potato]
|
cleaner = DatabaseCleaner[:couch_potato]
|
||||||
cleaner.should be_a(::DatabaseCleaner::Base)
|
expect(cleaner).to be_a(DatabaseCleaner::Base)
|
||||||
cleaner.orm.should eq :couch_potato
|
expect(cleaner.orm).to eq :couch_potato
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept :moped" do
|
it "should accept :moped" do
|
||||||
cleaner = ::DatabaseCleaner[:moped]
|
cleaner = DatabaseCleaner[:moped]
|
||||||
cleaner.should be_a(::DatabaseCleaner::Base)
|
expect(cleaner).to be_a(DatabaseCleaner::Base)
|
||||||
cleaner.orm.should eq :moped
|
expect(cleaner.orm).to eq :moped
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'accepts :ohm' do
|
it 'accepts :ohm' do
|
||||||
cleaner = ::DatabaseCleaner[:ohm]
|
cleaner = DatabaseCleaner[:ohm]
|
||||||
cleaner.should be_a(::DatabaseCleaner::Base)
|
expect(cleaner).to be_a(DatabaseCleaner::Base)
|
||||||
cleaner.orm.should eq :ohm
|
expect(cleaner.orm).to eq :ohm
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept multiple orm's" do
|
it "should accept multiple orm's" do
|
||||||
::DatabaseCleaner[:couch_potato]
|
DatabaseCleaner[:couch_potato]
|
||||||
::DatabaseCleaner[:data_mapper]
|
DatabaseCleaner[:data_mapper]
|
||||||
::DatabaseCleaner.connections.size.should eq 2
|
expect(DatabaseCleaner.connections.size).to eq 2
|
||||||
::DatabaseCleaner.connections[0].orm.should eq :couch_potato
|
expect(DatabaseCleaner.connections[0].orm).to eq :couch_potato
|
||||||
::DatabaseCleaner.connections[1].orm.should eq :data_mapper
|
expect(DatabaseCleaner.connections[1].orm).to eq :data_mapper
|
||||||
end
|
end
|
||||||
|
|
||||||
context "connection/db specification" do
|
context "connection/db specification" do
|
||||||
it "should accept a connection parameter and store it" do
|
it "should accept a connection parameter and store it" do
|
||||||
cleaner = ::DatabaseCleaner[:active_record, {:connection => :first_connection}]
|
cleaner = DatabaseCleaner[:active_record, {:connection => :first_connection}]
|
||||||
cleaner.should be_a(::DatabaseCleaner::Base)
|
expect(cleaner).to be_a(DatabaseCleaner::Base)
|
||||||
cleaner.orm.should eq :active_record
|
expect(cleaner.orm).to eq :active_record
|
||||||
cleaner.db.should eq :first_connection
|
expect(cleaner.db).to eq :first_connection
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept multiple connections for a single orm" do
|
it "should accept multiple connections for a single orm" do
|
||||||
::DatabaseCleaner[:data_mapper,{:connection => :first_db}]
|
DatabaseCleaner[:data_mapper,{:connection => :first_db}]
|
||||||
::DatabaseCleaner[:data_mapper,{:connection => :second_db}]
|
DatabaseCleaner[:data_mapper,{:connection => :second_db}]
|
||||||
::DatabaseCleaner.connections.size.should eq 2
|
expect(DatabaseCleaner.connections.size).to eq 2
|
||||||
::DatabaseCleaner.connections[0].orm.should eq :data_mapper
|
expect(DatabaseCleaner.connections[0].orm).to eq :data_mapper
|
||||||
::DatabaseCleaner.connections[0].db.should eq :first_db
|
expect(DatabaseCleaner.connections[0].db).to eq :first_db
|
||||||
::DatabaseCleaner.connections[1].orm.should eq :data_mapper
|
expect(DatabaseCleaner.connections[1].orm).to eq :data_mapper
|
||||||
::DatabaseCleaner.connections[1].db.should eq :second_db
|
expect(DatabaseCleaner.connections[1].db).to eq :second_db
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should accept multiple connections and multiple orms" do
|
it "should accept multiple connections and multiple orms" do
|
||||||
::DatabaseCleaner[:data_mapper, {:connection => :first_db} ]
|
DatabaseCleaner[:data_mapper, {:connection => :first_db} ]
|
||||||
::DatabaseCleaner[:active_record,{:connection => :second_db}]
|
DatabaseCleaner[:active_record,{:connection => :second_db}]
|
||||||
::DatabaseCleaner[:active_record,{:connection => :first_db} ]
|
DatabaseCleaner[:active_record,{:connection => :first_db} ]
|
||||||
::DatabaseCleaner[:data_mapper, {:connection => :second_db}]
|
DatabaseCleaner[:data_mapper, {:connection => :second_db}]
|
||||||
|
|
||||||
::DatabaseCleaner.connections.size.should eq 4
|
expect(DatabaseCleaner.connections.size).to eq 4
|
||||||
|
|
||||||
::DatabaseCleaner.connections[0].orm.should eq :data_mapper
|
expect(DatabaseCleaner.connections[0].orm).to eq :data_mapper
|
||||||
::DatabaseCleaner.connections[0].db.should eq :first_db
|
expect(DatabaseCleaner.connections[0].db).to eq :first_db
|
||||||
|
|
||||||
::DatabaseCleaner.connections[1].orm.should eq :active_record
|
expect(DatabaseCleaner.connections[1].orm).to eq :active_record
|
||||||
::DatabaseCleaner.connections[1].db.should eq :second_db
|
expect(DatabaseCleaner.connections[1].db).to eq :second_db
|
||||||
|
|
||||||
::DatabaseCleaner.connections[2].orm.should eq :active_record
|
expect(DatabaseCleaner.connections[2].orm).to eq :active_record
|
||||||
::DatabaseCleaner.connections[2].db.should eq :first_db
|
expect(DatabaseCleaner.connections[2].db).to eq :first_db
|
||||||
|
|
||||||
::DatabaseCleaner.connections[3].orm.should eq :data_mapper
|
expect(DatabaseCleaner.connections[3].orm).to eq :data_mapper
|
||||||
::DatabaseCleaner.connections[3].db.should eq :second_db
|
expect(DatabaseCleaner.connections[3].db).to eq :second_db
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "connection/db retrieval" do
|
context "connection/db retrieval" do
|
||||||
it "should retrieve a db rather than create a new one" do
|
it "should retrieve a db rather than create a new one" do
|
||||||
pending
|
connection = ::DatabaseCleaner[:active_record]
|
||||||
connection = ::DatabaseCleaner[:active_record].strategy = :truncation
|
::DatabaseCleaner[:active_record].strategy = :truncation
|
||||||
::DatabaseCleaner[:active_record].should eq connection
|
expect(DatabaseCleaner[:active_record]).to equal connection
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "class methods" do
|
context "class methods" do
|
||||||
subject { ::DatabaseCleaner }
|
subject { DatabaseCleaner }
|
||||||
|
|
||||||
it "should give me a default (autodetection) databasecleaner by default" do
|
it "should give me a default (autodetection) databasecleaner by default" do
|
||||||
cleaner = double("cleaner").as_null_object
|
cleaner = double("cleaner").as_null_object
|
||||||
::DatabaseCleaner::Base.stub(:new).and_return(cleaner)
|
allow(DatabaseCleaner::Base).to receive(:new).and_return(cleaner)
|
||||||
|
|
||||||
::DatabaseCleaner.connections.should eq [cleaner]
|
expect(DatabaseCleaner.connections).to eq [cleaner]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "single orm single connection" do
|
context "single orm single connection" do
|
||||||
let(:connection) { ::DatabaseCleaner.connections.first }
|
let(:connection) { DatabaseCleaner.connections.first }
|
||||||
|
|
||||||
it "should proxy strategy=" do
|
it "should proxy strategy=" do
|
||||||
stratagum = double("stratagum")
|
stratagem = double("stratagem")
|
||||||
connection.should_receive(:strategy=).with(stratagum)
|
expect(connection).to receive(:strategy=).with(stratagem)
|
||||||
::DatabaseCleaner.strategy = stratagum
|
DatabaseCleaner.strategy = stratagem
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy orm=" do
|
it "should proxy orm=" do
|
||||||
orm = double("orm")
|
orm = double("orm")
|
||||||
connection.should_receive(:orm=).with(orm)
|
expect(connection).to receive(:orm=).with(orm)
|
||||||
::DatabaseCleaner.orm = orm
|
DatabaseCleaner.orm = orm
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy start" do
|
it "should proxy start" do
|
||||||
connection.should_receive(:start)
|
expect(connection).to receive(:start)
|
||||||
::DatabaseCleaner.start
|
DatabaseCleaner.start
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy clean" do
|
it "should proxy clean" do
|
||||||
connection.should_receive(:clean)
|
expect(connection).to receive(:clean)
|
||||||
::DatabaseCleaner.clean
|
DatabaseCleaner.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should proxy cleaning' do
|
it 'should proxy cleaning' do
|
||||||
connection.should_receive(:cleaning)
|
expect(connection).to receive(:cleaning)
|
||||||
::DatabaseCleaner.cleaning { }
|
DatabaseCleaner.cleaning { }
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy clean_with" do
|
it "should proxy clean_with" do
|
||||||
stratagem = double("stratgem")
|
stratagem = double("stratgem")
|
||||||
connection.should_receive(:clean_with).with(stratagem, {})
|
expect(connection).to receive(:clean_with).with(stratagem, {})
|
||||||
::DatabaseCleaner.clean_with stratagem, {}
|
DatabaseCleaner.clean_with stratagem, {}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context "multiple connections" do
|
context "multiple connections" do
|
||||||
|
|
||||||
#these are relativly simple, all we need to do is make sure all connections are cleaned/started/cleaned_with appropriatly.
|
# these are relatively simple, all we need to do is make sure all connections are cleaned/started/cleaned_with appropriately.
|
||||||
context "simple proxy methods" do
|
context "simple proxy methods" do
|
||||||
|
|
||||||
let(:active_record) { double("active_mock") }
|
let(:active_record) { double("active_mock") }
|
||||||
let(:data_mapper) { double("data_mock") }
|
let(:data_mapper) { double("data_mock") }
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
::DatabaseCleaner.stub(:connections).and_return([active_record,data_mapper])
|
allow(DatabaseCleaner).to receive(:connections).and_return([active_record,data_mapper])
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy orm to all connections" do
|
it "should proxy orm to all connections" do
|
||||||
active_record.should_receive(:orm=)
|
expect(active_record).to receive(:orm=)
|
||||||
data_mapper.should_receive(:orm=)
|
expect(data_mapper).to receive(:orm=)
|
||||||
|
|
||||||
::DatabaseCleaner.orm = double("orm")
|
DatabaseCleaner.orm = double("orm")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy start to all connections" do
|
it "should proxy start to all connections" do
|
||||||
active_record.should_receive(:start)
|
expect(active_record).to receive(:start)
|
||||||
data_mapper.should_receive(:start)
|
expect(data_mapper).to receive(:start)
|
||||||
|
|
||||||
::DatabaseCleaner.start
|
DatabaseCleaner.start
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy clean to all connections" do
|
it "should proxy clean to all connections" do
|
||||||
active_record.should_receive(:clean)
|
expect(active_record).to receive(:clean)
|
||||||
data_mapper.should_receive(:clean)
|
expect(data_mapper).to receive(:clean)
|
||||||
|
|
||||||
::DatabaseCleaner.clean
|
DatabaseCleaner.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should initiate cleaning on each connection, yield, and finish cleaning each connection" do
|
it "should initiate cleaning on each connection, yield, and finish cleaning each connection" do
|
||||||
|
@ -219,23 +219,23 @@ describe ::DatabaseCleaner do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
::DatabaseCleaner.cleaning do
|
DatabaseCleaner.cleaning do
|
||||||
active_record.started.should == true
|
expect(active_record.started).to eq(true)
|
||||||
data_mapper.started.should == true
|
expect(data_mapper.started).to eq(true)
|
||||||
active_record.cleaned.should == nil
|
expect(active_record.cleaned).to eq(nil)
|
||||||
data_mapper.cleaned.should == nil
|
expect(data_mapper.cleaned).to eq(nil)
|
||||||
@yielded = true
|
@yielded = true
|
||||||
end
|
end
|
||||||
active_record.cleaned.should == true
|
expect(active_record.cleaned).to eq(true)
|
||||||
data_mapper.cleaned.should == true
|
expect(data_mapper.cleaned).to eq(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy clean_with to all connections" do
|
it "should proxy clean_with to all connections" do
|
||||||
stratagem = double("stratgem")
|
stratagem = double("stratgem")
|
||||||
active_record.should_receive(:clean_with).with(stratagem)
|
expect(active_record).to receive(:clean_with).with(stratagem)
|
||||||
data_mapper.should_receive(:clean_with).with(stratagem)
|
expect(data_mapper).to receive(:clean_with).with(stratagem)
|
||||||
|
|
||||||
::DatabaseCleaner.clean_with stratagem
|
DatabaseCleaner.clean_with stratagem
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -243,22 +243,24 @@ describe ::DatabaseCleaner do
|
||||||
# plausably want to force orm/strategy change on two sets of orm that differ only on db
|
# plausably want to force orm/strategy change on two sets of orm that differ only on db
|
||||||
context "multiple orm proxy methods" do
|
context "multiple orm proxy methods" do
|
||||||
|
|
||||||
pending "should proxy orm to all connections and remove duplicate connections" do
|
it "should proxy orm to all connections and remove duplicate connections" do
|
||||||
active_record_1 = double("active_mock_on_db_one").as_null_object
|
active_record_1 = double("active_mock_on_db_one").as_null_object
|
||||||
active_record_2 = double("active_mock_on_db_two").as_null_object
|
active_record_2 = double("active_mock_on_db_two").as_null_object
|
||||||
data_mapper_1 = double("data_mock_on_db_one").as_null_object
|
data_mapper_1 = double("data_mock_on_db_one").as_null_object
|
||||||
|
|
||||||
::DatabaseCleaner.connections_stub [active_record_1,active_record_2,data_mapper_1]
|
DatabaseCleaner.connections_stub [active_record_1,active_record_2,data_mapper_1]
|
||||||
|
|
||||||
active_record_1.should_receive(:orm=).with(:data_mapper)
|
expect(active_record_1).to receive(:orm=).with(:data_mapper)
|
||||||
active_record_2.should_receive(:orm=).with(:data_mapper)
|
expect(active_record_2).to receive(:orm=).with(:data_mapper)
|
||||||
data_mapper_1.should_receive(:orm=).with(:data_mapper)
|
expect(data_mapper_1).to receive(:orm=).with(:data_mapper)
|
||||||
|
|
||||||
active_record_1.should_receive(:==).with(data_mapper_1).and_return(true)
|
expect(active_record_1).to receive(:==).with(active_record_2).and_return(false)
|
||||||
|
expect(active_record_2).to receive(:==).with(data_mapper_1).and_return(false)
|
||||||
|
expect(active_record_1).to receive(:==).with(data_mapper_1).and_return(true)
|
||||||
|
|
||||||
::DatabaseCleaner.connections.size.should eq 3
|
expect(DatabaseCleaner.connections.size).to eq 3
|
||||||
::DatabaseCleaner.orm = :data_mapper
|
DatabaseCleaner.orm = :data_mapper
|
||||||
::DatabaseCleaner.connections.size.should eq 2
|
expect(DatabaseCleaner.connections.size).to eq 2
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should proxy strategy to all connections and remove duplicate connections" do
|
it "should proxy strategy to all connections and remove duplicate connections" do
|
||||||
|
@ -266,16 +268,16 @@ describe ::DatabaseCleaner do
|
||||||
active_record_2 = double("active_mock_strategy_two").as_null_object
|
active_record_2 = double("active_mock_strategy_two").as_null_object
|
||||||
strategy = double("strategy")
|
strategy = double("strategy")
|
||||||
|
|
||||||
::DatabaseCleaner.connections_stub [active_record_1,active_record_2]
|
DatabaseCleaner.connections_stub [active_record_1,active_record_2]
|
||||||
|
|
||||||
active_record_1.should_receive(:strategy=).with(strategy)
|
expect(active_record_1).to receive(:strategy=).with(strategy)
|
||||||
active_record_2.should_receive(:strategy=).with(strategy)
|
expect(active_record_2).to receive(:strategy=).with(strategy)
|
||||||
|
|
||||||
active_record_1.should_receive(:==).with(active_record_2).and_return(true)
|
expect(active_record_1).to receive(:==).with(active_record_2).and_return(true)
|
||||||
|
|
||||||
::DatabaseCleaner.connections.size.should eq 2
|
expect(DatabaseCleaner.connections.size).to eq 2
|
||||||
::DatabaseCleaner.strategy = strategy
|
DatabaseCleaner.strategy = strategy
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -285,61 +287,62 @@ describe ::DatabaseCleaner do
|
||||||
orm = double("orm")
|
orm = double("orm")
|
||||||
connection = double("a datamapper connection", :orm => orm )
|
connection = double("a datamapper connection", :orm => orm )
|
||||||
|
|
||||||
::DatabaseCleaner.connections_stub [connection,connection,connection]
|
DatabaseCleaner.connections_stub [connection,connection,connection]
|
||||||
|
|
||||||
::DatabaseCleaner.remove_duplicates
|
DatabaseCleaner.remove_duplicates
|
||||||
::DatabaseCleaner.connections.size.should eq 1
|
expect(DatabaseCleaner.connections.size).to eq 1
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "app_root" do
|
describe "app_root" do
|
||||||
it "should default to Dir.pwd" do
|
it "should default to Dir.pwd" do
|
||||||
DatabaseCleaner.app_root.should eq Dir.pwd
|
expect(DatabaseCleaner.app_root).to eq Dir.pwd
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should store specific paths" do
|
it "should store specific paths" do
|
||||||
DatabaseCleaner.app_root = '/path/to'
|
DatabaseCleaner.app_root = '/path/to'
|
||||||
DatabaseCleaner.app_root.should eq '/path/to'
|
expect(DatabaseCleaner.app_root).to eq '/path/to'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "orm_module" do
|
describe "orm_module" do
|
||||||
subject { ::DatabaseCleaner }
|
subject { DatabaseCleaner }
|
||||||
|
|
||||||
|
let(:mod) { double }
|
||||||
|
|
||||||
it "should return DatabaseCleaner::ActiveRecord for :active_record" do
|
it "should return DatabaseCleaner::ActiveRecord for :active_record" do
|
||||||
::DatabaseCleaner::ActiveRecord = double("ar module") unless defined? ::DatabaseCleaner::ActiveRecord
|
stub_const "DatabaseCleaner::ActiveRecord", mod
|
||||||
subject.orm_module(:active_record).should eq DatabaseCleaner::ActiveRecord
|
expect(subject.orm_module(:active_record)).to eq mod
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return DatabaseCleaner::DataMapper for :data_mapper" do
|
it "should return DatabaseCleaner::DataMapper for :data_mapper" do
|
||||||
::DatabaseCleaner::DataMapper = double("dm module") unless defined? ::DatabaseCleaner::DataMapper
|
stub_const "DatabaseCleaner::DataMapper", mod
|
||||||
subject.orm_module(:data_mapper).should eq DatabaseCleaner::DataMapper
|
expect(subject.orm_module(:data_mapper)).to eq mod
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return DatabaseCleaner::MongoMapper for :mongo_mapper" do
|
it "should return DatabaseCleaner::MongoMapper for :mongo_mapper" do
|
||||||
::DatabaseCleaner::MongoMapper = double("mm module") unless defined? ::DatabaseCleaner::MongoMapper
|
stub_const "DatabaseCleaner::MongoMapper", mod
|
||||||
subject.orm_module(:mongo_mapper).should eq DatabaseCleaner::MongoMapper
|
expect(subject.orm_module(:mongo_mapper)).to eq mod
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return DatabaseCleaner::Mongoid for :mongoid" do
|
it "should return DatabaseCleaner::Mongoid for :mongoid" do
|
||||||
::DatabaseCleaner::Mongoid = double("mongoid module") unless defined? ::DatabaseCleaner::Mongoid
|
stub_const "DatabaseCleaner::Mongoid", mod
|
||||||
subject.orm_module(:mongoid).should eq DatabaseCleaner::Mongoid
|
expect(subject.orm_module(:mongoid)).to eq mod
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return DatabaseCleaner::Mongo for :mongo" do
|
it "should return DatabaseCleaner::Mongo for :mongo" do
|
||||||
::DatabaseCleaner::Mongo = double("mongo module") unless defined? ::DatabaseCleaner::Mongo
|
stub_const "DatabaseCleaner::Mongo", mod
|
||||||
subject.orm_module(:mongo).should eq DatabaseCleaner::Mongo
|
expect(subject.orm_module(:mongo)).to eq mod
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return DatabaseCleaner::CouchPotato for :couch_potato" do
|
it "should return DatabaseCleaner::CouchPotato for :couch_potato" do
|
||||||
::DatabaseCleaner::CouchPotato = double("cp module") unless defined? ::DatabaseCleaner::CouchPotato
|
stub_const "DatabaseCleaner::CouchPotato", mod
|
||||||
subject.orm_module(:couch_potato).should eq DatabaseCleaner::CouchPotato
|
expect(subject.orm_module(:couch_potato)).to eq mod
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return DatabaseCleaner::Neo4j for :neo4j" do
|
it "should return DatabaseCleaner::Neo4j for :neo4j" do
|
||||||
::DatabaseCleaner::Neo4j = double("nj module") unless defined? ::DatabaseCleaner::Neo4j
|
stub_const "DatabaseCleaner::Neo4j", mod
|
||||||
subject.orm_module(:neo4j).should eq DatabaseCleaner::Neo4j
|
expect(subject.orm_module(:neo4j)).to eq mod
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,39 +1,38 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'database_cleaner/couch_potato/truncation'
|
require 'database_cleaner/couch_potato/truncation'
|
||||||
require 'couch_potato'
|
require 'couch_potato'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module CouchPotato
|
module CouchPotato
|
||||||
|
|
||||||
describe Truncation do
|
RSpec.describe Truncation do
|
||||||
let(:database) { double('database') }
|
let(:database) { double('database') }
|
||||||
|
|
||||||
before(:each) do
|
before(:each) do
|
||||||
::CouchPotato.stub(:couchrest_database).and_return(database)
|
allow(::CouchPotato).to receive(:couchrest_database).and_return(database)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should re-create the database" do
|
it "should re-create the database" do
|
||||||
database.should_receive(:recreate!)
|
expect(database).to receive(:recreate!)
|
||||||
|
|
||||||
Truncation.new.clean
|
Truncation.new.clean
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should raise an error when the :only option is used" do
|
it "should raise an error when the :only option is used" do
|
||||||
running {
|
expect {
|
||||||
Truncation.new(:only => ['document-type'])
|
Truncation.new(:only => ['document-type'])
|
||||||
}.should raise_error(ArgumentError)
|
}.to raise_error(ArgumentError)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should raise an error when the :except option is used" do
|
it "should raise an error when the :except option is used" do
|
||||||
running {
|
expect {
|
||||||
Truncation.new(:except => ['document-type'])
|
Truncation.new(:except => ['document-type'])
|
||||||
}.should raise_error(ArgumentError)
|
}.to raise_error(ArgumentError)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should raise an error when invalid options are provided" do
|
it "should raise an error when invalid options are provided" do
|
||||||
running {
|
expect {
|
||||||
Truncation.new(:foo => 'bar')
|
Truncation.new(:foo => 'bar')
|
||||||
}.should raise_error(ArgumentError)
|
}.to raise_error(ArgumentError)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/data_mapper/base'
|
require 'database_cleaner/data_mapper/base'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe DataMapper do
|
RSpec.describe DataMapper do
|
||||||
it { should respond_to(:available_strategies) }
|
it { is_expected.to respond_to(:available_strategies) }
|
||||||
end
|
end
|
||||||
|
|
||||||
module DataMapper
|
module DataMapper
|
||||||
|
@ -12,18 +11,18 @@ module DatabaseCleaner
|
||||||
include ::DatabaseCleaner::DataMapper::Base
|
include ::DatabaseCleaner::DataMapper::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ExampleStrategy do
|
RSpec.describe ExampleStrategy do
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it { should respond_to(:db) }
|
it { is_expected.to respond_to(:db) }
|
||||||
it { should respond_to(:db=) }
|
it { is_expected.to respond_to(:db=) }
|
||||||
|
|
||||||
it "should store my desired db" do
|
it "should store my desired db" do
|
||||||
subject.db = :my_db
|
subject.db = :my_db
|
||||||
subject.db.should eq :my_db
|
expect(subject.db).to eq :my_db
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should default to :default" do
|
it "should default to :default" do
|
||||||
subject.db.should eq :default
|
expect(subject.db).to eq :default
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'database_cleaner/data_mapper/transaction'
|
require 'database_cleaner/data_mapper/transaction'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
#require 'data_mapper'
|
#require 'data_mapper'
|
||||||
|
@ -6,7 +5,7 @@ require 'database_cleaner/shared_strategy'
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module DataMapper
|
module DataMapper
|
||||||
|
|
||||||
describe Transaction do
|
RSpec.describe Transaction do
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it_should_behave_like "a generic transaction strategy"
|
it_should_behave_like "a generic transaction strategy"
|
||||||
|
|
||||||
|
|
|
@ -1,40 +1,39 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'dm-core'
|
require 'dm-core'
|
||||||
require 'dm-sqlite-adapter'
|
require 'dm-sqlite-adapter'
|
||||||
require File.expand_path('../../../../support/data_mapper/sqlite3_setup', __FILE__)
|
require 'support/data_mapper/sqlite3_setup'
|
||||||
require 'database_cleaner/data_mapper/truncation'
|
require 'database_cleaner/data_mapper/truncation'
|
||||||
|
|
||||||
module DataMapper
|
RSpec.describe DatabaseCleaner::DataMapper::Truncation do
|
||||||
module ConnectionAdapters
|
let(:helper) { DataMapperSQLite3Helper.new }
|
||||||
describe do
|
|
||||||
before(:all) { data_mapper_sqlite3_setup }
|
|
||||||
|
|
||||||
let(:adapter) { DataMapperSQLite3Adapter }
|
let(:connection) do
|
||||||
|
helper.data_mapper_sqlite3_connection
|
||||||
|
end
|
||||||
|
|
||||||
let(:connection) do
|
around do |example|
|
||||||
data_mapper_sqlite3_connection
|
helper.data_mapper_sqlite3_setup
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
helper.data_mapper_sqlite3_teardown
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "DM connection adapter monkeypatches" do
|
||||||
|
describe "#truncate_table" do
|
||||||
|
it "truncates the table" do
|
||||||
|
2.times { DmUser.create }
|
||||||
|
|
||||||
|
connection.truncate_table(DmUser.storage_names[:default])
|
||||||
|
expect(DmUser.count).to eq 0
|
||||||
end
|
end
|
||||||
|
|
||||||
before(:each) do
|
it "resets AUTO_INCREMENT index of table" do
|
||||||
connection.truncate_tables(DataMapper::Model.descendants.map { |d| d.storage_names[:default] || d.name.underscore })
|
2.times { DmUser.create }
|
||||||
end
|
DmUser.destroy
|
||||||
|
|
||||||
describe "#truncate_table" do
|
connection.truncate_table(DmUser.storage_names[:default])
|
||||||
it "truncates the table" do
|
|
||||||
2.times { DmUser.create }
|
|
||||||
|
|
||||||
connection.truncate_table(DmUser.storage_names[:default])
|
expect(DmUser.create.id).to eq 1
|
||||||
DmUser.count.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
it "resets AUTO_INCREMENT index of table" do
|
|
||||||
2.times { DmUser.create }
|
|
||||||
DmUser.destroy
|
|
||||||
|
|
||||||
connection.truncate_table(DmUser.storage_names[:default])
|
|
||||||
|
|
||||||
DmUser.create.id.should eq 1
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'database_cleaner/shared_strategy'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module DataMapper
|
module DataMapper
|
||||||
describe Truncation do
|
RSpec.describe Truncation do
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it_should_behave_like "a generic truncation strategy"
|
it_should_behave_like "a generic truncation strategy"
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
require 'database_cleaner/generic/base'
|
require 'database_cleaner/generic/base'
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
|
@ -11,7 +10,7 @@ module ::DatabaseCleaner
|
||||||
def start; end
|
def start; end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ExampleStrategy do
|
RSpec.describe ExampleStrategy do
|
||||||
context "class methods" do
|
context "class methods" do
|
||||||
subject { ExampleStrategy }
|
subject { ExampleStrategy }
|
||||||
|
|
||||||
|
@ -35,14 +34,14 @@ module ::DatabaseCleaner
|
||||||
let (:strategy) { ExampleStrategy.new }
|
let (:strategy) { ExampleStrategy.new }
|
||||||
before do
|
before do
|
||||||
# DatabaseCleaner.strategy = :truncation
|
# DatabaseCleaner.strategy = :truncation
|
||||||
connection.stub(:disable_referential_integrity).and_yield
|
allow(connection).to receive(:disable_referential_integrity).and_yield
|
||||||
connection.stub(:database_cleaner_view_cache).and_return([])
|
allow(connection).to receive(:database_cleaner_view_cache).and_return([])
|
||||||
connection.stub(:database_cleaner_table_cache).and_return([])
|
allow(connection).to receive(:database_cleaner_table_cache).and_return([])
|
||||||
::ActiveRecord::Base.stub(:connection).and_return(connection)
|
allow(::ActiveRecord::Base).to receive(:connection).and_return(connection)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "calls #clean even if there is an exception" do
|
it "calls #clean even if there is an exception" do
|
||||||
strategy.should_receive :clean
|
expect(strategy).to receive :clean
|
||||||
expect do
|
expect do
|
||||||
strategy.cleaning do
|
strategy.cleaning do
|
||||||
raise NoMethodError
|
raise NoMethodError
|
||||||
|
@ -51,7 +50,7 @@ module ::DatabaseCleaner
|
||||||
end
|
end
|
||||||
|
|
||||||
it "calls #clean after processing the block" do
|
it "calls #clean after processing the block" do
|
||||||
strategy.should_receive :clean
|
expect(strategy).to receive :clean
|
||||||
strategy.cleaning do
|
strategy.cleaning do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/generic/truncation'
|
require 'database_cleaner/generic/truncation'
|
||||||
|
|
||||||
module ::DatabaseCleaner
|
module ::DatabaseCleaner
|
||||||
|
@ -29,7 +28,7 @@ module ::DatabaseCleaner
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe TruncationExample do
|
RSpec.describe TruncationExample do
|
||||||
subject(:truncation_example) { TruncationExample.new }
|
subject(:truncation_example) { TruncationExample.new }
|
||||||
|
|
||||||
it "will start" do
|
it "will start" do
|
||||||
|
@ -41,14 +40,13 @@ module ::DatabaseCleaner
|
||||||
end
|
end
|
||||||
|
|
||||||
context "private methods" do
|
context "private methods" do
|
||||||
it { should_not respond_to(:tables_to_truncate) }
|
it { is_expected.not_to respond_to(:tables_to_truncate) }
|
||||||
|
|
||||||
it 'expects #tables_to_truncate to be implemented later' do
|
it 'expects #tables_to_truncate to be implemented later' do
|
||||||
expect{ truncation_example.send :tables_to_truncate }.to raise_error(NotImplementedError)
|
expect{ truncation_example.send :tables_to_truncate }.to raise_error(NotImplementedError)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { should_not respond_to(:migration_storage_names) }
|
it { is_expected.not_to respond_to(:migration_storage_names) }
|
||||||
its(:migration_storage_names) { should be_empty }
|
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "initialize" do
|
describe "initialize" do
|
||||||
|
@ -67,40 +65,40 @@ module ::DatabaseCleaner
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
subject { TruncationExample.new( { :only => ["something"] } ) }
|
subject { TruncationExample.new( { :only => ["something"] } ) }
|
||||||
its(:only) { should eq ["something"] }
|
it { expect(subject.only).to eq ["something"] }
|
||||||
its(:except) { should eq [] }
|
it { expect(subject.except).to eq [] }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
subject { TruncationExample.new( { :except => ["something"] } ) }
|
subject { TruncationExample.new( { :except => ["something"] } ) }
|
||||||
its(:only) { should eq nil }
|
it { expect(subject.only).to eq nil }
|
||||||
its(:except) { should include("something") }
|
it { expect(subject.except).to include("something") }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
subject { TruncationExample.new( { :reset_ids => ["something"] } ) }
|
subject { TruncationExample.new( { :reset_ids => ["something"] } ) }
|
||||||
its(:reset_ids?) { should eq true }
|
it { expect(subject.reset_ids?).to eq true }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
subject { TruncationExample.new( { :reset_ids => nil } ) }
|
subject { TruncationExample.new( { :reset_ids => nil } ) }
|
||||||
its(:reset_ids?) { should eq false }
|
it { expect(subject.reset_ids?).to eq false }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
subject { TruncationExample.new( { :pre_count => ["something"] } ) }
|
subject { TruncationExample.new( { :pre_count => ["something"] } ) }
|
||||||
its(:pre_count?) { should eq true }
|
it { expect(subject.pre_count?).to eq true }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
subject { TruncationExample.new( { :pre_count => nil } ) }
|
subject { TruncationExample.new( { :pre_count => nil } ) }
|
||||||
its(:pre_count?) { should eq false }
|
it { expect(subject.pre_count?).to eq false }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
subject { MigrationExample.new }
|
subject { MigrationExample.new }
|
||||||
its(:only) { should eq nil }
|
it { expect(subject.only).to eq nil }
|
||||||
its(:except) { should eq %w[migration_storage_name] }
|
it { expect(subject.except).to eq %w[migration_storage_name] }
|
||||||
end
|
end
|
||||||
|
|
||||||
context "" do
|
context "" do
|
||||||
|
@ -108,8 +106,8 @@ module ::DatabaseCleaner
|
||||||
subject { MigrationExample.new( { :except => EXCEPT_TABLES } ) }
|
subject { MigrationExample.new( { :except => EXCEPT_TABLES } ) }
|
||||||
|
|
||||||
it "should not modify the array of excepted tables" do
|
it "should not modify the array of excepted tables" do
|
||||||
subject.except.should include("migration_storage_name")
|
expect(subject.except).to include("migration_storage_name")
|
||||||
EXCEPT_TABLES.should_not include("migration_storage_name")
|
expect(EXCEPT_TABLES).not_to include("migration_storage_name")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
module MongoTest
|
module MongoTest
|
||||||
class ThingBase
|
class Base
|
||||||
def self.collection
|
def self.collection
|
||||||
@connection ||= ::Mongo::Connection.new('127.0.0.1')
|
@connection ||= Mongo::Connection.new('127.0.0.1')
|
||||||
@db ||= @connection.db('database_cleaner_specs')
|
@db ||= @connection.db('database_cleaner_specs')
|
||||||
@mongo ||= @db.collection(name) || @db.create_collection(name)
|
@collection ||= @db.collection(name) || @db.create_collection(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.count
|
def self.count
|
||||||
@mongo.count
|
@collection.count
|
||||||
end
|
end
|
||||||
|
|
||||||
def initialize(attrs={})
|
def initialize(attrs={})
|
||||||
|
@ -19,8 +19,8 @@ module MongoTest
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Widget < ThingBase
|
class Widget < Base
|
||||||
end
|
end
|
||||||
class Gadget < ThingBase
|
class Gadget < Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,73 +1,50 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'mongo'
|
require 'mongo'
|
||||||
require 'database_cleaner/mongo/truncation'
|
require 'database_cleaner/mongo/truncation'
|
||||||
require File.dirname(__FILE__) + '/mongo_examples'
|
require File.dirname(__FILE__) + '/mongo_examples'
|
||||||
|
|
||||||
module DatabaseCleaner
|
RSpec.describe DatabaseCleaner::Mongo::Truncation do
|
||||||
module Mongo
|
around do |example|
|
||||||
|
connection = Mongo::Connection.new('127.0.0.1')
|
||||||
|
db_name = 'database_cleaner_specs'
|
||||||
|
db = connection.db(db_name)
|
||||||
|
subject.db = db
|
||||||
|
|
||||||
describe Truncation do
|
example.run
|
||||||
let(:args) {{}}
|
|
||||||
let(:truncation) { described_class.new(args).tap { |t| t.db=@db } }
|
|
||||||
#doing this in the file root breaks autospec, doing it before(:all) just fails the specs
|
|
||||||
before(:all) do
|
|
||||||
@connection = ::Mongo::Connection.new('127.0.0.1')
|
|
||||||
@test_db = 'database_cleaner_specs'
|
|
||||||
@db = @connection.db(@test_db)
|
|
||||||
end
|
|
||||||
|
|
||||||
after(:each) do
|
connection.drop_database(db_name)
|
||||||
@connection.drop_database(@test_db)
|
end
|
||||||
end
|
|
||||||
|
|
||||||
def ensure_counts(expected_counts)
|
before do
|
||||||
# I had to add this sanity_check garbage because I was getting non-determinisc results from mongo at times..
|
MongoTest::Widget.new(name: 'some widget').save!
|
||||||
# very odd and disconcerting...
|
MongoTest::Gadget.new(name: 'some gadget').save!
|
||||||
expected_counts.each do |model_class, expected_count|
|
end
|
||||||
actual_count = model_class.count
|
|
||||||
actual_count.should eq(expected_count), "#{model_class} expected to have a count of #{expected_count} but was #{actual_count}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_widget(attrs={})
|
|
||||||
MongoTest::Widget.new({:name => 'some widget'}.merge(attrs)).save!
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_gadget(attrs={})
|
|
||||||
MongoTest::Gadget.new({:name => 'some gadget'}.merge(attrs)).save!
|
|
||||||
end
|
|
||||||
|
|
||||||
it "truncates all collections by default" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(MongoTest::Widget => 1, MongoTest::Gadget => 1)
|
|
||||||
truncation.clean
|
|
||||||
ensure_counts(MongoTest::Widget => 0, MongoTest::Gadget => 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when collections are provided to the :only option" do
|
|
||||||
let(:args) {{:only => ['MongoTest::Widget']}}
|
|
||||||
it "only truncates the specified collections" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(MongoTest::Widget => 1, MongoTest::Gadget => 1)
|
|
||||||
truncation.clean
|
|
||||||
ensure_counts(MongoTest::Widget => 0, MongoTest::Gadget => 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when collections are provided to the :except option" do
|
|
||||||
let(:args) {{:except => ['MongoTest::Widget']}}
|
|
||||||
it "truncates all but the specified collections" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(MongoTest::Widget => 1, MongoTest::Gadget => 1)
|
|
||||||
truncation.clean
|
|
||||||
ensure_counts(MongoTest::Widget => 1, MongoTest::Gadget => 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
context "by default" do
|
||||||
|
it "truncates all collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MongoTest::Widget.count, MongoTest::Gadget.count]
|
||||||
|
}.from([1,1]).to([0,0])
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when collections are provided to the :only option" do
|
||||||
|
subject { described_class.new(only: ['MongoTest::Widget']) }
|
||||||
|
|
||||||
|
it "only truncates the specified collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MongoTest::Widget.count, MongoTest::Gadget.count]
|
||||||
|
}.from([1,1]).to([0,1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when collections are provided to the :except option" do
|
||||||
|
subject { described_class.new(except: ['MongoTest::Widget']) }
|
||||||
|
|
||||||
|
it "truncates all but the specified collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MongoTest::Widget.count, MongoTest::Gadget.count]
|
||||||
|
}.from([1,1]).to([1,0])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/mongo_mapper/base'
|
require 'database_cleaner/mongo_mapper/base'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe MongoMapper do
|
RSpec.describe MongoMapper do
|
||||||
it { should respond_to(:available_strategies) }
|
it { is_expected.to respond_to(:available_strategies) }
|
||||||
end
|
end
|
||||||
|
|
||||||
module MongoMapper
|
module MongoMapper
|
||||||
|
@ -12,20 +11,20 @@ module DatabaseCleaner
|
||||||
include ::DatabaseCleaner::MongoMapper::Base
|
include ::DatabaseCleaner::MongoMapper::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ExampleStrategy do
|
RSpec.describe ExampleStrategy do
|
||||||
|
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
|
|
||||||
describe "db" do
|
describe "db" do
|
||||||
it { should respond_to(:db=) }
|
it { is_expected.to respond_to(:db=) }
|
||||||
|
|
||||||
it "should store my desired db" do
|
it "should store my desired db" do
|
||||||
subject.db = :my_db
|
subject.db = :my_db
|
||||||
subject.db.should eq :my_db
|
expect(subject.db).to eq :my_db
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should default to :default" do
|
it "should default to :default" do
|
||||||
subject.db.should eq :default
|
expect(subject.db).to eq :default
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
class Widget
|
module MongoMapperTest
|
||||||
include ::MongoMapper::Document
|
class Widget
|
||||||
key :name, String
|
include ::MongoMapper::Document
|
||||||
end
|
key :name, String
|
||||||
class Gadget
|
end
|
||||||
include ::MongoMapper::Document
|
class Gadget
|
||||||
key :name, String
|
include ::MongoMapper::Document
|
||||||
|
key :name, String
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,75 +1,49 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'mongo_mapper'
|
require 'mongo_mapper'
|
||||||
require 'database_cleaner/mongo_mapper/truncation'
|
require 'database_cleaner/mongo_mapper/truncation'
|
||||||
require File.dirname(__FILE__) + '/mongo_examples'
|
require File.dirname(__FILE__) + '/mongo_examples'
|
||||||
|
|
||||||
module DatabaseCleaner
|
RSpec.describe DatabaseCleaner::MongoMapper::Truncation do
|
||||||
module MongoMapper
|
around do |example|
|
||||||
|
MongoMapper.connection = Mongo::Connection.new('127.0.0.1')
|
||||||
|
db_name = 'database_cleaner_specs'
|
||||||
|
MongoMapper.database = db_name
|
||||||
|
|
||||||
describe Truncation do
|
example.run
|
||||||
|
|
||||||
#doing this in the file root breaks autospec, doing it before(:all) just fails the specs
|
MongoMapper.connection.drop_database(db_name)
|
||||||
before(:all) do
|
end
|
||||||
::MongoMapper.connection = ::Mongo::Connection.new('127.0.0.1')
|
|
||||||
@test_db = 'database_cleaner_specs'
|
|
||||||
::MongoMapper.database = @test_db
|
|
||||||
end
|
|
||||||
|
|
||||||
before(:each) do
|
before do
|
||||||
::MongoMapper.connection.drop_database(@test_db)
|
MongoMapperTest::Widget.new(name: 'some widget').save!
|
||||||
end
|
MongoMapperTest::Gadget.new(name: 'some gadget').save!
|
||||||
|
end
|
||||||
def ensure_counts(expected_counts)
|
|
||||||
# I had to add this sanity_check garbage because I was getting non-determinisc results from mongomapper at times..
|
|
||||||
# very odd and disconcerting...
|
|
||||||
sanity_check = expected_counts.delete(:sanity_check)
|
|
||||||
begin
|
|
||||||
expected_counts.each do |model_class, expected_count|
|
|
||||||
actual_count = model_class.count
|
|
||||||
actual_count.should eq(expected_count), "#{model_class} expected to have a count of #{expected_count} but was #{actual_count}"
|
|
||||||
end
|
|
||||||
rescue RSpec::Expectations::ExpectationNotMetError => e
|
|
||||||
raise !sanity_check ? e : RSpec::ExpectationNotMetError::ExpectationNotMetError.new("SANITY CHECK FAILURE! This should never happen here: #{e.message}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_widget(attrs={})
|
|
||||||
Widget.new({:name => 'some widget'}.merge(attrs)).save!
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_gadget(attrs={})
|
|
||||||
Gadget.new({:name => 'some gadget'}.merge(attrs)).save!
|
|
||||||
end
|
|
||||||
|
|
||||||
it "truncates all collections by default" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(Widget => 1, Gadget => 1, :sanity_check => true)
|
|
||||||
Truncation.new.clean
|
|
||||||
ensure_counts(Widget => 0, Gadget => 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when collections are provided to the :only option" do
|
|
||||||
it "only truncates the specified collections" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(Widget => 1, Gadget => 1, :sanity_check => true)
|
|
||||||
Truncation.new(:only => ['widgets']).clean
|
|
||||||
ensure_counts(Widget => 0, Gadget => 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when collections are provided to the :except option" do
|
|
||||||
it "truncates all but the specified collections" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(Widget => 1, Gadget => 1, :sanity_check => true)
|
|
||||||
Truncation.new(:except => ['widgets']).clean
|
|
||||||
ensure_counts(Widget => 1, Gadget => 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
context "by default" do
|
||||||
|
it "truncates all collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MongoMapperTest::Widget.count, MongoMapperTest::Gadget.count]
|
||||||
|
}.from([1,1]).to([0,0])
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when collections are provided to the :only option" do
|
||||||
|
subject { described_class.new(only: ['mongo_mapper_test.widgets']) }
|
||||||
|
|
||||||
|
it "only truncates the specified collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MongoMapperTest::Widget.count, MongoMapperTest::Gadget.count]
|
||||||
|
}.from([1,1]).to([0,1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when collections are provided to the :except option" do
|
||||||
|
subject { described_class.new(except: ['mongo_mapper_test.widgets']) }
|
||||||
|
|
||||||
|
it "truncates all but the specified collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MongoMapperTest::Widget.count, MongoMapperTest::Gadget.count]
|
||||||
|
}.from([1,1]).to([1,0])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
module MopedTest
|
module MopedTest
|
||||||
class ThingBase
|
class Base
|
||||||
def self.collection
|
def self.collection
|
||||||
@db ||= 'database_cleaner_specs'
|
@db ||= 'database_cleaner_specs'
|
||||||
@session ||= ::Moped::Session.new(['127.0.0.1:27017'], database: @db)
|
@session ||= ::Moped::Session.new(['127.0.0.1:27017'], database: @db)
|
||||||
|
@ -19,11 +19,11 @@ module MopedTest
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class Widget < ThingBase
|
class Widget < Base
|
||||||
end
|
end
|
||||||
class Gadget < ThingBase
|
class Gadget < Base
|
||||||
end
|
end
|
||||||
class System < ThingBase
|
class System < Base
|
||||||
def self.collection
|
def self.collection
|
||||||
super
|
super
|
||||||
@collection = @session['system_logs']
|
@collection = @session['system_logs']
|
||||||
|
|
|
@ -1,82 +1,51 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'moped'
|
require 'moped'
|
||||||
require 'database_cleaner/moped/truncation'
|
require 'database_cleaner/moped/truncation'
|
||||||
require File.dirname(__FILE__) + '/moped_examples'
|
require File.dirname(__FILE__) + '/moped_examples'
|
||||||
|
|
||||||
module DatabaseCleaner
|
RSpec.describe DatabaseCleaner::Moped::Truncation do
|
||||||
module Moped
|
around do |example|
|
||||||
|
db_name = 'database_cleaner_specs'
|
||||||
|
session = ::Moped::Session.new(['127.0.0.1:27017'], database: db_name)
|
||||||
|
subject.db = db_name
|
||||||
|
|
||||||
describe Truncation do
|
example.run
|
||||||
let(:args) {{}}
|
|
||||||
let(:truncation) { described_class.new(args) }
|
|
||||||
#doing this in the file root breaks autospec, doing it before(:all) just fails the specs
|
|
||||||
before(:all) do
|
|
||||||
@test_db = 'database_cleaner_specs'
|
|
||||||
@session = ::Moped::Session.new(['127.0.0.1:27017'], database: @test_db)
|
|
||||||
end
|
|
||||||
|
|
||||||
before(:each) do
|
session.drop
|
||||||
truncation.db = @test_db
|
session.command(getlasterror: 1)
|
||||||
end
|
end
|
||||||
|
|
||||||
after(:each) do
|
before do
|
||||||
@session.drop
|
MopedTest::Widget.new(name: 'some widget').save!
|
||||||
@session.command(getlasterror: 1)
|
MopedTest::Gadget.new(name: 'some gadget').save!
|
||||||
end
|
MopedTest::System.new(name: 'some system').save!
|
||||||
|
end
|
||||||
def ensure_counts(expected_counts)
|
|
||||||
# I had to add this sanity_check garbage because I was getting non-deterministic results from mongo at times..
|
|
||||||
# very odd and disconcerting...
|
|
||||||
expected_counts.each do |model_class, expected_count|
|
|
||||||
actual_count = model_class.count
|
|
||||||
actual_count.should eq(expected_count), "#{model_class} expected to have a count of #{expected_count} but was #{actual_count}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_widget(attrs={})
|
|
||||||
MopedTest::Widget.new({:name => 'some widget'}.merge(attrs)).save!
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_gadget(attrs={})
|
|
||||||
MopedTest::Gadget.new({:name => 'some gadget'}.merge(attrs)).save!
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_system(attrs={})
|
|
||||||
MopedTest::System.new({:name => 'some system'}.merge(attrs)).save!
|
|
||||||
end
|
|
||||||
|
|
||||||
it "truncates all collections by default" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
create_system
|
|
||||||
ensure_counts(MopedTest::Widget => 1, MopedTest::Gadget => 1, MopedTest::System => 1)
|
|
||||||
truncation.clean
|
|
||||||
ensure_counts(MopedTest::Widget => 0, MopedTest::Gadget => 0, MopedTest::System => 0)
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when collections are provided to the :only option" do
|
|
||||||
let(:args) {{:only => ['MopedTest::Widget']}}
|
|
||||||
it "only truncates the specified collections" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(MopedTest::Widget => 1, MopedTest::Gadget => 1)
|
|
||||||
truncation.clean
|
|
||||||
ensure_counts(MopedTest::Widget => 0, MopedTest::Gadget => 1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when collections are provided to the :except option" do
|
|
||||||
let(:args) {{:except => ['MopedTest::Widget']}}
|
|
||||||
it "truncates all but the specified collections" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
ensure_counts(MopedTest::Widget => 1, MopedTest::Gadget => 1)
|
|
||||||
truncation.clean
|
|
||||||
ensure_counts(MopedTest::Widget => 1, MopedTest::Gadget => 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
context "by default" do
|
||||||
|
it "truncates all collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MopedTest::Widget.count, MopedTest::Gadget.count, MopedTest::System.count]
|
||||||
|
}.from([1,1,1]).to([0,0,0])
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when collections are provided to the :only option" do
|
||||||
|
subject { described_class.new(only: ['MopedTest::Widget']) }
|
||||||
|
|
||||||
|
it "only truncates the specified collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MopedTest::Widget.count, MopedTest::Gadget.count, MopedTest::System.count]
|
||||||
|
}.from([1,1,1]).to([0,1,1])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when collections are provided to the :except option" do
|
||||||
|
subject { described_class.new(except: ['MopedTest::Widget']) }
|
||||||
|
|
||||||
|
it "truncates all but the specified collections" do
|
||||||
|
expect { subject.clean }.to change {
|
||||||
|
[MopedTest::Widget.count, MopedTest::Gadget.count, MopedTest::System.count]
|
||||||
|
}.from([1,1,1]).to([1,0,0])
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/neo4j/base'
|
require 'database_cleaner/neo4j/base'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe Neo4j do
|
RSpec.describe Neo4j do
|
||||||
it { should respond_to(:available_strategies) }
|
it { is_expected.to respond_to(:available_strategies) }
|
||||||
end
|
end
|
||||||
|
|
||||||
module Neo4j
|
module Neo4j
|
||||||
|
@ -12,31 +11,31 @@ module DatabaseCleaner
|
||||||
include ::DatabaseCleaner::Neo4j::Base
|
include ::DatabaseCleaner::Neo4j::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ExampleStrategy do
|
RSpec.describe ExampleStrategy do
|
||||||
|
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it { should respond_to(:db) }
|
it { is_expected.to respond_to(:db) }
|
||||||
it { should respond_to(:db=) }
|
it { is_expected.to respond_to(:db=) }
|
||||||
|
|
||||||
it "should store my describe db" do
|
it "should store my describe db" do
|
||||||
db_conf = {:connection => {:type => :server_db, :path => 'http://localhost:7474'}}
|
db_conf = {:connection => {:type => :server_db, :path => 'http://localhost:7474'}}
|
||||||
subject.db = db_conf
|
subject.db = db_conf
|
||||||
subject.db.should eq db_conf
|
expect(subject.db).to eq db_conf
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should respect additional connection parameters" do
|
it "should respect additional connection parameters" do
|
||||||
db_conf = {:type => :server_db, :path => 'http://localhost:7474', basic_auth: {username: 'user', password: 'pass'}}
|
db_conf = {:type => :server_db, :path => 'http://localhost:7474', basic_auth: {username: 'user', password: 'pass'}}
|
||||||
subject.db = db_conf
|
subject.db = db_conf
|
||||||
stub_const("Neo4j::Session", double()).should_receive(:open).with(:server_db, 'http://localhost:7474', {basic_auth: {username: 'user', password: 'pass'}}) { true }
|
expect(stub_const("Neo4j::Session", double())).to receive(:open).with(:server_db, 'http://localhost:7474', {basic_auth: {username: 'user', password: 'pass'}}) { true }
|
||||||
subject.start
|
subject.start
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should default to nil" do
|
it "should default to nil" do
|
||||||
subject.db.should be_nil
|
expect(subject.db).to be_nil
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should return default configuration" do
|
it "should return default configuration" do
|
||||||
subject.database.should eq(:type => :server_db, :path => 'http://localhost:7475/')
|
expect(subject.database).to eq(:type => :server_db, :path => 'http://localhost:7475/')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'neo4j-core'
|
require 'neo4j-core'
|
||||||
require 'database_cleaner/neo4j/transaction'
|
require 'database_cleaner/neo4j/transaction'
|
||||||
|
require 'database_cleaner/shared_strategy'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module Neo4j
|
module Neo4j
|
||||||
|
|
||||||
describe Transaction do
|
RSpec.describe Transaction do
|
||||||
before(:all) do
|
before(:all) do
|
||||||
DatabaseCleaner[:neo4j, :connection => {:type => :server_db, :path => 'http://localhost:7474'}]
|
DatabaseCleaner[:neo4j, :connection => {:type => :server_db, :path => 'http://localhost:7474'}]
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,28 +1,28 @@
|
||||||
require 'spec_helper'
|
require "database_cleaner/null_strategy"
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe NullStrategy do
|
RSpec.describe NullStrategy do
|
||||||
it 'responds to .start' do
|
it 'responds to .start' do
|
||||||
expect { NullStrategy.start }.not_to raise_error(NoMethodError)
|
expect { NullStrategy.start }.not_to raise_error
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'responds to .clean' do
|
||||||
|
expect { NullStrategy.clean }.not_to raise_error
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.cleaning' do
|
||||||
|
it 'fails without a block' do
|
||||||
|
expect { NullStrategy.cleaning }.to raise_error(LocalJumpError)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'responds to .clean' do
|
it 'no-ops with a block' do
|
||||||
expect { NullStrategy.clean }.not_to raise_error(NoMethodError)
|
effect = double
|
||||||
end
|
expect(effect).to receive(:occur).once
|
||||||
|
|
||||||
describe '.cleaning' do
|
NullStrategy.cleaning do
|
||||||
it 'fails without a block' do
|
effect.occur
|
||||||
expect { NullStrategy.cleaning }.to raise_error(LocalJumpError)
|
|
||||||
end
|
|
||||||
|
|
||||||
it 'no-ops with a block' do
|
|
||||||
effect = double
|
|
||||||
expect(effect).to receive(:occur).once
|
|
||||||
|
|
||||||
NullStrategy.cleaning do
|
|
||||||
effect.occur
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,70 +1,54 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'ohm'
|
require 'ohm'
|
||||||
require 'database_cleaner/ohm/truncation'
|
require 'database_cleaner/ohm/truncation'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module OhmTests
|
||||||
module Ohm
|
class Widget < ::Ohm::Model
|
||||||
|
attribute :name
|
||||||
|
end
|
||||||
|
|
||||||
class Widget < ::Ohm::Model
|
class Gadget < ::Ohm::Model
|
||||||
attribute :name
|
attribute :name
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
RSpec.describe DatabaseCleaner::Ohm::Truncation do
|
||||||
|
around do |example|
|
||||||
|
config = YAML::load(File.open("#{File.dirname(__FILE__)}/../../../examples/config/redis.yml"))
|
||||||
|
Ohm.connect url: config['test']['url']
|
||||||
|
@redis = Ohm.redis
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
@redis.flushdb
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
OhmTests::Widget.new(name: 'some widget').save
|
||||||
|
OhmTests::Gadget.new(name: 'some gadget').save
|
||||||
|
end
|
||||||
|
|
||||||
|
context "by default" do
|
||||||
|
it "truncates all keys" do
|
||||||
|
expect { subject.clean }.to change { @redis.keys.size }.from(6).to(0)
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
class Gadget < ::Ohm::Model
|
context "when keys are provided to the :only option" do
|
||||||
attribute :name
|
subject { described_class.new(only: ['*Widget*']) }
|
||||||
|
|
||||||
|
it "only truncates the specified keys" do
|
||||||
|
expect { subject.clean }.to change { @redis.keys.size }.from(6).to(3)
|
||||||
|
expect(@redis.get('OhmTests::Gadget:id')).to eq '1'
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe Truncation do
|
context "when keys are provided to the :except option" do
|
||||||
before(:all) do
|
subject { described_class.new(except: ['*Widget*']) }
|
||||||
config = YAML::load(File.open("#{File.dirname(__FILE__)}/../../../examples/config/redis.yml"))
|
|
||||||
::Ohm.connect :url => config['test']['url']
|
|
||||||
@redis = ::Ohm.redis
|
|
||||||
end
|
|
||||||
|
|
||||||
before(:each) do
|
it "truncates all but the specified keys" do
|
||||||
@redis.flushdb
|
expect { subject.clean }.to change { @redis.keys.size }.from(6).to(3)
|
||||||
end
|
expect(@redis.get('OhmTests::Widget:id')).to eq '1'
|
||||||
|
|
||||||
it "should flush the database" do
|
|
||||||
Truncation.new.clean
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_widget(attrs={})
|
|
||||||
Widget.new({:name => 'some widget'}.merge(attrs)).save
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_gadget(attrs={})
|
|
||||||
Gadget.new({:name => 'some gadget'}.merge(attrs)).save
|
|
||||||
end
|
|
||||||
|
|
||||||
it "truncates all keys by default" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
@redis.keys.size.should eq 6
|
|
||||||
Truncation.new.clean
|
|
||||||
@redis.keys.size.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when keys are provided to the :only option" do
|
|
||||||
it "only truncates the specified keys" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
@redis.keys.size.should eq 6
|
|
||||||
Truncation.new(:only => ['*Widget*']).clean
|
|
||||||
@redis.keys.size.should eq 3
|
|
||||||
@redis.get('DatabaseCleaner::Ohm::Gadget:id').should eq '1'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when keys are provided to the :except option" do
|
|
||||||
it "truncates all but the specified keys" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
@redis.keys.size.should eq 6
|
|
||||||
Truncation.new(:except => ['*Widget*']).clean
|
|
||||||
@redis.keys.size.should eq 3
|
|
||||||
@redis.get('DatabaseCleaner::Ohm::Widget:id').should eq '1'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'redis'
|
require 'redis'
|
||||||
require 'database_cleaner/redis/base'
|
require 'database_cleaner/redis/base'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe Redis do
|
RSpec.describe Redis do
|
||||||
it { should respond_to(:available_strategies) }
|
it { is_expected.to respond_to(:available_strategies) }
|
||||||
end
|
end
|
||||||
|
|
||||||
module Redis
|
module Redis
|
||||||
|
@ -13,17 +12,17 @@ module DatabaseCleaner
|
||||||
include ::DatabaseCleaner::Redis::Base
|
include ::DatabaseCleaner::Redis::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ExampleStrategy do
|
RSpec.describe ExampleStrategy do
|
||||||
|
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it { should respond_to(:db) }
|
it { is_expected.to respond_to(:db) }
|
||||||
it { should respond_to(:db=) }
|
it { is_expected.to respond_to(:db=) }
|
||||||
|
|
||||||
context "when passing url" do
|
context "when passing url" do
|
||||||
it "should store my describe db" do
|
it "should store my describe db" do
|
||||||
url = 'redis://localhost:6379/2'
|
url = 'redis://localhost:6379/2'
|
||||||
subject.db = 'redis://localhost:6379/2'
|
subject.db = 'redis://localhost:6379/2'
|
||||||
subject.db.should eq url
|
expect(subject.db).to eq url
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,12 +30,12 @@ module DatabaseCleaner
|
||||||
it "should store my describe db" do
|
it "should store my describe db" do
|
||||||
connection = ::Redis.new :url => 'redis://localhost:6379/2'
|
connection = ::Redis.new :url => 'redis://localhost:6379/2'
|
||||||
subject.db = connection
|
subject.db = connection
|
||||||
subject.db.should eq connection
|
expect(subject.db).to eq connection
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should default to :default" do
|
it "should default to :default" do
|
||||||
subject.db.should eq :default
|
expect(subject.db).to eq :default
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,62 +1,42 @@
|
||||||
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
||||||
require 'redis'
|
require 'redis'
|
||||||
require 'database_cleaner/redis/truncation'
|
require 'database_cleaner/redis/truncation'
|
||||||
|
|
||||||
|
RSpec.describe DatabaseCleaner::Redis::Truncation do
|
||||||
|
around do |example|
|
||||||
|
config = YAML::load(File.open("#{File.dirname(__FILE__)}/../../../examples/config/redis.yml"))
|
||||||
|
@redis = ::Redis.new :url => config['test']['url']
|
||||||
|
|
||||||
module DatabaseCleaner
|
example.run
|
||||||
module Redis
|
|
||||||
|
|
||||||
describe Truncation do
|
@redis.flushdb
|
||||||
before(:all) do
|
end
|
||||||
config = YAML::load(File.open("#{File.dirname(__FILE__)}/../../../examples/config/redis.yml"))
|
|
||||||
@redis = ::Redis.new :url => config['test']['url']
|
|
||||||
end
|
|
||||||
|
|
||||||
before(:each) do
|
before do
|
||||||
@redis.flushdb
|
@redis.set 'Widget', 1
|
||||||
end
|
@redis.set 'Gadget', 1
|
||||||
|
end
|
||||||
|
|
||||||
it "should flush the database" do
|
context "by default" do
|
||||||
Truncation.new.clean
|
it "truncates all keys" do
|
||||||
end
|
expect { subject.clean }.to change { @redis.keys.size }.from(2).to(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def create_widget(attrs={})
|
context "when keys are provided to the :only option" do
|
||||||
@redis.set 'Widget', 1
|
subject { described_class.new(only: ['Widge*']) }
|
||||||
end
|
|
||||||
|
|
||||||
def create_gadget(attrs={})
|
it "only truncates the specified keys" do
|
||||||
@redis.set 'Gadget', 1
|
expect { subject.clean }.to change { @redis.keys.size }.from(2).to(1)
|
||||||
end
|
expect(@redis.get('Gadget')).to eq '1'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "truncates all keys by default" do
|
context "when keys are provided to the :except option" do
|
||||||
create_widget
|
subject { described_class.new(except: ['Widg*']) }
|
||||||
create_gadget
|
|
||||||
@redis.keys.size.should eq 2
|
|
||||||
Truncation.new.clean
|
|
||||||
@redis.keys.size.should eq 0
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when keys are provided to the :only option" do
|
it "truncates all but the specified keys" do
|
||||||
it "only truncates the specified keys" do
|
expect { subject.clean }.to change { @redis.keys.size }.from(2).to(1)
|
||||||
create_widget
|
expect(@redis.get('Widget')).to eq '1'
|
||||||
create_gadget
|
|
||||||
@redis.keys.size.should eq 2
|
|
||||||
Truncation.new(:only => ['Widge*']).clean
|
|
||||||
@redis.keys.size.should eq 1
|
|
||||||
@redis.get('Gadget').should eq '1'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context "when keys are provided to the :except option" do
|
|
||||||
it "truncates all but the specified keys" do
|
|
||||||
create_widget
|
|
||||||
create_gadget
|
|
||||||
@redis.keys.size.should eq 2
|
|
||||||
Truncation.new(:except => ['Widg*']).clean
|
|
||||||
@redis.keys.size.should eq 1
|
|
||||||
@redis.get('Widget').should eq '1'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'active_record'
|
require 'active_record'
|
||||||
require 'database_cleaner/active_record/transaction'
|
require 'database_cleaner/active_record/transaction'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe Safeguard do
|
RSpec.describe Safeguard do
|
||||||
let(:strategy) { DatabaseCleaner::ActiveRecord::Transaction }
|
let(:strategy) { DatabaseCleaner::ActiveRecord::Transaction }
|
||||||
let(:cleaner) { Base.new(:autodetect) }
|
let(:cleaner) { Base.new(:autodetect) }
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/sequel/base'
|
require 'database_cleaner/sequel/base'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
require 'sequel'
|
require 'sequel'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe Sequel do
|
RSpec.describe Sequel do
|
||||||
it { should respond_to(:available_strategies) }
|
it { is_expected.to respond_to(:available_strategies) }
|
||||||
end
|
end
|
||||||
|
|
||||||
module Sequel
|
module Sequel
|
||||||
|
@ -13,20 +12,17 @@ module DatabaseCleaner
|
||||||
include ::DatabaseCleaner::Sequel::Base
|
include ::DatabaseCleaner::Sequel::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
describe ExampleStrategy do
|
RSpec.describe ExampleStrategy do
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it { should respond_to(:db) }
|
it { is_expected.to respond_to(:db) }
|
||||||
it { should respond_to(:db=) }
|
it { is_expected.to respond_to(:db=) }
|
||||||
|
|
||||||
it "should store my desired db" do
|
it "should store my desired db" do
|
||||||
subject.db = :my_db
|
subject.db = :my_db
|
||||||
subject.db.should eq :my_db
|
expect(subject.db).to eq :my_db
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should default to :default" do
|
pending "I figure out how to use Sequel and write some real tests for it..."
|
||||||
pending "I figure out how to use Sequel and write some real tests for it..."
|
|
||||||
subject.db.should eq :default
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,16 +1,17 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/sequel/deletion'
|
require 'database_cleaner/sequel/deletion'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
require 'sequel'
|
require 'sequel'
|
||||||
|
require 'support/sequel/sequel_setup'
|
||||||
|
# XXX: use ActiveRecord's db_config (`db/config.yml`) for CI/dev convenience
|
||||||
require 'support/active_record/database_setup'
|
require 'support/active_record/database_setup'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module Sequel
|
module Sequel
|
||||||
describe Deletion do
|
RSpec.describe Deletion do
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'a Sequel deletion strategy' do
|
RSpec.shared_examples 'a Sequel deletion strategy' do
|
||||||
let(:deletion) do
|
let(:deletion) do
|
||||||
d = Deletion.new
|
d = Deletion.new
|
||||||
d.db = db
|
d.db = db
|
||||||
|
@ -34,9 +35,9 @@ module DatabaseCleaner
|
||||||
d.db = db
|
d.db = db
|
||||||
d.clean
|
d.clean
|
||||||
|
|
||||||
expect(db[:replaceable_trifles]).to have(0).rows
|
expect(db[:replaceable_trifles]).to be_empty
|
||||||
expect(db[:worthless_junk]).to have(0).rows
|
expect(db[:worthless_junk]).to be_empty
|
||||||
expect(db[:precious_stones]).to have(0).rows
|
expect(db[:precious_stones]).to be_empty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -44,13 +45,22 @@ module DatabaseCleaner
|
||||||
|
|
||||||
supported_configurations = [
|
supported_configurations = [
|
||||||
{ :url => 'mysql:///', :connection_options => db_config['mysql'] },
|
{ :url => 'mysql:///', :connection_options => db_config['mysql'] },
|
||||||
{ :url => 'postgres:///', :connection_options => db_config['postgres'] }
|
{ :url => 'postgres:///', :connection_options => db_config['postgres'] },
|
||||||
]
|
]
|
||||||
|
|
||||||
supported_configurations.each do |config|
|
supported_configurations.each do |config|
|
||||||
describe "Sequel deletion (using a #{config[:url]} connection)" do
|
RSpec.describe "Sequel deletion (using a #{config[:url]} connection)" do
|
||||||
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
||||||
|
|
||||||
|
around do |example|
|
||||||
|
helper = SequelHelper.new(config)
|
||||||
|
helper.setup
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
helper.teardown
|
||||||
|
end
|
||||||
|
|
||||||
it_behaves_like 'a Sequel deletion strategy'
|
it_behaves_like 'a Sequel deletion strategy'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/sequel/transaction'
|
require 'database_cleaner/sequel/transaction'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
require 'sequel'
|
require 'sequel'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module Sequel
|
module Sequel
|
||||||
describe Transaction do
|
RSpec.describe Transaction do
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it_should_behave_like "a generic transaction strategy"
|
it_should_behave_like "a generic transaction strategy"
|
||||||
|
|
||||||
|
|
|
@ -1,19 +1,18 @@
|
||||||
require 'spec_helper'
|
|
||||||
require 'database_cleaner/sequel/truncation'
|
require 'database_cleaner/sequel/truncation'
|
||||||
require 'database_cleaner/shared_strategy'
|
require 'database_cleaner/shared_strategy'
|
||||||
require 'sequel'
|
require 'sequel'
|
||||||
|
require 'support/sequel/sequel_setup'
|
||||||
# XXX: use ActiveRecord's db_config (`db/config.yml`) for CI/dev convenience
|
# XXX: use ActiveRecord's db_config (`db/config.yml`) for CI/dev convenience
|
||||||
require 'support/active_record/database_setup'
|
require 'support/active_record/database_setup'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
module Sequel
|
module Sequel
|
||||||
describe Truncation do
|
RSpec.describe Truncation do
|
||||||
it_should_behave_like "a generic strategy"
|
it_should_behave_like "a generic strategy"
|
||||||
it_should_behave_like "a generic truncation strategy"
|
it_should_behave_like "a generic truncation strategy"
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples 'a Sequel truncation strategy' do
|
RSpec.shared_examples 'a Sequel truncation strategy' do
|
||||||
|
|
||||||
# XXX: it'd be really nice if Truncation accepted db: constructor parameter
|
# XXX: it'd be really nice if Truncation accepted db: constructor parameter
|
||||||
let(:truncation) do
|
let(:truncation) do
|
||||||
|
@ -23,7 +22,7 @@ module DatabaseCleaner
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when several tables have data' do
|
context 'when several tables have data' do
|
||||||
before(:each) do
|
before do
|
||||||
db.create_table!(:precious_stones) { primary_key :id }
|
db.create_table!(:precious_stones) { primary_key :id }
|
||||||
db.create_table!(:replaceable_trifles) { primary_key :id }
|
db.create_table!(:replaceable_trifles) { primary_key :id }
|
||||||
db.create_table!(:worthless_junk) { primary_key :id }
|
db.create_table!(:worthless_junk) { primary_key :id }
|
||||||
|
@ -38,9 +37,9 @@ module DatabaseCleaner
|
||||||
t.db = db
|
t.db = db
|
||||||
t.clean
|
t.clean
|
||||||
|
|
||||||
expect(db[:replaceable_trifles]).to have(0).rows
|
expect(db[:replaceable_trifles]).to be_empty
|
||||||
expect(db[:worthless_junk]).to have(0).rows
|
expect(db[:worthless_junk]).to be_empty
|
||||||
expect(db[:precious_stones]).to have(0).rows
|
expect(db[:precious_stones]).to be_empty
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'when the Truncation is restricted to "only: [...]" some tables' do
|
context 'when the Truncation is restricted to "only: [...]" some tables' do
|
||||||
|
@ -49,9 +48,9 @@ module DatabaseCleaner
|
||||||
t.db = db
|
t.db = db
|
||||||
t.clean
|
t.clean
|
||||||
|
|
||||||
expect(db[:replaceable_trifles]).to have(0).rows
|
expect(db[:replaceable_trifles]).to be_empty
|
||||||
expect(db[:worthless_junk]).to have(0).rows
|
expect(db[:worthless_junk]).to be_empty
|
||||||
expect(db[:precious_stones]).to have(1).rows
|
expect(db[:precious_stones].count).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
context 'when the Truncation is restricted to "except: [...]" some tables' do
|
context 'when the Truncation is restricted to "except: [...]" some tables' do
|
||||||
|
@ -62,14 +61,15 @@ module DatabaseCleaner
|
||||||
|
|
||||||
expect(db[:replaceable_trifles]).to be_empty
|
expect(db[:replaceable_trifles]).to be_empty
|
||||||
expect(db[:worthless_junk]).to be_empty
|
expect(db[:worthless_junk]).to be_empty
|
||||||
expect(db[:precious_stones]).to have(1).item
|
expect(db[:precious_stones].count).to eq(1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'a truncation strategy without autoincrement resets' do
|
RSpec.shared_examples_for 'a truncation strategy without autoincrement resets' do
|
||||||
it "leaves AUTO_INCREMENT index alone by default (BUG: it should be reset instead)" do
|
it "leaves AUTO_INCREMENT index alone by default (BUG: it should be reset instead)" do
|
||||||
|
pending
|
||||||
# Jordan Hollinger made everything reset auto increment IDs
|
# Jordan Hollinger made everything reset auto increment IDs
|
||||||
# in commit 6a0104382647e5c06578aeac586c0333c8944492 so I'm pretty sure
|
# in commit 6a0104382647e5c06578aeac586c0333c8944492 so I'm pretty sure
|
||||||
# everything is meant to reset by default.
|
# everything is meant to reset by default.
|
||||||
|
@ -84,9 +84,7 @@ module DatabaseCleaner
|
||||||
truncation.clean
|
truncation.clean
|
||||||
|
|
||||||
id_after_clean = table.insert
|
id_after_clean = table.insert
|
||||||
pending('the bug being fixed') do
|
expect(id_after_clean).to eq 1
|
||||||
expect(id_after_clean).to eq 1
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
# XXX: it'd be really nice if Truncation accepted db: constructor parameter
|
# XXX: it'd be really nice if Truncation accepted db: constructor parameter
|
||||||
let(:truncation) do
|
let(:truncation) do
|
||||||
|
@ -96,7 +94,7 @@ module DatabaseCleaner
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for 'a truncation strategy that resets autoincrement keys by default' do
|
RSpec.shared_examples_for 'a truncation strategy that resets autoincrement keys by default' do
|
||||||
it "resets AUTO_INCREMENT primary keys" do
|
it "resets AUTO_INCREMENT primary keys" do
|
||||||
db.create_table!(:replaceable_trifles) { primary_key :id }
|
db.create_table!(:replaceable_trifles) { primary_key :id }
|
||||||
table = db[:replaceable_trifles]
|
table = db[:replaceable_trifles]
|
||||||
|
@ -124,26 +122,39 @@ module DatabaseCleaner
|
||||||
{url: 'mysql:///', connection_options: db_config['mysql']},
|
{url: 'mysql:///', connection_options: db_config['mysql']},
|
||||||
{url: 'mysql2:///', connection_options: db_config['mysql2']}
|
{url: 'mysql2:///', connection_options: db_config['mysql2']}
|
||||||
]
|
]
|
||||||
|
|
||||||
supported_configurations.each do |config|
|
supported_configurations.each do |config|
|
||||||
describe "Sequel truncation (using a #{config[:url]} connection)" do
|
RSpec.describe "Sequel truncation (using a #{config[:url]} connection)" do
|
||||||
|
around do |example|
|
||||||
|
helper = SequelHelper.new(config)
|
||||||
|
helper.setup
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
helper.teardown
|
||||||
|
end
|
||||||
|
|
||||||
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
||||||
|
|
||||||
it_behaves_like 'a Sequel truncation strategy'
|
it_behaves_like 'a Sequel truncation strategy'
|
||||||
it_behaves_like 'a truncation strategy that resets autoincrement keys by default'
|
it_behaves_like 'a truncation strategy that resets autoincrement keys by default'
|
||||||
|
|
||||||
|
|
||||||
describe '#pre_count?' do
|
describe '#pre_count?' do
|
||||||
subject { Truncation.new.tap { |t| t.db = db } }
|
subject { Truncation.new.tap { |t| t.db = db } }
|
||||||
|
|
||||||
its(:pre_count?) { should eq false }
|
it 'should return false initially' do
|
||||||
|
expect(subject.send(:pre_count?)).to eq false
|
||||||
|
end
|
||||||
|
|
||||||
it 'should return true if @reset_id is set and non false or nil' do
|
it 'should return true if @reset_id is set and non false or nil' do
|
||||||
subject.instance_variable_set(:"@pre_count", true)
|
subject.instance_variable_set(:"@pre_count", true)
|
||||||
subject.send(:pre_count?).should eq true
|
expect(subject.send(:pre_count?)).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'should return false if @reset_id is set to false' do
|
it 'should return false if @reset_id is set to false' do
|
||||||
subject.instance_variable_set(:"@pre_count", false)
|
subject.instance_variable_set(:"@pre_count", false)
|
||||||
subject.send(:pre_count?).should eq false
|
expect(subject.send(:pre_count?)).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -153,8 +164,8 @@ module DatabaseCleaner
|
||||||
it "should rely on #pre_count_truncate_tables if #pre_count? returns true" do
|
it "should rely on #pre_count_truncate_tables if #pre_count? returns true" do
|
||||||
subject.instance_variable_set(:"@pre_count", true)
|
subject.instance_variable_set(:"@pre_count", true)
|
||||||
|
|
||||||
subject.should_not_receive(:truncate_tables)
|
expect(subject).not_to receive(:truncate_tables)
|
||||||
subject.should_receive(:pre_count_truncate_tables)
|
expect(subject).to receive(:pre_count_truncate_tables)
|
||||||
|
|
||||||
subject.clean
|
subject.clean
|
||||||
end
|
end
|
||||||
|
@ -162,16 +173,26 @@ module DatabaseCleaner
|
||||||
it "should not rely on #pre_count_truncate_tables if #pre_count? return false" do
|
it "should not rely on #pre_count_truncate_tables if #pre_count? return false" do
|
||||||
subject.instance_variable_set(:"@pre_count", false)
|
subject.instance_variable_set(:"@pre_count", false)
|
||||||
|
|
||||||
subject.should_not_receive(:pre_count_truncate_tables)
|
expect(subject).not_to receive(:pre_count_truncate_tables)
|
||||||
subject.should_receive(:truncate_tables)
|
expect(subject).to receive(:truncate_tables)
|
||||||
|
|
||||||
subject.clean
|
subject.clean
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
half_supported_configurations.each do |config|
|
half_supported_configurations.each do |config|
|
||||||
describe "Sequel truncation (using a #{config[:url]} connection)" do
|
RSpec.describe "Sequel truncation (using a #{config[:url]} connection)" do
|
||||||
|
around do |example|
|
||||||
|
helper = SequelHelper.new(config)
|
||||||
|
helper.setup
|
||||||
|
|
||||||
|
example.run
|
||||||
|
|
||||||
|
helper.teardown
|
||||||
|
end
|
||||||
|
|
||||||
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
||||||
|
|
||||||
it_behaves_like 'a Sequel truncation strategy'
|
it_behaves_like 'a Sequel truncation strategy'
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
shared_examples_for "a generic strategy" do
|
RSpec.shared_examples_for "a generic strategy" do
|
||||||
it { should respond_to(:db) }
|
it { is_expected.to respond_to(:db) }
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "a generic truncation strategy" do
|
RSpec.shared_examples_for "a generic truncation strategy" do
|
||||||
it { should respond_to(:start) }
|
it { is_expected.to respond_to(:start) }
|
||||||
it { should respond_to(:clean) }
|
it { is_expected.to respond_to(:clean) }
|
||||||
it { should respond_to(:cleaning) }
|
it { is_expected.to respond_to(:cleaning) }
|
||||||
end
|
end
|
||||||
|
|
||||||
shared_examples_for "a generic transaction strategy" do
|
RSpec.shared_examples_for "a generic transaction strategy" do
|
||||||
it { should respond_to(:start) }
|
it { is_expected.to respond_to(:start) }
|
||||||
it { should respond_to(:clean) }
|
it { is_expected.to respond_to(:clean) }
|
||||||
it { should respond_to(:cleaning) }
|
it { is_expected.to respond_to(:cleaning) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,21 +1,14 @@
|
||||||
require "rubygems"
|
require "bundler/setup"
|
||||||
|
|
||||||
require "bundler"
|
|
||||||
Bundler.setup
|
|
||||||
|
|
||||||
require 'rspec/core'
|
|
||||||
require 'rspec/mocks'
|
|
||||||
|
|
||||||
#require 'active_record'
|
|
||||||
#require 'mongo_mapper'
|
|
||||||
|
|
||||||
$:.unshift(File.dirname(__FILE__))
|
|
||||||
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
|
||||||
|
|
||||||
require 'database_cleaner'
|
require 'database_cleaner'
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
|
# These two settings work together to allow you to limit a spec run
|
||||||
|
# to individual examples or groups you care about by tagging them with
|
||||||
|
# `:focus` metadata. When nothing is tagged with `:focus`, all examples
|
||||||
|
# get run.
|
||||||
|
config.filter_run :focus
|
||||||
|
config.run_all_when_everything_filtered = true
|
||||||
|
|
||||||
|
config.disable_monkey_patching!
|
||||||
end
|
end
|
||||||
|
|
||||||
alias running lambda
|
|
||||||
|
|
|
@ -1,27 +1,12 @@
|
||||||
require 'support/active_record/database_setup'
|
require 'support/active_record/database_setup'
|
||||||
require 'support/active_record/schema_setup'
|
require 'support/active_record/schema_setup'
|
||||||
|
|
||||||
module MySQL2Helper
|
class MySQL2Helper
|
||||||
puts "Active Record #{ActiveRecord::VERSION::STRING}, mysql2"
|
puts "Active Record #{ActiveRecord::VERSION::STRING}, mysql2"
|
||||||
|
|
||||||
# require 'logger'
|
# require 'logger'
|
||||||
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
||||||
|
|
||||||
def default_config
|
|
||||||
db_config['mysql2']
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_db
|
|
||||||
establish_connection(default_config.merge(:database => nil))
|
|
||||||
|
|
||||||
ActiveRecord::Base.connection.drop_database default_config['database'] rescue nil
|
|
||||||
ActiveRecord::Base.connection.create_database default_config['database']
|
|
||||||
end
|
|
||||||
|
|
||||||
def establish_connection(config = default_config)
|
|
||||||
ActiveRecord::Base.establish_connection config
|
|
||||||
end
|
|
||||||
|
|
||||||
def active_record_mysql2_setup
|
def active_record_mysql2_setup
|
||||||
patch_mysql2_adapter
|
patch_mysql2_adapter
|
||||||
create_db
|
create_db
|
||||||
|
@ -33,12 +18,30 @@ module MySQL2Helper
|
||||||
ActiveRecord::Base.connection
|
ActiveRecord::Base.connection
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def active_record_mysql2_teardown
|
||||||
|
ActiveRecord::Base.connection.drop_database default_config['database']
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def default_config
|
||||||
|
db_config['mysql2']
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_db
|
||||||
|
establish_connection(default_config.merge("database" => nil))
|
||||||
|
|
||||||
|
ActiveRecord::Base.connection.drop_database default_config['database'] rescue nil
|
||||||
|
ActiveRecord::Base.connection.create_database default_config['database']
|
||||||
|
end
|
||||||
|
|
||||||
|
def establish_connection(config = default_config)
|
||||||
|
ActiveRecord::Base.establish_connection config
|
||||||
|
end
|
||||||
|
|
||||||
def patch_mysql2_adapter
|
def patch_mysql2_adapter
|
||||||
# remove DEFAULT NULL from column definition, which is an error on primary keys in MySQL 5.7.3+
|
# remove DEFAULT NULL from column definition, which is an error on primary keys in MySQL 5.7.3+
|
||||||
ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
|
ActiveRecord::ConnectionAdapters::Mysql2Adapter::NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |c|
|
|
||||||
c.include MySQL2Helper
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,36 +1,37 @@
|
||||||
require 'support/active_record/database_setup'
|
require 'support/active_record/database_setup'
|
||||||
require 'support/active_record/schema_setup'
|
require 'support/active_record/schema_setup'
|
||||||
|
|
||||||
module MySQLHelper
|
class MySQLHelper
|
||||||
puts "Active Record #{ActiveRecord::VERSION::STRING}, mysql"
|
puts "Active Record #{ActiveRecord::VERSION::STRING}, mysql"
|
||||||
|
|
||||||
# require 'logger'
|
# require 'logger'
|
||||||
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
||||||
|
|
||||||
|
def active_record_mysql_setup
|
||||||
|
patch_mysql_adapter
|
||||||
|
create_db
|
||||||
|
active_record_load_schema
|
||||||
|
end
|
||||||
|
|
||||||
|
def active_record_mysql_connection
|
||||||
|
ActiveRecord::Base.connection
|
||||||
|
end
|
||||||
|
|
||||||
|
def active_record_mysql_teardown
|
||||||
|
ActiveRecord::Base.connection.drop_database default_config['database']
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
def default_config
|
def default_config
|
||||||
db_config['mysql']
|
db_config['mysql']
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_db
|
def create_db
|
||||||
establish_connection(default_config.merge(:database => nil))
|
ActiveRecord::Base.establish_connection default_config.merge("database" => nil)
|
||||||
|
|
||||||
ActiveRecord::Base.connection.drop_database default_config['database'] rescue nil
|
ActiveRecord::Base.connection.drop_database default_config['database'] rescue nil
|
||||||
ActiveRecord::Base.connection.create_database default_config['database']
|
ActiveRecord::Base.connection.create_database default_config['database']
|
||||||
end
|
ActiveRecord::Base.establish_connection default_config
|
||||||
|
|
||||||
def establish_connection(config = default_config)
|
|
||||||
ActiveRecord::Base.establish_connection config
|
|
||||||
end
|
|
||||||
|
|
||||||
def active_record_mysql_setup
|
|
||||||
patch_mysql_adapter
|
|
||||||
create_db
|
|
||||||
establish_connection
|
|
||||||
active_record_load_schema
|
|
||||||
end
|
|
||||||
|
|
||||||
def active_record_mysql_connection
|
|
||||||
ActiveRecord::Base.connection
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def patch_mysql_adapter
|
def patch_mysql_adapter
|
||||||
|
@ -39,6 +40,3 @@ module MySQLHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |c|
|
|
||||||
c.include MySQLHelper
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,31 +1,11 @@
|
||||||
require 'support/active_record/database_setup'
|
require 'support/active_record/database_setup'
|
||||||
require 'support/active_record/schema_setup'
|
require 'support/active_record/schema_setup'
|
||||||
|
|
||||||
module PostgreSQLHelper
|
class PostgreSQLHelper
|
||||||
puts "Active Record #{ActiveRecord::VERSION::STRING}, pg"
|
puts "Active Record #{ActiveRecord::VERSION::STRING}, pg"
|
||||||
|
|
||||||
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
||||||
|
|
||||||
def default_config
|
|
||||||
db_config['postgres']
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_db
|
|
||||||
@encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
|
|
||||||
begin
|
|
||||||
establish_connection(default_config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
|
|
||||||
ActiveRecord::Base.connection.drop_database(default_config['database']) rescue nil
|
|
||||||
ActiveRecord::Base.connection.create_database(default_config['database'], default_config.merge('encoding' => @encoding))
|
|
||||||
rescue Exception => e
|
|
||||||
$stderr.puts e, *(e.backtrace)
|
|
||||||
$stderr.puts "Couldn't create database for #{default_config.inspect}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def establish_connection(config = default_config)
|
|
||||||
ActiveRecord::Base.establish_connection(config)
|
|
||||||
end
|
|
||||||
|
|
||||||
def active_record_pg_setup
|
def active_record_pg_setup
|
||||||
create_db
|
create_db
|
||||||
establish_connection
|
establish_connection
|
||||||
|
@ -33,16 +13,33 @@ module PostgreSQLHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def active_record_pg_migrate
|
def active_record_pg_migrate
|
||||||
create_db
|
|
||||||
establish_connection
|
|
||||||
ActiveRecord::Migrator.migrate 'spec/support/active_record/migrations'
|
ActiveRecord::Migrator.migrate 'spec/support/active_record/migrations'
|
||||||
end
|
end
|
||||||
|
|
||||||
def active_record_pg_connection
|
def active_record_pg_connection
|
||||||
ActiveRecord::Base.connection
|
ActiveRecord::Base.connection
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def active_record_pg_teardown
|
||||||
|
ActiveRecord::Base.connection.execute "DROP TABLE users, agents;"
|
||||||
|
rescue ActiveRecord::StatementInvalid
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def default_config
|
||||||
|
db_config['postgres']
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_db
|
||||||
|
@encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
|
||||||
|
establish_connection(default_config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
|
||||||
|
ActiveRecord::Base.connection.create_database(default_config['database'], default_config.merge('encoding' => @encoding))
|
||||||
|
rescue ActiveRecord::StatementInvalid
|
||||||
|
end
|
||||||
|
|
||||||
|
def establish_connection(config = default_config)
|
||||||
|
ActiveRecord::Base.establish_connection(config)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |c|
|
|
||||||
c.include PostgreSQLHelper
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
def active_record_load_schema
|
def active_record_load_schema
|
||||||
ActiveRecord::Schema.define do
|
ActiveRecord::Migration.suppress_messages do
|
||||||
create_table :users, :force => true do |t|
|
ActiveRecord::Schema.define do
|
||||||
t.integer :name
|
create_table :users, :force => true do |t|
|
||||||
end
|
t.integer :name
|
||||||
|
end
|
||||||
|
|
||||||
create_table :agents, :id => false, :force => true do |t|
|
create_table :agents, :id => false, :force => true do |t|
|
||||||
t.integer :name
|
t.integer :name
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,29 +1,11 @@
|
||||||
require 'support/active_record/database_setup'
|
require 'support/active_record/database_setup'
|
||||||
require 'support/active_record/schema_setup'
|
require 'support/active_record/schema_setup'
|
||||||
|
|
||||||
module SQLite3Helper
|
class SQLite3Helper
|
||||||
puts "Active Record #{ActiveRecord::VERSION::STRING}, sqlite3"
|
puts "Active Record #{ActiveRecord::VERSION::STRING}, sqlite3"
|
||||||
|
|
||||||
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
||||||
|
|
||||||
def default_config
|
|
||||||
db_config['sqlite3']
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_db
|
|
||||||
@encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
|
|
||||||
begin
|
|
||||||
establish_connection(default_config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
|
|
||||||
rescue Exception => e
|
|
||||||
$stderr.puts e, *(e.backtrace)
|
|
||||||
$stderr.puts "Couldn't create database for #{default_config.inspect}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def establish_connection(config = default_config)
|
|
||||||
ActiveRecord::Base.establish_connection(config)
|
|
||||||
end
|
|
||||||
|
|
||||||
def active_record_sqlite3_setup
|
def active_record_sqlite3_setup
|
||||||
create_db
|
create_db
|
||||||
establish_connection
|
establish_connection
|
||||||
|
@ -33,8 +15,25 @@ module SQLite3Helper
|
||||||
def active_record_sqlite3_connection
|
def active_record_sqlite3_connection
|
||||||
ActiveRecord::Base.connection
|
ActiveRecord::Base.connection
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def active_record_sqlite3_teardown
|
||||||
|
ActiveRecord::Base.connection.truncate_table('users')
|
||||||
|
ActiveRecord::Base.connection.truncate_table('agents')
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def default_config
|
||||||
|
db_config['sqlite3']
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_db
|
||||||
|
@encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
|
||||||
|
establish_connection(default_config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
|
||||||
|
end
|
||||||
|
|
||||||
|
def establish_connection(config = default_config)
|
||||||
|
ActiveRecord::Base.establish_connection(config)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |c|
|
|
||||||
c.include SQLite3Helper
|
|
||||||
end
|
|
||||||
|
|
|
@ -1,28 +1,9 @@
|
||||||
require 'support/active_record/database_setup'
|
require 'support/active_record/database_setup'
|
||||||
require 'support/data_mapper/schema_setup'
|
require 'support/data_mapper/schema_setup'
|
||||||
|
|
||||||
module DataMapperSQLite3Helper
|
class DataMapperSQLite3Helper
|
||||||
|
|
||||||
puts "DataMapper #{DataMapper::VERSION}, sqlite3"
|
puts "DataMapper #{DataMapper::VERSION}, sqlite3"
|
||||||
|
|
||||||
def default_config
|
|
||||||
db_config['sqlite3']
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_db
|
|
||||||
@encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
|
|
||||||
begin
|
|
||||||
establish_connection(default_config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
|
|
||||||
rescue Exception => e
|
|
||||||
$stderr.puts e, *(e.backtrace)
|
|
||||||
$stderr.puts "Couldn't create database for #{default_config.inspect}"
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def establish_connection(config = default_config)
|
|
||||||
DataMapper.setup(:default, config)
|
|
||||||
end
|
|
||||||
|
|
||||||
def data_mapper_sqlite3_setup
|
def data_mapper_sqlite3_setup
|
||||||
create_db
|
create_db
|
||||||
establish_connection
|
establish_connection
|
||||||
|
@ -32,8 +13,24 @@ module DataMapperSQLite3Helper
|
||||||
def data_mapper_sqlite3_connection
|
def data_mapper_sqlite3_connection
|
||||||
DataMapper.repository.adapter
|
DataMapper.repository.adapter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def data_mapper_sqlite3_teardown
|
||||||
|
DataMapper.repository.adapter.truncate_tables(DataMapper::Model.descendants.map { |d| d.storage_names[:default] || d.name.underscore })
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def default_config
|
||||||
|
db_config['sqlite3']
|
||||||
|
end
|
||||||
|
|
||||||
|
def create_db
|
||||||
|
@encoding = default_config['encoding'] || ENV['CHARSET'] || 'utf8'
|
||||||
|
establish_connection(default_config.merge('database' => 'sqlite3', 'schema_search_path' => 'public'))
|
||||||
|
end
|
||||||
|
|
||||||
|
def establish_connection(config = default_config)
|
||||||
|
DataMapper.setup(:default, config)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
RSpec.configure do |c|
|
|
||||||
c.include(DataMapperSQLite3Helper)
|
|
||||||
end
|
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
class SequelHelper < Struct.new(:config)
|
||||||
|
def setup
|
||||||
|
if config[:url] == "postgres:///" || config[:url] == "sqlite:///"
|
||||||
|
::Sequel.connect(config[:url], config[:connection_options].merge('database' => 'postgres')) do |db|
|
||||||
|
begin
|
||||||
|
db.execute "CREATE DATABASE #{database}"
|
||||||
|
rescue ::Sequel::DatabaseError
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
|
::Sequel.connect(config[:url], config[:connection_options].merge('database' => nil)) do |db|
|
||||||
|
db.execute "DROP DATABASE IF EXISTS #{database}"
|
||||||
|
db.execute "CREATE DATABASE #{database}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def teardown
|
||||||
|
if config[:url] == "postgres:///" || config[:url] == "sqlite:///"
|
||||||
|
::Sequel.connect(config[:url], config[:connection_options]) do |db|
|
||||||
|
db.execute "DROP TABLE IF EXISTS precious_stones"
|
||||||
|
db.execute "DROP TABLE IF EXISTS replaceable_trifles"
|
||||||
|
db.execute "DROP TABLE IF EXISTS worthless_junk"
|
||||||
|
end
|
||||||
|
else
|
||||||
|
::Sequel.connect(config[:url], config[:connection_options].merge('database' => nil)) do |db|
|
||||||
|
db.execute "DROP DATABASE IF EXISTS #{database}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
rescue SQLite3::BusyException
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def database
|
||||||
|
config[:connection_options]['database']
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue