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.
Files changed (93) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile.lock +3 -3
  3. data/History.rdoc +23 -0
  4. data/README.markdown +24 -1
  5. data/VERSION.yml +2 -2
  6. data/lib/database_cleaner.rb +6 -2
  7. data/lib/database_cleaner/active_record/base.rb +1 -1
  8. data/lib/database_cleaner/active_record/deletion.rb +9 -7
  9. data/lib/database_cleaner/base.rb +2 -0
  10. data/lib/database_cleaner/safeguard.rb +72 -0
  11. metadata +6 -86
  12. data/examples/Gemfile +0 -1
  13. data/examples/Gemfile.lock +0 -1
  14. data/examples/config/database.yml.example +0 -8
  15. data/examples/config/redis.yml +0 -8
  16. data/examples/db/sqlite_databases_go_here +0 -0
  17. data/examples/features/example.feature +0 -11
  18. data/examples/features/example_multiple_db.feature +0 -23
  19. data/examples/features/example_multiple_orm.feature +0 -22
  20. data/examples/features/step_definitions/activerecord_steps.rb +0 -31
  21. data/examples/features/step_definitions/couchpotato_steps.rb +0 -31
  22. data/examples/features/step_definitions/datamapper_steps.rb +0 -37
  23. data/examples/features/step_definitions/mongoid_steps.rb +0 -23
  24. data/examples/features/step_definitions/mongomapper_steps.rb +0 -31
  25. data/examples/features/step_definitions/neo4j_steps.rb +0 -23
  26. data/examples/features/step_definitions/ohm_steps.rb +0 -31
  27. data/examples/features/step_definitions/redis_steps.rb +0 -31
  28. data/examples/features/step_definitions/translation_steps.rb +0 -55
  29. data/examples/features/support/env.rb +0 -61
  30. data/examples/lib/activerecord_models.rb +0 -41
  31. data/examples/lib/couchpotato_models.rb +0 -61
  32. data/examples/lib/datamapper_models.rb +0 -50
  33. data/examples/lib/mongoid_models.rb +0 -44
  34. data/examples/lib/mongomapper_models.rb +0 -51
  35. data/examples/lib/neo4j_models.rb +0 -17
  36. data/examples/lib/ohm_models.rb +0 -43
  37. data/examples/lib/redis_models.rb +0 -65
  38. data/examples/lib/sequel_models.rb +0 -9
  39. data/features/cleaning.feature +0 -30
  40. data/features/cleaning_default_strategy.feature +0 -23
  41. data/features/cleaning_multiple_dbs.feature +0 -22
  42. data/features/cleaning_multiple_orms.feature +0 -67
  43. data/features/step_definitions/database_cleaner_steps.rb +0 -33
  44. data/features/support/env.rb +0 -4
  45. data/features/support/feature_runner.rb +0 -39
  46. data/spec/database_cleaner/active_record/base_spec.rb +0 -188
  47. data/spec/database_cleaner/active_record/transaction_spec.rb +0 -176
  48. data/spec/database_cleaner/active_record/truncation/mysql2_spec.rb +0 -38
  49. data/spec/database_cleaner/active_record/truncation/mysql_spec.rb +0 -38
  50. data/spec/database_cleaner/active_record/truncation/postgresql_spec.rb +0 -75
  51. data/spec/database_cleaner/active_record/truncation/shared_fast_truncation.rb +0 -40
  52. data/spec/database_cleaner/active_record/truncation/sqlite3_spec.rb +0 -40
  53. data/spec/database_cleaner/active_record/truncation_spec.rb +0 -180
  54. data/spec/database_cleaner/base_spec.rb +0 -617
  55. data/spec/database_cleaner/configuration_spec.rb +0 -345
  56. data/spec/database_cleaner/couch_potato/truncation_spec.rb +0 -41
  57. data/spec/database_cleaner/data_mapper/base_spec.rb +0 -30
  58. data/spec/database_cleaner/data_mapper/transaction_spec.rb +0 -23
  59. data/spec/database_cleaner/data_mapper/truncation/sqlite3_spec.rb +0 -41
  60. data/spec/database_cleaner/data_mapper/truncation_spec.rb +0 -11
  61. data/spec/database_cleaner/generic/base_spec.rb +0 -61
  62. data/spec/database_cleaner/generic/truncation_spec.rb +0 -118
  63. data/spec/database_cleaner/mongo/mongo_examples.rb +0 -26
  64. data/spec/database_cleaner/mongo/truncation_spec.rb +0 -72
  65. data/spec/database_cleaner/mongo_mapper/base_spec.rb +0 -33
  66. data/spec/database_cleaner/mongo_mapper/mongo_examples.rb +0 -8
  67. data/spec/database_cleaner/mongo_mapper/truncation_spec.rb +0 -74
  68. data/spec/database_cleaner/moped/moped_examples.rb +0 -32
  69. data/spec/database_cleaner/moped/truncation_spec.rb +0 -80
  70. data/spec/database_cleaner/neo4j/base_spec.rb +0 -43
  71. data/spec/database_cleaner/neo4j/transaction_spec.rb +0 -25
  72. data/spec/database_cleaner/null_strategy_spec.rb +0 -28
  73. data/spec/database_cleaner/ohm/truncation_spec.rb +0 -70
  74. data/spec/database_cleaner/redis/base_spec.rb +0 -43
  75. data/spec/database_cleaner/redis/truncation_spec.rb +0 -63
  76. data/spec/database_cleaner/sequel/base_spec.rb +0 -32
  77. data/spec/database_cleaner/sequel/deletion_spec.rb +0 -58
  78. data/spec/database_cleaner/sequel/transaction_spec.rb +0 -21
  79. data/spec/database_cleaner/sequel/truncation/sqlite3_spec.rb +0 -0
  80. data/spec/database_cleaner/sequel/truncation_spec.rb +0 -182
  81. data/spec/database_cleaner/shared_strategy.rb +0 -15
  82. data/spec/rcov.opts +0 -1
  83. data/spec/spec_helper.rb +0 -21
  84. data/spec/support/active_record/database_setup.rb +0 -6
  85. data/spec/support/active_record/migrations/20150101010000_create_users.rb +0 -14
  86. data/spec/support/active_record/migrations/20150101020000_create_agents.rb +0 -14
  87. data/spec/support/active_record/mysql2_setup.rb +0 -39
  88. data/spec/support/active_record/mysql_setup.rb +0 -38
  89. data/spec/support/active_record/postgresql_setup.rb +0 -48
  90. data/spec/support/active_record/schema_setup.rb +0 -17
  91. data/spec/support/active_record/sqlite3_setup.rb +0 -40
  92. data/spec/support/data_mapper/schema_setup.rb +0 -15
  93. data/spec/support/data_mapper/sqlite3_setup.rb +0 -39
@@ -1,4 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
- require 'database_cleaner'
3
-
4
- require 'rspec/expectations'
@@ -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
-