database_cleaner 1.6.2 → 1.7.0
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.
- checksums.yaml +5 -5
- data/Gemfile.lock +3 -3
- data/History.rdoc +23 -0
- data/README.markdown +24 -1
- data/VERSION.yml +2 -2
- data/lib/database_cleaner.rb +6 -2
- data/lib/database_cleaner/active_record/base.rb +1 -1
- data/lib/database_cleaner/active_record/deletion.rb +9 -7
- data/lib/database_cleaner/base.rb +2 -0
- data/lib/database_cleaner/safeguard.rb +72 -0
- metadata +6 -86
- data/examples/Gemfile +0 -1
- data/examples/Gemfile.lock +0 -1
- data/examples/config/database.yml.example +0 -8
- data/examples/config/redis.yml +0 -8
- data/examples/db/sqlite_databases_go_here +0 -0
- data/examples/features/example.feature +0 -11
- data/examples/features/example_multiple_db.feature +0 -23
- data/examples/features/example_multiple_orm.feature +0 -22
- data/examples/features/step_definitions/activerecord_steps.rb +0 -31
- data/examples/features/step_definitions/couchpotato_steps.rb +0 -31
- data/examples/features/step_definitions/datamapper_steps.rb +0 -37
- data/examples/features/step_definitions/mongoid_steps.rb +0 -23
- data/examples/features/step_definitions/mongomapper_steps.rb +0 -31
- data/examples/features/step_definitions/neo4j_steps.rb +0 -23
- data/examples/features/step_definitions/ohm_steps.rb +0 -31
- data/examples/features/step_definitions/redis_steps.rb +0 -31
- data/examples/features/step_definitions/translation_steps.rb +0 -55
- data/examples/features/support/env.rb +0 -61
- data/examples/lib/activerecord_models.rb +0 -41
- data/examples/lib/couchpotato_models.rb +0 -61
- data/examples/lib/datamapper_models.rb +0 -50
- data/examples/lib/mongoid_models.rb +0 -44
- data/examples/lib/mongomapper_models.rb +0 -51
- data/examples/lib/neo4j_models.rb +0 -17
- data/examples/lib/ohm_models.rb +0 -43
- data/examples/lib/redis_models.rb +0 -65
- data/examples/lib/sequel_models.rb +0 -9
- data/features/cleaning.feature +0 -30
- data/features/cleaning_default_strategy.feature +0 -23
- data/features/cleaning_multiple_dbs.feature +0 -22
- data/features/cleaning_multiple_orms.feature +0 -67
- data/features/step_definitions/database_cleaner_steps.rb +0 -33
- data/features/support/env.rb +0 -4
- data/features/support/feature_runner.rb +0 -39
- data/spec/database_cleaner/active_record/base_spec.rb +0 -188
- data/spec/database_cleaner/active_record/transaction_spec.rb +0 -176
- data/spec/database_cleaner/active_record/truncation/mysql2_spec.rb +0 -38
- data/spec/database_cleaner/active_record/truncation/mysql_spec.rb +0 -38
- data/spec/database_cleaner/active_record/truncation/postgresql_spec.rb +0 -75
- data/spec/database_cleaner/active_record/truncation/shared_fast_truncation.rb +0 -40
- data/spec/database_cleaner/active_record/truncation/sqlite3_spec.rb +0 -40
- data/spec/database_cleaner/active_record/truncation_spec.rb +0 -180
- data/spec/database_cleaner/base_spec.rb +0 -617
- data/spec/database_cleaner/configuration_spec.rb +0 -345
- data/spec/database_cleaner/couch_potato/truncation_spec.rb +0 -41
- data/spec/database_cleaner/data_mapper/base_spec.rb +0 -30
- data/spec/database_cleaner/data_mapper/transaction_spec.rb +0 -23
- data/spec/database_cleaner/data_mapper/truncation/sqlite3_spec.rb +0 -41
- data/spec/database_cleaner/data_mapper/truncation_spec.rb +0 -11
- data/spec/database_cleaner/generic/base_spec.rb +0 -61
- data/spec/database_cleaner/generic/truncation_spec.rb +0 -118
- data/spec/database_cleaner/mongo/mongo_examples.rb +0 -26
- data/spec/database_cleaner/mongo/truncation_spec.rb +0 -72
- data/spec/database_cleaner/mongo_mapper/base_spec.rb +0 -33
- data/spec/database_cleaner/mongo_mapper/mongo_examples.rb +0 -8
- data/spec/database_cleaner/mongo_mapper/truncation_spec.rb +0 -74
- data/spec/database_cleaner/moped/moped_examples.rb +0 -32
- data/spec/database_cleaner/moped/truncation_spec.rb +0 -80
- data/spec/database_cleaner/neo4j/base_spec.rb +0 -43
- data/spec/database_cleaner/neo4j/transaction_spec.rb +0 -25
- data/spec/database_cleaner/null_strategy_spec.rb +0 -28
- data/spec/database_cleaner/ohm/truncation_spec.rb +0 -70
- data/spec/database_cleaner/redis/base_spec.rb +0 -43
- data/spec/database_cleaner/redis/truncation_spec.rb +0 -63
- data/spec/database_cleaner/sequel/base_spec.rb +0 -32
- data/spec/database_cleaner/sequel/deletion_spec.rb +0 -58
- data/spec/database_cleaner/sequel/transaction_spec.rb +0 -21
- data/spec/database_cleaner/sequel/truncation/sqlite3_spec.rb +0 -0
- data/spec/database_cleaner/sequel/truncation_spec.rb +0 -182
- data/spec/database_cleaner/shared_strategy.rb +0 -15
- data/spec/rcov.opts +0 -1
- data/spec/spec_helper.rb +0 -21
- data/spec/support/active_record/database_setup.rb +0 -6
- data/spec/support/active_record/migrations/20150101010000_create_users.rb +0 -14
- data/spec/support/active_record/migrations/20150101020000_create_agents.rb +0 -14
- data/spec/support/active_record/mysql2_setup.rb +0 -39
- data/spec/support/active_record/mysql_setup.rb +0 -38
- data/spec/support/active_record/postgresql_setup.rb +0 -48
- data/spec/support/active_record/schema_setup.rb +0 -17
- data/spec/support/active_record/sqlite3_setup.rb +0 -40
- data/spec/support/data_mapper/schema_setup.rb +0 -15
- data/spec/support/data_mapper/sqlite3_setup.rb +0 -39
data/features/support/env.rb
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
class FeatureRunner
|
|
2
|
-
attr_accessor :orm
|
|
3
|
-
attr_accessor :another_orm
|
|
4
|
-
attr_accessor :multiple_databases
|
|
5
|
-
attr_accessor :strategy
|
|
6
|
-
attr_accessor :exit_status
|
|
7
|
-
attr_accessor :output
|
|
8
|
-
|
|
9
|
-
def strategy
|
|
10
|
-
@strategy || 'truncation'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def go(feature)
|
|
14
|
-
full_dir ||= File.expand_path(File.dirname(__FILE__) + "/../../examples/")
|
|
15
|
-
Dir.chdir(full_dir) do
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
ENV['ORM'] = orm
|
|
19
|
-
ENV['STRATEGY'] = strategy
|
|
20
|
-
|
|
21
|
-
if another_orm
|
|
22
|
-
ENV['ANOTHER_ORM'] = another_orm
|
|
23
|
-
else
|
|
24
|
-
ENV['ANOTHER_ORM'] = nil
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
if multiple_databases
|
|
28
|
-
ENV['MULTIPLE_DBS'] = "true"
|
|
29
|
-
else
|
|
30
|
-
ENV['MULTIPLE_DBS'] = nil
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
self.output = `#{"jruby -S " if defined?(JRUBY_VERSION)}cucumber features/#{feature}.feature`
|
|
34
|
-
|
|
35
|
-
self.exit_status = $?.exitstatus
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
end
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'active_record'
|
|
3
|
-
require 'database_cleaner/active_record/base'
|
|
4
|
-
require 'database_cleaner/shared_strategy'
|
|
5
|
-
|
|
6
|
-
class FakeModel
|
|
7
|
-
def self.connection
|
|
8
|
-
:fake_connection
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
module DatabaseCleaner
|
|
13
|
-
describe ActiveRecord do
|
|
14
|
-
it { should respond_to(:available_strategies) }
|
|
15
|
-
|
|
16
|
-
describe "config_file_location" do
|
|
17
|
-
subject { ActiveRecord.config_file_location }
|
|
18
|
-
|
|
19
|
-
it "should default to DatabaseCleaner.root / config / database.yml" do
|
|
20
|
-
ActiveRecord.config_file_location=nil
|
|
21
|
-
DatabaseCleaner.should_receive(:app_root).and_return("/path/to")
|
|
22
|
-
subject.should eq '/path/to/config/database.yml'
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
module ActiveRecord
|
|
29
|
-
class ExampleStrategy
|
|
30
|
-
include ::DatabaseCleaner::ActiveRecord::Base
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
describe ExampleStrategy do
|
|
34
|
-
let :config_location do
|
|
35
|
-
'/path/to/config/database.yml'
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
before { ::DatabaseCleaner::ActiveRecord.stub(:config_file_location).and_return(config_location) }
|
|
39
|
-
|
|
40
|
-
it_should_behave_like "a generic strategy"
|
|
41
|
-
|
|
42
|
-
describe "db" do
|
|
43
|
-
|
|
44
|
-
it "should store my desired db" do
|
|
45
|
-
subject.stub(:load_config)
|
|
46
|
-
|
|
47
|
-
subject.db = :my_db
|
|
48
|
-
subject.db.should eq :my_db
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
it "should default to :default" do
|
|
52
|
-
subject.db.should eq :default
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should load_config when I set db" do
|
|
56
|
-
subject.should_receive(:load_config)
|
|
57
|
-
subject.db = :my_db
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
describe "load_config" do
|
|
62
|
-
|
|
63
|
-
before do
|
|
64
|
-
subject.db = :my_db
|
|
65
|
-
yaml = <<-Y
|
|
66
|
-
my_db:
|
|
67
|
-
database: <%= "ONE".downcase %>
|
|
68
|
-
Y
|
|
69
|
-
File.stub(:file?).with(config_location).and_return(true)
|
|
70
|
-
IO.stub(:read).with(config_location).and_return(yaml)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should parse the config" do
|
|
74
|
-
YAML.should_receive(:load).and_return({ :nil => nil })
|
|
75
|
-
subject.load_config
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
it "should process erb in the config" do
|
|
79
|
-
transformed = <<-Y
|
|
80
|
-
my_db:
|
|
81
|
-
database: one
|
|
82
|
-
Y
|
|
83
|
-
YAML.should_receive(:load).with(transformed).and_return({ "my_db" => { "database" => "one" } })
|
|
84
|
-
subject.load_config
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
context 'use ActiveRecord::Base.configuration' do
|
|
88
|
-
it 'when config file different with it' do
|
|
89
|
-
::ActiveRecord::Base.stub(:configurations).and_return({ "my_db" =>{ "database" => "two"} })
|
|
90
|
-
subject.load_config
|
|
91
|
-
subject.connection_hash.should eq({ "database" => "two"})
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
context 'use config file' do
|
|
96
|
-
it 'when config file same with it' do
|
|
97
|
-
::ActiveRecord::Base.stub(:configurations).and_return({ "my_db" =>{ "database" => "one"} })
|
|
98
|
-
subject.load_config
|
|
99
|
-
subject.connection_hash.should eq({ "database" => "one"})
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it 'when ::ActiveRecord::Base.configurations nil' do
|
|
103
|
-
::ActiveRecord::Base.stub(:configurations).and_return(nil)
|
|
104
|
-
subject.load_config
|
|
105
|
-
subject.connection_hash.should eq({ "database" => "one"})
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
it 'when ::ActiveRecord::Base.configurations empty' do
|
|
109
|
-
::ActiveRecord::Base.stub(:configurations).and_return({})
|
|
110
|
-
subject.load_config
|
|
111
|
-
subject.connection_hash.should eq({ "database" => "one"})
|
|
112
|
-
end
|
|
113
|
-
end
|
|
114
|
-
|
|
115
|
-
it "should store the relevant config in connection_hash" do
|
|
116
|
-
subject.load_config
|
|
117
|
-
subject.connection_hash.should eq( "database" => "one" )
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
it "should skip config if config file is not available" do
|
|
121
|
-
File.should_receive(:file?).with(config_location).and_return(false)
|
|
122
|
-
subject.load_config
|
|
123
|
-
subject.connection_hash.should_not be
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it "skips the file when the model is set" do
|
|
127
|
-
subject.db = FakeModel
|
|
128
|
-
YAML.should_not_receive(:load)
|
|
129
|
-
subject.load_config
|
|
130
|
-
subject.connection_hash.should_not be
|
|
131
|
-
end
|
|
132
|
-
|
|
133
|
-
it "skips the file when the db is set to :default" do
|
|
134
|
-
# to avoid https://github.com/bmabey/database_cleaner/issues/72
|
|
135
|
-
subject.db = :default
|
|
136
|
-
YAML.should_not_receive(:load)
|
|
137
|
-
subject.load_config
|
|
138
|
-
subject.connection_hash.should_not be
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
describe "connection_hash" do
|
|
144
|
-
it "should store connection_hash" do
|
|
145
|
-
subject.connection_hash = { :key => "value" }
|
|
146
|
-
subject.connection_hash.should eq( :key => "value" )
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
|
|
150
|
-
describe "connection_class" do
|
|
151
|
-
it { expect { subject.connection_class }.to_not raise_error }
|
|
152
|
-
it "should default to ActiveRecord::Base" do
|
|
153
|
-
subject.connection_class.should eq ::ActiveRecord::Base
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
context "with database models" do
|
|
157
|
-
context "connection_hash is set" do
|
|
158
|
-
it "allows for database models to be passed in" do
|
|
159
|
-
subject.db = FakeModel
|
|
160
|
-
subject.connection_hash = { }
|
|
161
|
-
subject.load_config
|
|
162
|
-
subject.connection_class.should eq FakeModel
|
|
163
|
-
end
|
|
164
|
-
end
|
|
165
|
-
|
|
166
|
-
context "connection_hash is not set" do
|
|
167
|
-
it "allows for database models to be passed in" do
|
|
168
|
-
subject.db = FakeModel
|
|
169
|
-
subject.connection_class.should eq FakeModel
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
context "when connection_hash is set" do
|
|
175
|
-
let(:hash) { double("hash") }
|
|
176
|
-
before { ::ActiveRecord::Base.stub(:respond_to?).and_return(false) }
|
|
177
|
-
before { subject.stub(:connection_hash).and_return(hash) }
|
|
178
|
-
|
|
179
|
-
it "establish a connection using ActiveRecord::Base" do
|
|
180
|
-
::ActiveRecord::Base.should_receive(:establish_connection).with(hash)
|
|
181
|
-
|
|
182
|
-
subject.connection_class
|
|
183
|
-
end
|
|
184
|
-
end
|
|
185
|
-
end
|
|
186
|
-
end
|
|
187
|
-
end
|
|
188
|
-
end
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
|
2
|
-
require 'database_cleaner/active_record/transaction'
|
|
3
|
-
require 'active_record'
|
|
4
|
-
|
|
5
|
-
module DatabaseCleaner
|
|
6
|
-
module ActiveRecord
|
|
7
|
-
|
|
8
|
-
describe Transaction do
|
|
9
|
-
let (:connection) { double("connection") }
|
|
10
|
-
let (:connection_2) { double("connection") }
|
|
11
|
-
let (:connection_pool) { double("connection_pool")}
|
|
12
|
-
before(:each) do
|
|
13
|
-
::ActiveRecord::Base.stub(:connection_pool).and_return(connection_pool)
|
|
14
|
-
connection_pool.stub(:connections).and_return([connection])
|
|
15
|
-
::ActiveRecord::Base.stub(:connection).and_return(connection)
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
describe "#start" do
|
|
19
|
-
[:begin_transaction, :begin_db_transaction].each do |begin_transaction_method|
|
|
20
|
-
context "using #{begin_transaction_method}" do
|
|
21
|
-
before do
|
|
22
|
-
connection.stub(:transaction)
|
|
23
|
-
connection.stub(begin_transaction_method)
|
|
24
|
-
connection.stub(:respond_to?).with(:begin_transaction).and_return(:begin_transaction == begin_transaction_method)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should increment open transactions if possible" do
|
|
28
|
-
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(true)
|
|
29
|
-
connection.should_receive(:increment_open_transactions)
|
|
30
|
-
Transaction.new.start
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
it "should tell ActiveRecord to increment connection if its not possible to increment current connection" do
|
|
34
|
-
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(false)
|
|
35
|
-
::ActiveRecord::Base.should_receive(:increment_open_transactions)
|
|
36
|
-
Transaction.new.start
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
it "should start a transaction" do
|
|
40
|
-
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(true)
|
|
41
|
-
connection.stub(:increment_open_transactions)
|
|
42
|
-
connection.should_receive(begin_transaction_method)
|
|
43
|
-
connection.should_receive(:transaction)
|
|
44
|
-
Transaction.new.start
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
describe "#clean" do
|
|
51
|
-
context "manual accounting of transaction count" do
|
|
52
|
-
it "should start a transaction" do
|
|
53
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
54
|
-
|
|
55
|
-
connection.stub(:decrement_open_transactions)
|
|
56
|
-
|
|
57
|
-
connection.should_receive(:rollback_db_transaction)
|
|
58
|
-
Transaction.new.clean
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should decrement open transactions if possible" do
|
|
62
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
63
|
-
|
|
64
|
-
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(true)
|
|
65
|
-
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
66
|
-
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
67
|
-
connection.stub(:rollback_db_transaction)
|
|
68
|
-
|
|
69
|
-
connection.should_receive(:decrement_open_transactions)
|
|
70
|
-
Transaction.new.clean
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
it "should not try to decrement or rollback if open_transactions is 0 for whatever reason" do
|
|
74
|
-
connection.should_receive(:open_transactions).and_return(0)
|
|
75
|
-
|
|
76
|
-
Transaction.new.clean
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it "should decrement connection via ActiveRecord::Base if connection won't" do
|
|
80
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
81
|
-
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
|
82
|
-
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
83
|
-
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
84
|
-
connection.stub(:rollback_db_transaction)
|
|
85
|
-
|
|
86
|
-
::ActiveRecord::Base.should_receive(:decrement_open_transactions)
|
|
87
|
-
Transaction.new.clean
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
it "should rollback open transactions in all connections" do
|
|
91
|
-
connection_pool.stub(:connections).and_return([connection, connection_2])
|
|
92
|
-
|
|
93
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
94
|
-
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
|
95
|
-
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
96
|
-
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
97
|
-
connection.stub(:rollback_db_transaction)
|
|
98
|
-
|
|
99
|
-
connection_2.should_receive(:open_transactions).and_return(1)
|
|
100
|
-
connection_2.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
|
101
|
-
connection_2.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
102
|
-
connection_2.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
103
|
-
connection_2.stub(:rollback_db_transaction)
|
|
104
|
-
|
|
105
|
-
::ActiveRecord::Base.should_receive(:decrement_open_transactions).twice
|
|
106
|
-
Transaction.new.clean
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "should rollback open transactions in all connections with an open transaction" do
|
|
110
|
-
connection_pool.stub(:connections).and_return([connection, connection_2])
|
|
111
|
-
|
|
112
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
113
|
-
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
|
114
|
-
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
115
|
-
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
|
|
116
|
-
connection.stub(:rollback_db_transaction)
|
|
117
|
-
|
|
118
|
-
connection_2.should_receive(:open_transactions).and_return(0)
|
|
119
|
-
|
|
120
|
-
::ActiveRecord::Base.should_receive(:decrement_open_transactions).exactly(1).times
|
|
121
|
-
Transaction.new.clean
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
context "automatic accounting of transaction count (AR 4)" do
|
|
126
|
-
before {stub_const("ActiveRecord::VERSION::MAJOR", 4) }
|
|
127
|
-
|
|
128
|
-
it "should start a transaction" do
|
|
129
|
-
connection.stub(:rollback_db_transaction)
|
|
130
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
131
|
-
|
|
132
|
-
connection.should_not_receive(:decrement_open_transactions)
|
|
133
|
-
connection.should_receive(:rollback_transaction)
|
|
134
|
-
Transaction.new.clean
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should decrement open transactions if possible" do
|
|
138
|
-
connection.stub(:rollback_transaction)
|
|
139
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
140
|
-
|
|
141
|
-
connection.should_not_receive(:decrement_open_transactions)
|
|
142
|
-
Transaction.new.clean
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
it "should not try to decrement or rollback if open_transactions is 0 for whatever reason" do
|
|
146
|
-
connection.should_receive(:open_transactions).and_return(0)
|
|
147
|
-
|
|
148
|
-
Transaction.new.clean
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
it "should decrement connection via ActiveRecord::Base if connection won't" do
|
|
152
|
-
connection.should_receive(:open_transactions).and_return(1)
|
|
153
|
-
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
|
|
154
|
-
connection.stub(:respond_to?).with(:rollback_transaction).and_return(true)
|
|
155
|
-
connection.stub(:rollback_transaction)
|
|
156
|
-
|
|
157
|
-
::ActiveRecord::Base.should_not_receive(:decrement_open_transactions)
|
|
158
|
-
Transaction.new.clean
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
|
|
163
|
-
describe "#connection_maintains_transaction_count?" do
|
|
164
|
-
it "should return true if the major active record version is < 4" do
|
|
165
|
-
stub_const("ActiveRecord::VERSION::MAJOR", 3)
|
|
166
|
-
Transaction.new.connection_maintains_transaction_count?.should be_true
|
|
167
|
-
end
|
|
168
|
-
it "should return false if the major active record version is > 3" do
|
|
169
|
-
stub_const("ActiveRecord::VERSION::MAJOR", 4)
|
|
170
|
-
Transaction.new.connection_maintains_transaction_count?.should be_false
|
|
171
|
-
end
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
end
|
|
175
|
-
end
|
|
176
|
-
end
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'active_record'
|
|
3
|
-
require 'support/active_record/mysql2_setup'
|
|
4
|
-
require 'database_cleaner/active_record/truncation'
|
|
5
|
-
require 'database_cleaner/active_record/truncation/shared_fast_truncation'
|
|
6
|
-
|
|
7
|
-
module ActiveRecord
|
|
8
|
-
module ConnectionAdapters
|
|
9
|
-
describe do
|
|
10
|
-
before(:all) { active_record_mysql2_setup }
|
|
11
|
-
|
|
12
|
-
let(:connection) { active_record_mysql2_connection }
|
|
13
|
-
|
|
14
|
-
describe "#truncate_table" do
|
|
15
|
-
it "should truncate the table" do
|
|
16
|
-
2.times { User.create }
|
|
17
|
-
|
|
18
|
-
connection.truncate_table('users')
|
|
19
|
-
User.count.should eq 0
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should reset AUTO_INCREMENT index of table" do
|
|
23
|
-
2.times { User.create }
|
|
24
|
-
User.delete_all
|
|
25
|
-
|
|
26
|
-
connection.truncate_table('users')
|
|
27
|
-
|
|
28
|
-
User.create.id.should eq 1
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it_behaves_like "an adapter with pre-count truncation" do
|
|
33
|
-
let(:connection) { active_record_mysql2_connection }
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
|