database_cleaner 1.0.0.RC1 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile.lock +6 -0
- data/History.txt +11 -3
- data/README.markdown +39 -3
- data/VERSION.yml +2 -2
- data/examples/Gemfile +2 -0
- data/examples/Gemfile.lock +6 -0
- data/examples/config/redis.yml +8 -0
- data/examples/features/support/env.rb +8 -1
- data/examples/lib/mongoid_models.rb +1 -1
- data/examples/lib/ohm_models.rb +43 -0
- data/examples/lib/redis_models.rb +65 -0
- data/features/cleaning.feature +11 -9
- data/features/cleaning_default_strategy.feature +2 -0
- data/features/cleaning_multiple_orms.feature +19 -0
- data/features/step_definitions/database_cleaner_steps.rb +3 -2
- data/features/step_definitions/ohm_steps.rb +31 -0
- data/features/step_definitions/redis_steps.rb +31 -0
- data/lib/database_cleaner/active_record/base.rb +1 -7
- data/lib/database_cleaner/active_record/transaction.rb +4 -0
- data/lib/database_cleaner/base.rb +19 -3
- data/lib/database_cleaner/configuration.rb +5 -1
- data/lib/database_cleaner/mongoid/truncation.rb +2 -2
- data/lib/database_cleaner/moped/base.rb +35 -0
- data/lib/database_cleaner/moped/truncation.rb +4 -24
- data/lib/database_cleaner/moped/truncation_base.rb +34 -0
- data/lib/database_cleaner/ohm/truncation.rb +15 -0
- data/lib/database_cleaner/redis/base.rb +31 -0
- data/lib/database_cleaner/redis/truncation.rb +26 -0
- data/spec/database_cleaner/active_record/base_spec.rb +2 -19
- data/spec/database_cleaner/active_record/transaction_spec.rb +2 -0
- data/spec/database_cleaner/base_spec.rb +73 -7
- data/spec/database_cleaner/configuration_spec.rb +15 -1
- data/spec/database_cleaner/moped/moped_examples.rb +26 -0
- data/spec/database_cleaner/moped/truncation_spec.rb +75 -0
- data/spec/database_cleaner/ohm/truncation_spec.rb +70 -0
- data/spec/database_cleaner/redis/base_spec.rb +32 -0
- data/spec/database_cleaner/redis/truncation_spec.rb +63 -0
- metadata +20 -5
@@ -0,0 +1,31 @@
|
|
1
|
+
Given /^I have setup database cleaner to clean multiple databases using redis$/ do
|
2
|
+
#DatabaseCleaner
|
3
|
+
# require "#{File.dirname(__FILE__)}/../../../lib/redis_models"
|
4
|
+
#
|
5
|
+
# DatabaseCleaner[:redis, {:connection => ENV['REDIS_URL_ONE']} ].strategy = :truncation
|
6
|
+
# DatabaseCleaner[:redis, {:connection => ENV['REDIS_URL_TWO']} ].strategy = :truncation
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I create a widget using redis$/ do
|
10
|
+
RedisWidget.create!
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^I should see ([\d]+) widget using redis$/ do |widget_count|
|
14
|
+
RedisWidget.count.should == widget_count.to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I create a widget in one db using redis$/ do
|
18
|
+
RedisWidgetUsingDatabaseOne.create!
|
19
|
+
end
|
20
|
+
|
21
|
+
When /^I create a widget in another db using redis$/ do
|
22
|
+
RedisWidgetUsingDatabaseTwo.create!
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^I should see ([\d]+) widget in one db using redis$/ do |widget_count|
|
26
|
+
RedisWidgetUsingDatabaseOne.count.should == widget_count.to_i
|
27
|
+
end
|
28
|
+
|
29
|
+
Then /^I should see ([\d]+) widget in another db using redis$/ do |widget_count|
|
30
|
+
RedisWidgetUsingDatabaseTwo.count.should == widget_count.to_i
|
31
|
+
end
|
@@ -38,10 +38,6 @@ module DatabaseCleaner
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def create_connection_class
|
42
|
-
Class.new(::ActiveRecord::Base)
|
43
|
-
end
|
44
|
-
|
45
41
|
def connection_class
|
46
42
|
@connection_class ||= if @db && [email protected]_a?(Symbol)
|
47
43
|
@db
|
@@ -63,9 +59,7 @@ module DatabaseCleaner
|
|
63
59
|
end
|
64
60
|
|
65
61
|
def establish_connection
|
66
|
-
|
67
|
-
strategy_class.send :establish_connection, connection_hash
|
68
|
-
strategy_class
|
62
|
+
::ActiveRecord::Base.establish_connection(connection_hash)
|
69
63
|
end
|
70
64
|
|
71
65
|
end
|
@@ -7,6 +7,10 @@ module DatabaseCleaner::ActiveRecord
|
|
7
7
|
include ::DatabaseCleaner::Generic::Transaction
|
8
8
|
|
9
9
|
def start
|
10
|
+
# Hack to make sure that the connection is properly setup for
|
11
|
+
# the clean code.
|
12
|
+
connection_class.connection.transaction{ }
|
13
|
+
|
10
14
|
if connection_maintains_transaction_count?
|
11
15
|
if connection_class.connection.respond_to?(:increment_open_transactions)
|
12
16
|
connection_class.connection.increment_open_transactions
|
@@ -36,12 +36,22 @@ module DatabaseCleaner
|
|
36
36
|
|
37
37
|
def clean_with(*args)
|
38
38
|
strategy = create_strategy(*args)
|
39
|
+
set_strategy_db strategy, self.db
|
40
|
+
|
39
41
|
strategy.clean
|
40
42
|
strategy
|
41
43
|
end
|
42
44
|
|
43
45
|
alias clean_with! clean_with
|
44
46
|
|
47
|
+
def set_strategy_db(strategy, desired_db)
|
48
|
+
if strategy.respond_to? :db=
|
49
|
+
strategy.db = desired_db
|
50
|
+
elsif desired_db != :default
|
51
|
+
raise ArgumentError, "You must provide a strategy object that supports non default databases when you specify a database"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
45
55
|
def strategy=(args)
|
46
56
|
strategy, *strategy_args = args
|
47
57
|
if strategy.is_a?(Symbol)
|
@@ -52,7 +62,7 @@ module DatabaseCleaner
|
|
52
62
|
raise ArgumentError, "You must provide a strategy object, or a symbol for a known strategy along with initialization params."
|
53
63
|
end
|
54
64
|
|
55
|
-
|
65
|
+
set_strategy_db @strategy, self.db
|
56
66
|
|
57
67
|
@strategy
|
58
68
|
end
|
@@ -120,8 +130,14 @@ module DatabaseCleaner
|
|
120
130
|
:couch_potato
|
121
131
|
elsif defined? ::Sequel
|
122
132
|
:sequel
|
133
|
+
elsif defined? ::Moped
|
134
|
+
:moped
|
135
|
+
elsif defined? ::Ohm
|
136
|
+
:ohm
|
137
|
+
elsif defined? ::Redis
|
138
|
+
:redis
|
123
139
|
else
|
124
|
-
raise NoORMDetected, "No known ORM was detected! Is ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, or CouchPotato loaded?"
|
140
|
+
raise NoORMDetected, "No known ORM was detected! Is ActiveRecord, DataMapper, Sequel, MongoMapper, Mongoid, Moped, or CouchPotato, Redis or Ohm loaded?"
|
125
141
|
end
|
126
142
|
end
|
127
143
|
end
|
@@ -130,7 +146,7 @@ module DatabaseCleaner
|
|
130
146
|
case orm
|
131
147
|
when :active_record, :data_mapper, :sequel
|
132
148
|
self.strategy = :transaction
|
133
|
-
when :mongo_mapper, :mongoid, :couch_potato
|
149
|
+
when :mongo_mapper, :mongoid, :couch_potato, :moped, :ohm, :redis
|
134
150
|
self.strategy = :truncation
|
135
151
|
end
|
136
152
|
end
|
@@ -11,7 +11,7 @@ module DatabaseCleaner
|
|
11
11
|
# ghetto ordered hash.. maintains 1.8 compat and old API
|
12
12
|
@connections ||= []
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def [](orm,opts = {})
|
16
16
|
raise NoORMDetected unless orm
|
17
17
|
init_cleaners
|
@@ -113,6 +113,10 @@ module DatabaseCleaner
|
|
113
113
|
DatabaseCleaner::CouchPotato
|
114
114
|
when :sequel
|
115
115
|
DatabaseCleaner::Sequel
|
116
|
+
when :ohm
|
117
|
+
DatabaseCleaner::Ohm
|
118
|
+
when :redis
|
119
|
+
DatabaseCleaner::Redis
|
116
120
|
end
|
117
121
|
end
|
118
122
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'database_cleaner/mongoid/base'
|
2
2
|
require 'database_cleaner/generic/truncation'
|
3
3
|
require 'database_cleaner/mongo/truncation_mixin'
|
4
|
-
require 'database_cleaner/moped/
|
4
|
+
require 'database_cleaner/moped/truncation_base'
|
5
5
|
require 'mongoid/version'
|
6
6
|
|
7
7
|
module DatabaseCleaner
|
@@ -22,7 +22,7 @@ module DatabaseCleaner
|
|
22
22
|
|
23
23
|
else
|
24
24
|
|
25
|
-
include ::DatabaseCleaner::Moped::
|
25
|
+
include ::DatabaseCleaner::Moped::TruncationBase
|
26
26
|
|
27
27
|
private
|
28
28
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'database_cleaner/generic/base'
|
2
|
+
|
3
|
+
module DatabaseCleaner
|
4
|
+
module Moped
|
5
|
+
def self.available_strategies
|
6
|
+
%w[truncation]
|
7
|
+
end
|
8
|
+
|
9
|
+
module Base
|
10
|
+
include ::DatabaseCleaner::Generic::Base
|
11
|
+
|
12
|
+
def db=(desired_db)
|
13
|
+
@db = desired_db
|
14
|
+
end
|
15
|
+
|
16
|
+
def db
|
17
|
+
@db || :default
|
18
|
+
end
|
19
|
+
|
20
|
+
def host_port=(desired_host)
|
21
|
+
@host = desired_host
|
22
|
+
end
|
23
|
+
|
24
|
+
def host
|
25
|
+
@host || '127.0.0.1:27017'
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def session
|
31
|
+
::Moped::Session.new([host], database: db)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,29 +1,9 @@
|
|
1
|
+
require 'database_cleaner/moped/truncation_base'
|
2
|
+
|
1
3
|
module DatabaseCleaner
|
2
4
|
module Moped
|
3
|
-
|
4
|
-
|
5
|
-
def clean
|
6
|
-
if @only
|
7
|
-
collections.each { |c| session[c].find.remove_all if @only.include?(c) }
|
8
|
-
else
|
9
|
-
collections.each { |c| session[c].find.remove_all unless @tables_to_exclude.include?(c) }
|
10
|
-
end
|
11
|
-
true
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def collections
|
17
|
-
if db != :default
|
18
|
-
session.use(db)
|
19
|
-
end
|
20
|
-
|
21
|
-
session['system.namespaces'].find(:name => { '$not' => /system|\$/ }).to_a.map do |collection|
|
22
|
-
_, name = collection['name'].split('.', 2)
|
23
|
-
name
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
5
|
+
class Truncation
|
6
|
+
include ::DatabaseCleaner::Moped::TruncationBase
|
27
7
|
end
|
28
8
|
end
|
29
9
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'database_cleaner/moped/base'
|
2
|
+
require 'database_cleaner/generic/truncation'
|
3
|
+
|
4
|
+
module DatabaseCleaner
|
5
|
+
module Moped
|
6
|
+
module TruncationBase
|
7
|
+
include ::DatabaseCleaner::Moped::Base
|
8
|
+
include ::DatabaseCleaner::Generic::Truncation
|
9
|
+
|
10
|
+
def clean
|
11
|
+
if @only
|
12
|
+
collections.each { |c| session[c].find.remove_all if @only.include?(c) }
|
13
|
+
else
|
14
|
+
collections.each { |c| session[c].find.remove_all unless @tables_to_exclude.include?(c) }
|
15
|
+
end
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def collections
|
22
|
+
if db != :default
|
23
|
+
session.use(db)
|
24
|
+
end
|
25
|
+
|
26
|
+
session['system.namespaces'].find(:name => { '$not' => /system|\$/ }).to_a.map do |collection|
|
27
|
+
_, name = collection['name'].split('.', 2)
|
28
|
+
name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'database_cleaner/generic/base'
|
2
|
+
|
3
|
+
module DatabaseCleaner
|
4
|
+
module Redis
|
5
|
+
def self.available_strategies
|
6
|
+
%w{truncation}
|
7
|
+
end
|
8
|
+
|
9
|
+
module Base
|
10
|
+
include ::DatabaseCleaner::Generic::Base
|
11
|
+
|
12
|
+
def db=(desired_db)
|
13
|
+
@db = desired_db
|
14
|
+
end
|
15
|
+
|
16
|
+
def db
|
17
|
+
@db || :default
|
18
|
+
end
|
19
|
+
|
20
|
+
alias url db
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def connection
|
25
|
+
@connection ||= url == :default ? ::Redis.connect : ::Redis.connect(:url => url)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'database_cleaner/redis/base'
|
2
|
+
require 'database_cleaner/generic/truncation'
|
3
|
+
|
4
|
+
module DatabaseCleaner
|
5
|
+
module Redis
|
6
|
+
class Truncation
|
7
|
+
include ::DatabaseCleaner::Redis::Base
|
8
|
+
include ::DatabaseCleaner::Generic::Truncation
|
9
|
+
|
10
|
+
def clean
|
11
|
+
if @only
|
12
|
+
@only.each do |term|
|
13
|
+
connection.keys(term).each { |k| connection.del k }
|
14
|
+
end
|
15
|
+
elsif @tables_to_exclude
|
16
|
+
keys_except = []
|
17
|
+
@tables_to_exclude.each { |term| keys_except += connection.keys(term) }
|
18
|
+
connection.keys.each { |k| connection.del(k) unless keys_except.include?(k) }
|
19
|
+
else
|
20
|
+
connection.flushdb
|
21
|
+
end
|
22
|
+
connection.quit unless url == :default
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -119,16 +119,6 @@ my_db:
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
-
describe "create_connection_class" do
|
123
|
-
it "should return a class" do
|
124
|
-
subject.create_connection_class.should be_a(Class)
|
125
|
-
end
|
126
|
-
|
127
|
-
it "should return a class extending ::ActiveRecord::Base" do
|
128
|
-
subject.create_connection_class.ancestors.should include(::ActiveRecord::Base)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
122
|
describe "connection_class" do
|
133
123
|
it { expect { subject.connection_class }.to_not raise_error }
|
134
124
|
it "should default to ActiveRecord::Base" do
|
@@ -158,16 +148,9 @@ my_db:
|
|
158
148
|
before { ::ActiveRecord::Base.stub!(:respond_to?).and_return(false) }
|
159
149
|
before { subject.stub(:connection_hash).and_return(hash) }
|
160
150
|
|
161
|
-
it "
|
162
|
-
|
163
|
-
subject.connection_class
|
164
|
-
end
|
165
|
-
|
166
|
-
it "should configure the class from create_connection_class if connection_hash is set" do
|
167
|
-
strategy_class = mock('strategy_class')
|
168
|
-
strategy_class.should_receive(:establish_connection).with(hash)
|
151
|
+
it "establish a connection using ActiveRecord::Base" do
|
152
|
+
::ActiveRecord::Base.should_receive(:establish_connection).with(hash)
|
169
153
|
|
170
|
-
subject.should_receive(:create_connection_class).and_return(strategy_class)
|
171
154
|
subject.connection_class
|
172
155
|
end
|
173
156
|
end
|
@@ -15,6 +15,7 @@ module DatabaseCleaner
|
|
15
15
|
[:begin_transaction, :begin_db_transaction].each do |begin_transaction_method|
|
16
16
|
context "using #{begin_transaction_method}" do
|
17
17
|
before do
|
18
|
+
connection.stub(:transaction)
|
18
19
|
connection.stub(begin_transaction_method)
|
19
20
|
connection.stub(:respond_to?).with(:begin_transaction).and_return(:begin_transaction == begin_transaction_method)
|
20
21
|
end
|
@@ -35,6 +36,7 @@ module DatabaseCleaner
|
|
35
36
|
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(true)
|
36
37
|
connection.stub(:increment_open_transactions)
|
37
38
|
connection.should_receive(begin_transaction_method)
|
39
|
+
connection.should_receive(:transaction)
|
38
40
|
Transaction.new.start
|
39
41
|
end
|
40
42
|
end
|
@@ -18,6 +18,9 @@ module DatabaseCleaner
|
|
18
18
|
Temp_MO = ::Mongoid if defined?(::Mongoid) and not defined?(Temp_MO)
|
19
19
|
Temp_CP = ::CouchPotato if defined?(::CouchPotato) and not defined?(Temp_CP)
|
20
20
|
Temp_SQ = ::Sequel if defined?(::Sequel) and not defined?(Temp_SQ)
|
21
|
+
Temp_MP = ::Moped if defined?(::Moped) and not defined?(Temp_MP)
|
22
|
+
Temp_RS = ::Redis if defined?(::Redis) and not defined?(Temp_RS)
|
23
|
+
Temp_OH = ::Ohm if defined?(::Ohm) and not defined?(Temp_OH)
|
21
24
|
end
|
22
25
|
|
23
26
|
#Remove all ORM mocks and restore from cache
|
@@ -28,6 +31,9 @@ module DatabaseCleaner
|
|
28
31
|
Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
|
29
32
|
Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
|
30
33
|
Object.send(:remove_const, 'Sequel') if defined?(::Sequel)
|
34
|
+
Object.send(:remove_const, 'Moped') if defined?(::Moped)
|
35
|
+
Object.send(:remove_const, 'Ohm') if defined?(::Ohm)
|
36
|
+
Object.send(:remove_const, 'Redis') if defined?(::Redis)
|
31
37
|
|
32
38
|
|
33
39
|
# Restore ORMs
|
@@ -36,6 +42,9 @@ module DatabaseCleaner
|
|
36
42
|
::MongoMapper = Temp_MM if defined? Temp_MM
|
37
43
|
::Mongoid = Temp_MO if defined? Temp_MO
|
38
44
|
::CouchPotato = Temp_CP if defined? Temp_CP
|
45
|
+
::Moped = Temp_MP if defined? Temp_MP
|
46
|
+
::Ohm = Temp_OH if defined? Temp_OH
|
47
|
+
::Redis = Temp_RS if defined? Temp_RS
|
39
48
|
end
|
40
49
|
|
41
50
|
#reset the orm mocks
|
@@ -46,8 +55,11 @@ module DatabaseCleaner
|
|
46
55
|
Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
|
47
56
|
Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
|
48
57
|
Object.send(:remove_const, 'Sequel') if defined?(::Sequel)
|
58
|
+
Object.send(:remove_const, 'Moped') if defined?(::Moped)
|
59
|
+
Object.send(:remove_const, 'Ohm') if defined?(::Ohm)
|
60
|
+
Object.send(:remove_const, 'Redis') if defined?(::Redis)
|
49
61
|
end
|
50
|
-
|
62
|
+
|
51
63
|
let(:cleaner) { DatabaseCleaner::Base.new :autodetect }
|
52
64
|
|
53
65
|
it "should raise an error when no ORM is detected" do
|
@@ -61,6 +73,9 @@ module DatabaseCleaner
|
|
61
73
|
Object.const_set('Mongoid', 'Mongoid mock')
|
62
74
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
63
75
|
Object.const_set('Sequel', 'Sequel mock')
|
76
|
+
Object.const_set('Moped', 'Moped mock')
|
77
|
+
Object.const_set('Ohm', 'Ohm mock')
|
78
|
+
Object.const_set('Redis', 'Redis mock')
|
64
79
|
|
65
80
|
cleaner.orm.should == :active_record
|
66
81
|
cleaner.should be_auto_detected
|
@@ -72,6 +87,9 @@ module DatabaseCleaner
|
|
72
87
|
Object.const_set('Mongoid', 'Mongoid mock')
|
73
88
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
74
89
|
Object.const_set('Sequel', 'Sequel mock')
|
90
|
+
Object.const_set('Moped', 'Moped mock')
|
91
|
+
Object.const_set('Ohm', 'Ohm mock')
|
92
|
+
Object.const_set('Redis', 'Redis mock')
|
75
93
|
|
76
94
|
cleaner.orm.should == :data_mapper
|
77
95
|
cleaner.should be_auto_detected
|
@@ -82,6 +100,9 @@ module DatabaseCleaner
|
|
82
100
|
Object.const_set('Mongoid', 'Mongoid mock')
|
83
101
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
84
102
|
Object.const_set('Sequel', 'Sequel mock')
|
103
|
+
Object.const_set('Moped', 'Moped mock')
|
104
|
+
Object.const_set('Ohm', 'Ohm mock')
|
105
|
+
Object.const_set('Redis', 'Redis mock')
|
85
106
|
|
86
107
|
cleaner.orm.should == :mongo_mapper
|
87
108
|
cleaner.should be_auto_detected
|
@@ -91,6 +112,9 @@ module DatabaseCleaner
|
|
91
112
|
Object.const_set('Mongoid', 'Mongoid mock')
|
92
113
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
93
114
|
Object.const_set('Sequel', 'Sequel mock')
|
115
|
+
Object.const_set('Moped', 'Moped mock')
|
116
|
+
Object.const_set('Ohm', 'Ohm mock')
|
117
|
+
Object.const_set('Redis', 'Redis mock')
|
94
118
|
|
95
119
|
cleaner.orm.should == :mongoid
|
96
120
|
cleaner.should be_auto_detected
|
@@ -99,17 +123,45 @@ module DatabaseCleaner
|
|
99
123
|
it "should detect CouchPotato fifth" do
|
100
124
|
Object.const_set('CouchPotato', 'Couching mock potatos')
|
101
125
|
Object.const_set('Sequel', 'Sequel mock')
|
126
|
+
Object.const_set('Moped', 'Moped mock')
|
127
|
+
Object.const_set('Ohm', 'Ohm mock')
|
128
|
+
Object.const_set('Redis', 'Redis mock')
|
102
129
|
|
103
130
|
cleaner.orm.should == :couch_potato
|
104
131
|
cleaner.should be_auto_detected
|
105
132
|
end
|
106
|
-
|
107
|
-
it "should detect Sequel
|
133
|
+
|
134
|
+
it "should detect Sequel sixth" do
|
108
135
|
Object.const_set('Sequel', 'Sequel mock')
|
136
|
+
Object.const_set('Moped', 'Moped mock')
|
137
|
+
Object.const_set('Ohm', 'Ohm mock')
|
138
|
+
Object.const_set('Redis', 'Redis mock')
|
109
139
|
|
110
140
|
cleaner.orm.should == :sequel
|
111
141
|
cleaner.should be_auto_detected
|
112
142
|
end
|
143
|
+
|
144
|
+
it 'detects Ohm seventh' do
|
145
|
+
Object.const_set('Ohm', 'Ohm mock')
|
146
|
+
Object.const_set('Redis', 'Redis mock')
|
147
|
+
|
148
|
+
cleaner.orm.should == :ohm
|
149
|
+
cleaner.should be_auto_detected
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'detects Redis last' do
|
153
|
+
Object.const_set('Redis', 'Redis mock')
|
154
|
+
|
155
|
+
cleaner.orm.should == :redis
|
156
|
+
cleaner.should be_auto_detected
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'detects Moped seventh' do
|
160
|
+
Object.const_set('Moped', 'Moped mock')
|
161
|
+
|
162
|
+
cleaner.orm.should == :moped
|
163
|
+
cleaner.should be_auto_detected
|
164
|
+
end
|
113
165
|
end
|
114
166
|
|
115
167
|
describe "orm_module" do
|
@@ -160,7 +212,7 @@ module DatabaseCleaner
|
|
160
212
|
cleaner = ::DatabaseCleaner::Base.new "mongoid"
|
161
213
|
cleaner.orm.should == :mongoid
|
162
214
|
end
|
163
|
-
|
215
|
+
|
164
216
|
it "is autodetected if orm is not provided" do
|
165
217
|
cleaner = ::DatabaseCleaner::Base.new
|
166
218
|
cleaner.should be_auto_detected
|
@@ -317,7 +369,7 @@ module DatabaseCleaner
|
|
317
369
|
|
318
370
|
it "should attempt to set strategy db" do
|
319
371
|
subject.stub(:db).and_return(:my_db)
|
320
|
-
subject.should_receive(:
|
372
|
+
subject.should_receive(:set_strategy_db).with(mock_strategy, :my_db)
|
321
373
|
subject.strategy = mock_strategy
|
322
374
|
end
|
323
375
|
|
@@ -330,8 +382,7 @@ module DatabaseCleaner
|
|
330
382
|
describe "strategy" do
|
331
383
|
subject { ::DatabaseCleaner::Base.new :a_orm }
|
332
384
|
|
333
|
-
it "returns a null strategy when strategy
|
334
|
-
subject.instance_values["@strategy"] = nil
|
385
|
+
it "returns a null strategy when strategy is not set and undetectable" do
|
335
386
|
subject.strategy.should == DatabaseCleaner::NullStrategy
|
336
387
|
end
|
337
388
|
|
@@ -487,6 +538,21 @@ module DatabaseCleaner
|
|
487
538
|
cleaner = DatabaseCleaner::Base.new(:couch_potato)
|
488
539
|
cleaner.strategy.should be_instance_of DatabaseCleaner::CouchPotato::Truncation
|
489
540
|
end
|
541
|
+
|
542
|
+
it 'sets strategy to :truncation for Moped' do
|
543
|
+
cleaner = DatabaseCleaner::Base.new(:moped)
|
544
|
+
cleaner.strategy.should be_instance_of DatabaseCleaner::Moped::Truncation
|
545
|
+
end
|
546
|
+
|
547
|
+
it 'sets strategy to :truncation for Ohm' do
|
548
|
+
cleaner = DatabaseCleaner::Base.new(:ohm)
|
549
|
+
cleaner.strategy.should be_instance_of DatabaseCleaner::Ohm::Truncation
|
550
|
+
end
|
551
|
+
|
552
|
+
it 'sets strategy to :truncation for Redis' do
|
553
|
+
cleaner = DatabaseCleaner::Base.new(:redis)
|
554
|
+
cleaner.strategy.should be_instance_of DatabaseCleaner::Redis::Truncation
|
555
|
+
end
|
490
556
|
end
|
491
557
|
|
492
558
|
end
|