database_cleaner 0.6.7 → 2.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.
- checksums.yaml +7 -0
- data/lib/database_cleaner.rb +1 -3
- metadata +48 -154
- data/Gemfile.lock +0 -161
- data/History.txt +0 -173
- data/LICENSE +0 -20
- data/README.textile +0 -165
- data/Rakefile +0 -65
- data/TODO +0 -3
- data/VERSION.yml +0 -5
- data/cucumber.yml +0 -1
- data/examples/Gemfile +0 -48
- data/examples/Gemfile.lock +0 -161
- data/examples/config/database.yml.example +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/translation_steps.rb +0 -55
- data/examples/features/support/env.rb +0 -62
- 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 -49
- data/examples/lib/mongomapper_models.rb +0 -51
- data/features/cleaning.feature +0 -22
- data/features/cleaning_default_strategy.feature +0 -19
- data/features/cleaning_multiple_dbs.feature +0 -21
- data/features/cleaning_multiple_orms.feature +0 -29
- data/features/step_definitions/database_cleaner_steps.rb +0 -32
- data/features/support/env.rb +0 -7
- data/features/support/feature_runner.rb +0 -39
- data/lib/database_cleaner/active_record/#transaction.rb# +0 -34
- data/lib/database_cleaner/active_record/base.rb +0 -53
- data/lib/database_cleaner/active_record/deletion.rb +0 -64
- data/lib/database_cleaner/active_record/transaction.rb +0 -26
- data/lib/database_cleaner/active_record/truncation.rb +0 -134
- data/lib/database_cleaner/base.rb +0 -136
- data/lib/database_cleaner/configuration.rb +0 -92
- data/lib/database_cleaner/couch_potato/base.rb +0 -7
- data/lib/database_cleaner/couch_potato/truncation.rb +0 -28
- data/lib/database_cleaner/cucumber.rb +0 -11
- data/lib/database_cleaner/data_mapper/base.rb +0 -21
- data/lib/database_cleaner/data_mapper/transaction.rb +0 -28
- data/lib/database_cleaner/data_mapper/truncation.rb +0 -175
- data/lib/database_cleaner/generic/base.rb +0 -23
- data/lib/database_cleaner/generic/truncation.rb +0 -43
- data/lib/database_cleaner/mongo/truncation.rb +0 -22
- data/lib/database_cleaner/mongo_mapper/base.rb +0 -20
- data/lib/database_cleaner/mongo_mapper/truncation.rb +0 -19
- data/lib/database_cleaner/mongoid/base.rb +0 -20
- data/lib/database_cleaner/mongoid/truncation.rb +0 -20
- data/lib/database_cleaner/null_strategy.rb +0 -15
- data/spec/database_cleaner/active_record/base_spec.rb +0 -141
- data/spec/database_cleaner/active_record/transaction_spec.rb +0 -65
- data/spec/database_cleaner/active_record/truncation_spec.rb +0 -82
- data/spec/database_cleaner/base_spec.rb +0 -478
- data/spec/database_cleaner/configuration_spec.rb +0 -294
- 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_spec.rb +0 -11
- data/spec/database_cleaner/generic/base_spec.rb +0 -22
- data/spec/database_cleaner/generic/truncation_spec.rb +0 -78
- 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/shared_strategy_spec.rb +0 -13
- data/spec/rcov.opts +0 -1
- data/spec/spec.opts +0 -7
- data/spec/spec_helper.rb +0 -19
@@ -1,175 +0,0 @@
|
|
1
|
-
require "database_cleaner/generic/truncation"
|
2
|
-
require 'database_cleaner/data_mapper/base'
|
3
|
-
|
4
|
-
module DataMapper
|
5
|
-
module Adapters
|
6
|
-
|
7
|
-
class DataObjectsAdapter
|
8
|
-
|
9
|
-
def storage_names(repository = :default)
|
10
|
-
raise NotImplementedError
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
class MysqlAdapter < DataObjectsAdapter
|
16
|
-
|
17
|
-
# taken from http://github.com/godfat/dm-mapping/tree/master
|
18
|
-
def storage_names(repository = :default)
|
19
|
-
select 'SHOW TABLES'
|
20
|
-
end
|
21
|
-
|
22
|
-
def truncate_table(table_name)
|
23
|
-
execute("TRUNCATE TABLE #{quote_name(table_name)};")
|
24
|
-
end
|
25
|
-
|
26
|
-
# copied from activerecord
|
27
|
-
def disable_referential_integrity
|
28
|
-
old = select("SELECT @@FOREIGN_KEY_CHECKS;")
|
29
|
-
begin
|
30
|
-
execute("SET FOREIGN_KEY_CHECKS = 0;")
|
31
|
-
yield
|
32
|
-
ensure
|
33
|
-
execute("SET FOREIGN_KEY_CHECKS = ?", *old)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
class Sqlite3Adapter < DataObjectsAdapter
|
41
|
-
|
42
|
-
# taken from http://github.com/godfat/dm-mapping/tree/master
|
43
|
-
def storage_names(repository = :default)
|
44
|
-
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 177
|
45
|
-
sql = <<-SQL.compress_lines
|
46
|
-
SELECT name
|
47
|
-
FROM sqlite_master
|
48
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
49
|
-
SQL
|
50
|
-
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 181
|
51
|
-
select(sql)
|
52
|
-
end
|
53
|
-
|
54
|
-
def truncate_table(table_name)
|
55
|
-
execute("DELETE FROM #{quote_name(table_name)};")
|
56
|
-
end
|
57
|
-
|
58
|
-
# this is a no-op copied from activerecord
|
59
|
-
# i didn't find out if/how this is possible
|
60
|
-
# activerecord also doesn't do more here
|
61
|
-
def disable_referential_integrity
|
62
|
-
yield
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
|
67
|
-
class SqliteAdapter < DataObjectsAdapter
|
68
|
-
# taken from http://github.com/godfat/dm-mapping/tree/master
|
69
|
-
def storage_names(repository = :default)
|
70
|
-
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 177
|
71
|
-
sql = <<-SQL.compress_lines
|
72
|
-
SELECT name
|
73
|
-
FROM sqlite_master
|
74
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
75
|
-
SQL
|
76
|
-
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 181
|
77
|
-
select(sql)
|
78
|
-
end
|
79
|
-
|
80
|
-
def truncate_table(table_name)
|
81
|
-
execute("DELETE FROM #{quote_name(table_name)};")
|
82
|
-
end
|
83
|
-
|
84
|
-
# this is a no-op copied from activerecord
|
85
|
-
# i didn't find out if/how this is possible
|
86
|
-
# activerecord also doesn't do more here
|
87
|
-
def disable_referential_integrity
|
88
|
-
yield
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
# FIXME
|
94
|
-
# i don't know if this works
|
95
|
-
# i basically just copied activerecord code to get a rough idea what they do.
|
96
|
-
# i don't have postgres available, so i won't be the one to write this.
|
97
|
-
# maybe codes below gets some postgres/datamapper user going, though.
|
98
|
-
class PostgresAdapter < DataObjectsAdapter
|
99
|
-
|
100
|
-
# taken from http://github.com/godfat/dm-mapping/tree/master
|
101
|
-
def storage_names(repository = :default)
|
102
|
-
sql = <<-SQL.compress_lines
|
103
|
-
SELECT table_name FROM "information_schema"."tables"
|
104
|
-
WHERE table_schema = current_schema() and table_type = 'BASE TABLE'
|
105
|
-
SQL
|
106
|
-
select(sql)
|
107
|
-
end
|
108
|
-
|
109
|
-
def truncate_table(table_name)
|
110
|
-
execute("TRUNCATE TABLE #{quote_name(table_name)} CASCADE;")
|
111
|
-
end
|
112
|
-
|
113
|
-
# FIXME
|
114
|
-
# copied from activerecord
|
115
|
-
def supports_disable_referential_integrity?
|
116
|
-
version = select("SHOW server_version")[0][0].split('.')
|
117
|
-
(version[0].to_i >= 8 && version[1].to_i >= 1) ? true : false
|
118
|
-
rescue
|
119
|
-
return false
|
120
|
-
end
|
121
|
-
|
122
|
-
# FIXME
|
123
|
-
# copied unchanged from activerecord
|
124
|
-
def disable_referential_integrity(repository = :default)
|
125
|
-
if supports_disable_referential_integrity? then
|
126
|
-
execute(storage_names(repository).collect do |name|
|
127
|
-
"ALTER TABLE #{quote_name(name)} DISABLE TRIGGER ALL"
|
128
|
-
end.join(";"))
|
129
|
-
end
|
130
|
-
yield
|
131
|
-
ensure
|
132
|
-
if supports_disable_referential_integrity? then
|
133
|
-
execute(storage_names(repository).collect do |name|
|
134
|
-
"ALTER TABLE #{quote_name(name)} ENABLE TRIGGER ALL"
|
135
|
-
end.join(";"))
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
|
145
|
-
module DatabaseCleaner
|
146
|
-
module DataMapper
|
147
|
-
class Truncation
|
148
|
-
include ::DatabaseCleaner::DataMapper::Base
|
149
|
-
include ::DatabaseCleaner::Generic::Truncation
|
150
|
-
|
151
|
-
def clean(repository = nil)
|
152
|
-
repository = self.db if repository.nil?
|
153
|
-
adapter = ::DataMapper.repository(repository).adapter
|
154
|
-
adapter.disable_referential_integrity do
|
155
|
-
tables_to_truncate(repository).each do |table_name|
|
156
|
-
adapter.truncate_table table_name
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
private
|
162
|
-
|
163
|
-
def tables_to_truncate(repository = nil)
|
164
|
-
repository = self.db if repository.nil?
|
165
|
-
(@only || ::DataMapper.repository(repository).adapter.storage_names(repository)) - @tables_to_exclude
|
166
|
-
end
|
167
|
-
|
168
|
-
# overwritten
|
169
|
-
def migration_storage_name
|
170
|
-
'migration_info'
|
171
|
-
end
|
172
|
-
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module ::DatabaseCleaner
|
2
|
-
module Generic
|
3
|
-
module Base
|
4
|
-
|
5
|
-
def self.included(base)
|
6
|
-
base.extend(ClassMethods)
|
7
|
-
base.send(:include, InstanceMethods)
|
8
|
-
end
|
9
|
-
|
10
|
-
module InstanceMethods
|
11
|
-
def db
|
12
|
-
:default
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
module ClassMethods
|
17
|
-
def available_strategies
|
18
|
-
%W[]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module DatabaseCleaner
|
2
|
-
module Generic
|
3
|
-
module Truncation
|
4
|
-
def self.included(base)
|
5
|
-
base.send(:include, InstanceMethods)
|
6
|
-
end
|
7
|
-
|
8
|
-
module InstanceMethods
|
9
|
-
def initialize(opts={})
|
10
|
-
if !opts.empty? && !(opts.keys - [:only, :except]).empty?
|
11
|
-
raise ArgumentError, "The only valid options are :only and :except. You specified #{opts.keys.join(',')}."
|
12
|
-
end
|
13
|
-
if opts.has_key?(:only) && opts.has_key?(:except)
|
14
|
-
raise ArgumentError, "You may only specify either :only or :either. Doing both doesn't really make sense does it?"
|
15
|
-
end
|
16
|
-
|
17
|
-
@only = opts[:only]
|
18
|
-
@tables_to_exclude = (opts[:except] || []).dup
|
19
|
-
@tables_to_exclude << migration_storage_name unless migration_storage_name.nil?
|
20
|
-
end
|
21
|
-
|
22
|
-
def start
|
23
|
-
#included for compatability reasons, do nothing if you don't need to
|
24
|
-
end
|
25
|
-
|
26
|
-
def clean
|
27
|
-
raise NotImplementedError
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
def tables_to_truncate
|
32
|
-
raise NotImplementedError
|
33
|
-
end
|
34
|
-
|
35
|
-
# overwrite in subclasses
|
36
|
-
# default implementation given because migration storage need not be present
|
37
|
-
def migration_storage_name
|
38
|
-
nil
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module DatabaseCleaner
|
2
|
-
module Mongo
|
3
|
-
module Truncation
|
4
|
-
|
5
|
-
def clean
|
6
|
-
if @only
|
7
|
-
collections.each { |c| c.remove if @only.include?(c.name) }
|
8
|
-
else
|
9
|
-
collections.each { |c| c.remove unless @tables_to_exclude.include?(c.name) }
|
10
|
-
end
|
11
|
-
true
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
def collections
|
17
|
-
database.collections.select { |c| c.name !~ /^system\./ }
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'database_cleaner/generic/base'
|
2
|
-
module DatabaseCleaner
|
3
|
-
module MongoMapper
|
4
|
-
def self.available_strategies
|
5
|
-
%w[truncation]
|
6
|
-
end
|
7
|
-
|
8
|
-
module Base
|
9
|
-
include ::DatabaseCleaner::Generic::Base
|
10
|
-
|
11
|
-
def db=(desired_db)
|
12
|
-
@db = desired_db
|
13
|
-
end
|
14
|
-
|
15
|
-
def db
|
16
|
-
@db || :default
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'database_cleaner/mongo_mapper/base'
|
2
|
-
require 'database_cleaner/generic/truncation'
|
3
|
-
require 'database_cleaner/mongo/truncation'
|
4
|
-
|
5
|
-
module DatabaseCleaner
|
6
|
-
module MongoMapper
|
7
|
-
class Truncation
|
8
|
-
include ::DatabaseCleaner::MongoMapper::Base
|
9
|
-
include ::DatabaseCleaner::Generic::Truncation
|
10
|
-
include ::DatabaseCleaner::Mongo::Truncation
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def database
|
15
|
-
::MongoMapper.database
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'database_cleaner/generic/base'
|
2
|
-
module DatabaseCleaner
|
3
|
-
module Mongoid
|
4
|
-
def self.available_strategies
|
5
|
-
%w[truncation]
|
6
|
-
end
|
7
|
-
|
8
|
-
module Base
|
9
|
-
include ::DatabaseCleaner::Generic::Base
|
10
|
-
|
11
|
-
def db=(desired_db)
|
12
|
-
@db = desired_db
|
13
|
-
end
|
14
|
-
|
15
|
-
def db
|
16
|
-
@db || :default
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'database_cleaner/mongoid/base'
|
2
|
-
require 'database_cleaner/generic/truncation'
|
3
|
-
require 'database_cleaner/mongo/truncation'
|
4
|
-
|
5
|
-
module DatabaseCleaner
|
6
|
-
module Mongoid
|
7
|
-
class Truncation
|
8
|
-
include ::DatabaseCleaner::Mongoid::Base
|
9
|
-
include ::DatabaseCleaner::Generic::Truncation
|
10
|
-
include ::DatabaseCleaner::Mongo::Truncation
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def database
|
15
|
-
::Mongoid.database
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,141 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'active_record'
|
3
|
-
require 'database_cleaner/active_record/base'
|
4
|
-
require 'database_cleaner/shared_strategy_spec'
|
5
|
-
|
6
|
-
module DatabaseCleaner
|
7
|
-
describe ActiveRecord do
|
8
|
-
it { should respond_to(:available_strategies) }
|
9
|
-
|
10
|
-
describe "config_file_location" do
|
11
|
-
subject { ActiveRecord.config_file_location }
|
12
|
-
|
13
|
-
it "should default to DatabaseCleaner.root / config / database.yml" do
|
14
|
-
ActiveRecord.config_file_location=nil
|
15
|
-
DatabaseCleaner.should_receive(:app_root).and_return("/path/to")
|
16
|
-
subject.should == '/path/to/config/database.yml'
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
module ActiveRecord
|
23
|
-
class ExampleStrategy
|
24
|
-
include ::DatabaseCleaner::ActiveRecord::Base
|
25
|
-
end
|
26
|
-
|
27
|
-
describe ExampleStrategy do
|
28
|
-
let :config_location do
|
29
|
-
'/path/to/config/database.yml'
|
30
|
-
end
|
31
|
-
|
32
|
-
before { ::DatabaseCleaner::ActiveRecord.stub(:config_file_location).and_return(config_location) }
|
33
|
-
|
34
|
-
it_should_behave_like "a generic strategy"
|
35
|
-
|
36
|
-
describe "db" do
|
37
|
-
it { should respond_to(:db=) }
|
38
|
-
|
39
|
-
it "should store my desired db" do
|
40
|
-
subject.stub(:load_config)
|
41
|
-
|
42
|
-
subject.db = :my_db
|
43
|
-
subject.db.should == :my_db
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should default to :default" do
|
47
|
-
subject.db.should == :default
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should load_config when I set db" do
|
51
|
-
subject.should_receive(:load_config)
|
52
|
-
subject.db = :my_db
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "load_config" do
|
57
|
-
|
58
|
-
it { should respond_to(:load_config) }
|
59
|
-
|
60
|
-
before do
|
61
|
-
yaml = <<-Y
|
62
|
-
my_db:
|
63
|
-
database: <%= "ONE".downcase %>
|
64
|
-
Y
|
65
|
-
File.stub(:file?).with(config_location).and_return(true)
|
66
|
-
IO.stub(:read).with(config_location).and_return(yaml)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should parse the config" do
|
70
|
-
YAML.should_receive(:load).and_return( {:nil => nil} )
|
71
|
-
subject.load_config
|
72
|
-
end
|
73
|
-
|
74
|
-
it "should process erb in the config" do
|
75
|
-
transformed = <<-Y
|
76
|
-
my_db:
|
77
|
-
database: one
|
78
|
-
Y
|
79
|
-
YAML.should_receive(:load).with(transformed).and_return({ "my_db" => {"database" => "one"} })
|
80
|
-
subject.load_config
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should store the relevant config in connection_hash" do
|
84
|
-
subject.should_receive(:db).and_return(:my_db)
|
85
|
-
subject.load_config
|
86
|
-
subject.connection_hash.should == {"database" => "one"}
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should skip config if config file is not available" do
|
90
|
-
File.should_receive(:file?).with(config_location).and_return(false)
|
91
|
-
subject.load_config
|
92
|
-
subject.connection_hash.should be_blank
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
describe "connection_hash" do
|
97
|
-
it { should respond_to(:connection_hash) }
|
98
|
-
it { should respond_to(:connection_hash=) }
|
99
|
-
it "should store connection_hash" do
|
100
|
-
subject.connection_hash = { :key => "value" }
|
101
|
-
subject.connection_hash.should == { :key => "value" }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
describe "create_connection_klass" do
|
106
|
-
it "should return a class" do
|
107
|
-
subject.create_connection_klass.should be_a(Class)
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should return a class extending ::ActiveRecord::Base" do
|
111
|
-
subject.create_connection_klass.ancestors.should include(::ActiveRecord::Base)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe "connection_klass" do
|
116
|
-
it { expect{ subject.connection_klass }.to_not raise_error }
|
117
|
-
it "should default to ActiveRecord::Base" do
|
118
|
-
subject.connection_klass.should == ::ActiveRecord::Base
|
119
|
-
end
|
120
|
-
|
121
|
-
context "when connection_hash is set" do
|
122
|
-
let(:hash) { mock("hash") }
|
123
|
-
before { subject.stub(:connection_hash).and_return(hash) }
|
124
|
-
|
125
|
-
it "should create connection_klass if it doesnt exist if connection_hash is set" do
|
126
|
-
subject.should_receive(:create_connection_klass).and_return(mock('class').as_null_object)
|
127
|
-
subject.connection_klass
|
128
|
-
end
|
129
|
-
|
130
|
-
it "should configure the class from create_connection_klass if connection_hash is set" do
|
131
|
-
klass = mock('klass')
|
132
|
-
klass.should_receive(:establish_connection).with(hash)
|
133
|
-
|
134
|
-
subject.should_receive(:create_connection_klass).and_return(klass)
|
135
|
-
subject.connection_klass
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
@@ -1,65 +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) { mock("connection") }
|
10
|
-
before(:each) do
|
11
|
-
::ActiveRecord::Base.stub!(:connection).and_return(connection)
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "#start" do
|
15
|
-
it "should increment open transactions if possible" do
|
16
|
-
connection.stub!(:respond_to?).with(:increment_open_transactions).and_return(true)
|
17
|
-
connection.stub!(:begin_db_transaction)
|
18
|
-
|
19
|
-
connection.should_receive(:increment_open_transactions)
|
20
|
-
Transaction.new.start
|
21
|
-
end
|
22
|
-
|
23
|
-
it "should tell ActiveRecord to increment connection if its not possible to increment current connection" do
|
24
|
-
connection.stub!(:respond_to?).with(:increment_open_transactions).and_return(false)
|
25
|
-
connection.stub!(:begin_db_transaction)
|
26
|
-
|
27
|
-
::ActiveRecord::Base.should_receive(:increment_open_transactions)
|
28
|
-
Transaction.new.start
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should start a transaction" do
|
32
|
-
connection.stub!(:increment_open_transactions)
|
33
|
-
|
34
|
-
connection.should_receive(:begin_db_transaction)
|
35
|
-
Transaction.new.start
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "#clean" do
|
40
|
-
it "should start a transaction" do
|
41
|
-
connection.stub!(:decrement_open_transactions)
|
42
|
-
|
43
|
-
connection.should_receive(:rollback_db_transaction)
|
44
|
-
Transaction.new.clean
|
45
|
-
end
|
46
|
-
it "should decrement open transactions if possible" do
|
47
|
-
connection.stub!(:respond_to?).with(:decrement_open_transactions).and_return(true)
|
48
|
-
connection.stub!(:rollback_db_transaction)
|
49
|
-
|
50
|
-
connection.should_receive(:decrement_open_transactions)
|
51
|
-
Transaction.new.clean
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should decrement connection via ActiveRecord::Base if connection won't" do
|
55
|
-
connection.stub!(:respond_to?).with(:decrement_open_transactions).and_return(false)
|
56
|
-
connection.stub!(:rollback_db_transaction)
|
57
|
-
|
58
|
-
::ActiveRecord::Base.should_receive(:decrement_open_transactions)
|
59
|
-
Transaction.new.clean
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
-
require 'active_record'
|
3
|
-
require 'database_cleaner/active_record/truncation'
|
4
|
-
|
5
|
-
|
6
|
-
module ActiveRecord
|
7
|
-
module ConnectionAdapters
|
8
|
-
[MysqlAdapter, Mysql2Adapter, SQLite3Adapter, JdbcAdapter, PostgreSQLAdapter, IBM_DBAdapter].each do |adapter|
|
9
|
-
describe adapter, "#truncate_table" do
|
10
|
-
it "responds" do
|
11
|
-
adapter.new("foo").should respond_to(:truncate_table)
|
12
|
-
end
|
13
|
-
it "should truncate the table"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
module DatabaseCleaner
|
20
|
-
module ActiveRecord
|
21
|
-
|
22
|
-
describe Truncation do
|
23
|
-
let(:connection) { mock('connection') }
|
24
|
-
|
25
|
-
|
26
|
-
before(:each) do
|
27
|
-
connection.stub!(:disable_referential_integrity).and_yield
|
28
|
-
connection.stub!(:views).and_return([])
|
29
|
-
::ActiveRecord::Base.stub!(:connection).and_return(connection)
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should truncate all tables except for schema_migrations" do
|
33
|
-
connection.stub!(:tables).and_return(%w[schema_migrations widgets dogs])
|
34
|
-
|
35
|
-
connection.should_receive(:truncate_table).with('widgets')
|
36
|
-
connection.should_receive(:truncate_table).with('dogs')
|
37
|
-
connection.should_not_receive(:truncate_table).with('schema_migrations')
|
38
|
-
|
39
|
-
Truncation.new.clean
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should only truncate the tables specified in the :only option when provided" do
|
43
|
-
connection.stub!(:tables).and_return(%w[schema_migrations widgets dogs])
|
44
|
-
|
45
|
-
connection.should_receive(:truncate_table).with('widgets')
|
46
|
-
connection.should_not_receive(:truncate_table).with('dogs')
|
47
|
-
|
48
|
-
Truncation.new(:only => ['widgets']).clean
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should not truncate the tables specified in the :except option" do
|
52
|
-
connection.stub!(:tables).and_return(%w[schema_migrations widgets dogs])
|
53
|
-
|
54
|
-
connection.should_receive(:truncate_table).with('dogs')
|
55
|
-
connection.should_not_receive(:truncate_table).with('widgets')
|
56
|
-
|
57
|
-
Truncation.new(:except => ['widgets']).clean
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should raise an error when :only and :except options are used" do
|
61
|
-
running {
|
62
|
-
Truncation.new(:except => ['widgets'], :only => ['widgets'])
|
63
|
-
}.should raise_error(ArgumentError)
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should raise an error when invalid options are provided" do
|
67
|
-
running { Truncation.new(:foo => 'bar') }.should raise_error(ArgumentError)
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should not truncate views" do
|
71
|
-
connection.stub!(:tables).and_return(%w[widgets dogs])
|
72
|
-
connection.stub!(:views).and_return(["widgets"])
|
73
|
-
|
74
|
-
connection.should_receive(:truncate_table).with('dogs')
|
75
|
-
connection.should_not_receive(:truncate_table).with('widgets')
|
76
|
-
|
77
|
-
Truncation.new.clean
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|