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.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/lib/database_cleaner.rb +1 -3
  3. metadata +48 -154
  4. data/Gemfile.lock +0 -161
  5. data/History.txt +0 -173
  6. data/LICENSE +0 -20
  7. data/README.textile +0 -165
  8. data/Rakefile +0 -65
  9. data/TODO +0 -3
  10. data/VERSION.yml +0 -5
  11. data/cucumber.yml +0 -1
  12. data/examples/Gemfile +0 -48
  13. data/examples/Gemfile.lock +0 -161
  14. data/examples/config/database.yml.example +0 -8
  15. data/examples/db/sqlite_databases_go_here +0 -0
  16. data/examples/features/example.feature +0 -11
  17. data/examples/features/example_multiple_db.feature +0 -23
  18. data/examples/features/example_multiple_orm.feature +0 -22
  19. data/examples/features/step_definitions/activerecord_steps.rb +0 -31
  20. data/examples/features/step_definitions/couchpotato_steps.rb +0 -31
  21. data/examples/features/step_definitions/datamapper_steps.rb +0 -37
  22. data/examples/features/step_definitions/mongoid_steps.rb +0 -23
  23. data/examples/features/step_definitions/mongomapper_steps.rb +0 -31
  24. data/examples/features/step_definitions/translation_steps.rb +0 -55
  25. data/examples/features/support/env.rb +0 -62
  26. data/examples/lib/activerecord_models.rb +0 -41
  27. data/examples/lib/couchpotato_models.rb +0 -61
  28. data/examples/lib/datamapper_models.rb +0 -50
  29. data/examples/lib/mongoid_models.rb +0 -49
  30. data/examples/lib/mongomapper_models.rb +0 -51
  31. data/features/cleaning.feature +0 -22
  32. data/features/cleaning_default_strategy.feature +0 -19
  33. data/features/cleaning_multiple_dbs.feature +0 -21
  34. data/features/cleaning_multiple_orms.feature +0 -29
  35. data/features/step_definitions/database_cleaner_steps.rb +0 -32
  36. data/features/support/env.rb +0 -7
  37. data/features/support/feature_runner.rb +0 -39
  38. data/lib/database_cleaner/active_record/#transaction.rb# +0 -34
  39. data/lib/database_cleaner/active_record/base.rb +0 -53
  40. data/lib/database_cleaner/active_record/deletion.rb +0 -64
  41. data/lib/database_cleaner/active_record/transaction.rb +0 -26
  42. data/lib/database_cleaner/active_record/truncation.rb +0 -134
  43. data/lib/database_cleaner/base.rb +0 -136
  44. data/lib/database_cleaner/configuration.rb +0 -92
  45. data/lib/database_cleaner/couch_potato/base.rb +0 -7
  46. data/lib/database_cleaner/couch_potato/truncation.rb +0 -28
  47. data/lib/database_cleaner/cucumber.rb +0 -11
  48. data/lib/database_cleaner/data_mapper/base.rb +0 -21
  49. data/lib/database_cleaner/data_mapper/transaction.rb +0 -28
  50. data/lib/database_cleaner/data_mapper/truncation.rb +0 -175
  51. data/lib/database_cleaner/generic/base.rb +0 -23
  52. data/lib/database_cleaner/generic/truncation.rb +0 -43
  53. data/lib/database_cleaner/mongo/truncation.rb +0 -22
  54. data/lib/database_cleaner/mongo_mapper/base.rb +0 -20
  55. data/lib/database_cleaner/mongo_mapper/truncation.rb +0 -19
  56. data/lib/database_cleaner/mongoid/base.rb +0 -20
  57. data/lib/database_cleaner/mongoid/truncation.rb +0 -20
  58. data/lib/database_cleaner/null_strategy.rb +0 -15
  59. data/spec/database_cleaner/active_record/base_spec.rb +0 -141
  60. data/spec/database_cleaner/active_record/transaction_spec.rb +0 -65
  61. data/spec/database_cleaner/active_record/truncation_spec.rb +0 -82
  62. data/spec/database_cleaner/base_spec.rb +0 -478
  63. data/spec/database_cleaner/configuration_spec.rb +0 -294
  64. data/spec/database_cleaner/couch_potato/truncation_spec.rb +0 -41
  65. data/spec/database_cleaner/data_mapper/base_spec.rb +0 -30
  66. data/spec/database_cleaner/data_mapper/transaction_spec.rb +0 -23
  67. data/spec/database_cleaner/data_mapper/truncation_spec.rb +0 -11
  68. data/spec/database_cleaner/generic/base_spec.rb +0 -22
  69. data/spec/database_cleaner/generic/truncation_spec.rb +0 -78
  70. data/spec/database_cleaner/mongo_mapper/base_spec.rb +0 -33
  71. data/spec/database_cleaner/mongo_mapper/mongo_examples.rb +0 -8
  72. data/spec/database_cleaner/mongo_mapper/truncation_spec.rb +0 -74
  73. data/spec/database_cleaner/shared_strategy_spec.rb +0 -13
  74. data/spec/rcov.opts +0 -1
  75. data/spec/spec.opts +0 -7
  76. data/spec/spec_helper.rb +0 -19
@@ -1,478 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
- require 'database_cleaner/active_record/transaction'
3
- require 'database_cleaner/data_mapper/transaction'
4
- require 'database_cleaner/mongo_mapper/truncation'
5
- require 'database_cleaner/mongoid/truncation'
6
- require 'database_cleaner/couch_potato/truncation'
7
-
8
- module DatabaseCleaner
9
- describe Base do
10
-
11
- describe "autodetect" do
12
-
13
- #Cache all ORMs, we'll need them later but not now.
14
- before(:all) do
15
- Temp_AR = ::ActiveRecord if defined?(::ActiveRecord) and not defined?(Temp_AR)
16
- Temp_DM = ::DataMapper if defined?(::DataMapper) and not defined?(Temp_DM)
17
- Temp_MM = ::MongoMapper if defined?(::MongoMapper) and not defined?(Temp_MM)
18
- Temp_MO = ::Mongoid if defined?(::Mongoid) and not defined?(Temp_MO)
19
- Temp_CP = ::CouchPotato if defined?(::CouchPotato) and not defined?(Temp_CP)
20
- end
21
-
22
- #Remove all ORM mocks and restore from cache
23
- after(:all) do
24
- Object.send(:remove_const, 'ActiveRecord') if defined?(::ActiveRecord)
25
- Object.send(:remove_const, 'DataMapper') if defined?(::DataMapper)
26
- Object.send(:remove_const, 'MongoMapper') if defined?(::MongoMapper)
27
- Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
28
- Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
29
-
30
-
31
- # Restore ORMs
32
- ::ActiveRecord = Temp_AR if defined? Temp_AR
33
- ::DataMapper = Temp_DM if defined? Temp_DM
34
- ::MongoMapper = Temp_MM if defined? Temp_MM
35
- ::Mongoid = Temp_MO if defined? Temp_MO
36
- ::CouchPotato = Temp_CP if defined? Temp_CP
37
- end
38
-
39
- #reset the orm mocks
40
- before(:each) do
41
- Object.send(:remove_const, 'ActiveRecord') if defined?(::ActiveRecord)
42
- Object.send(:remove_const, 'DataMapper') if defined?(::DataMapper)
43
- Object.send(:remove_const, 'MongoMapper') if defined?(::MongoMapper)
44
- Object.send(:remove_const, 'Mongoid') if defined?(::Mongoid)
45
- Object.send(:remove_const, 'CouchPotato') if defined?(::CouchPotato)
46
- end
47
-
48
- let(:cleaner) { DatabaseCleaner::Base.new :autodetect }
49
-
50
- it "should raise an error when no ORM is detected" do
51
- running { cleaner }.should raise_error(DatabaseCleaner::NoORMDetected)
52
- end
53
-
54
- it "should detect ActiveRecord first" do
55
- Object.const_set('ActiveRecord','Actively mocking records.')
56
- Object.const_set('DataMapper', 'Mapping data mocks')
57
- Object.const_set('MongoMapper', 'Mapping mock mongos')
58
- Object.const_set('Mongoid', 'Mongoid mock')
59
- Object.const_set('CouchPotato', 'Couching mock potatos')
60
-
61
- cleaner.orm.should == :active_record
62
- cleaner.should be_auto_detected
63
- end
64
-
65
- it "should detect DataMapper second" do
66
- Object.const_set('DataMapper', 'Mapping data mocks')
67
- Object.const_set('MongoMapper', 'Mapping mock mongos')
68
- Object.const_set('Mongoid', 'Mongoid mock')
69
- Object.const_set('CouchPotato', 'Couching mock potatos')
70
-
71
- cleaner.orm.should == :data_mapper
72
- cleaner.should be_auto_detected
73
- end
74
-
75
- it "should detect MongoMapper third" do
76
- Object.const_set('MongoMapper', 'Mapping mock mongos')
77
- Object.const_set('Mongoid', 'Mongoid mock')
78
- Object.const_set('CouchPotato', 'Couching mock potatos')
79
-
80
- cleaner.orm.should == :mongo_mapper
81
- cleaner.should be_auto_detected
82
- end
83
-
84
- it "should detect Mongoid fourth" do
85
- Object.const_set('Mongoid', 'Mongoid mock')
86
- Object.const_set('CouchPotato', 'Couching mock potatos')
87
-
88
- cleaner.orm.should == :mongoid
89
- cleaner.should be_auto_detected
90
- end
91
-
92
- it "should detect CouchPotato last" do
93
- Object.const_set('CouchPotato', 'Couching mock potatos')
94
-
95
- cleaner.orm.should == :couch_potato
96
- cleaner.should be_auto_detected
97
- end
98
- end
99
-
100
- describe "orm_module" do
101
- it "should ask ::DatabaseCleaner what the module is for its orm" do
102
- orm = mock("orm")
103
- mockule = mock("module")
104
-
105
- cleaner = ::DatabaseCleaner::Base.new
106
- cleaner.should_receive(:orm).and_return(orm)
107
-
108
- ::DatabaseCleaner.should_receive(:orm_module).with(orm).and_return(mockule)
109
-
110
- cleaner.send(:orm_module).should == mockule
111
- end
112
- end
113
-
114
- describe "comparison" do
115
- it "should be equal if orm, connection and strategy are the same" do
116
- strategy = mock("strategy")
117
-
118
- one = DatabaseCleaner::Base.new(:active_record,:connection => :default)
119
- one.strategy = strategy
120
-
121
- two = DatabaseCleaner::Base.new(:active_record,:connection => :default)
122
- two.strategy = strategy
123
-
124
- one.should == two
125
- two.should == one
126
- end
127
- end
128
-
129
- describe "initialization" do
130
- context "db specified" do
131
- subject { ::DatabaseCleaner::Base.new(:active_record,:connection => :my_db) }
132
-
133
- it "should store db from :connection in params hash" do
134
- subject.db.should == :my_db
135
- end
136
- end
137
-
138
- describe "orm" do
139
- it "should store orm" do
140
- cleaner = ::DatabaseCleaner::Base.new :a_orm
141
- cleaner.orm.should == :a_orm
142
- end
143
-
144
- it "converts string to symbols" do
145
- cleaner = ::DatabaseCleaner::Base.new "mongoid"
146
- cleaner.orm.should == :mongoid
147
- end
148
-
149
- it "is autodetected if orm is not provided" do
150
- cleaner = ::DatabaseCleaner::Base.new
151
- cleaner.should be_auto_detected
152
- end
153
-
154
- it "is autodetected if you specify :autodetect" do
155
- cleaner = ::DatabaseCleaner::Base.new "autodetect"
156
- cleaner.should be_auto_detected
157
- end
158
-
159
- it "should default to autodetect upon initalisation" do
160
- subject.should be_auto_detected
161
- end
162
- end
163
- end
164
-
165
- describe "db" do
166
- it "should default to :default" do
167
- subject.db.should == :default
168
- end
169
-
170
- it "should return any stored db value" do
171
- subject.stub(:strategy_db=)
172
- subject.db = :test_db
173
- subject.db.should == :test_db
174
- end
175
-
176
- it "should pass db to any specified strategy" do
177
- subject.should_receive(:strategy_db=).with(:a_new_db)
178
- subject.db = :a_new_db
179
- end
180
- end
181
-
182
- describe "strategy_db=" do
183
- let(:strategy) { mock("strategy") }
184
-
185
- before(:each) do
186
- subject.strategy = strategy
187
- end
188
-
189
- it "should check that strategy supports db specification" do
190
- strategy.should_receive(:respond_to?).with(:db=).and_return(true)
191
- strategy.stub(:db=)
192
- subject.strategy_db = :a_db
193
- end
194
-
195
- context "when strategy supports db specification" do
196
- before(:each) { strategy.stub(:respond_to?).with(:db=).and_return true }
197
-
198
- it "should pass db to the strategy" do
199
- strategy.should_receive(:db=).with(:a_db)
200
- subject.strategy_db = :a_db
201
- end
202
- end
203
-
204
- context "when strategy doesn't supports db specification" do
205
- before(:each) { strategy.stub(:respond_to?).with(:db=).and_return false }
206
-
207
- it "should check to see if db is :default" do
208
- db = mock("default")
209
- db.should_receive(:==).with(:default).and_return(true)
210
-
211
- subject.strategy_db = db
212
- end
213
-
214
- it "should raise an argument error when db isn't default" do
215
- db = mock("a db")
216
- expect{ subject.strategy_db = db }.to raise_error ArgumentError
217
- end
218
- end
219
- end
220
-
221
- describe "clean_with" do
222
- let (:strategy) { mock("strategy",:clean => true) }
223
-
224
- before(:each) { subject.stub(:create_strategy).with(anything).and_return(strategy) }
225
-
226
- it "should pass all arguments to create_strategy" do
227
- subject.should_receive(:create_strategy).with(:lorum, :dollar, :amet, :ipsum => "random").and_return(strategy)
228
- subject.clean_with :lorum, :dollar, :amet, { :ipsum => "random" }
229
- end
230
-
231
- it "should invoke clean on the created strategy" do
232
- strategy.should_receive(:clean)
233
- subject.clean_with :strategy
234
- end
235
-
236
- it "should return the strategy" do
237
- subject.clean_with( :strategy ).should == strategy
238
- end
239
- end
240
-
241
- describe "clean_with!" do
242
- let (:strategy) { mock("strategy",:clean => true) }
243
-
244
- before(:each) { subject.stub(:create_strategy).with(anything).and_return(strategy) }
245
-
246
- it "should pass all arguments to create_strategy" do
247
- subject.should_receive(:create_strategy).with(:lorum, :dollar, :amet, :ipsum => "random").and_return(strategy)
248
- subject.clean_with! :lorum, :dollar, :amet, { :ipsum => "random" }
249
- end
250
-
251
- it "should invoke clean on the created strategy" do
252
- strategy.should_receive(:clean)
253
- subject.clean_with! :strategy
254
- end
255
-
256
- it "should return the strategy" do
257
- subject.clean_with!( :strategy ).should == strategy
258
- end
259
- end
260
-
261
- describe "create_strategy" do
262
- let(:klass) { mock("klass",:new => mock("instance")) }
263
-
264
- before :each do
265
- subject.stub(:orm_strategy).and_return(klass)
266
- end
267
-
268
- it "should pass the first argument to orm_strategy" do
269
- subject.should_receive(:orm_strategy).with(:strategy).and_return(Object)
270
- subject.create_strategy :strategy
271
- end
272
- it "should pass the remainding argument to orm_strategy.new" do
273
- klass.should_receive(:new).with(:params => {:lorum => "ipsum"})
274
-
275
- subject.create_strategy :strategy, {:params => {:lorum => "ipsum"}}
276
- end
277
- it "should return the resulting strategy" do
278
- subject.create_strategy( :strategy ).should == klass.new
279
- end
280
- end
281
-
282
- describe "strategy=" do
283
- let(:mock_strategy) { mock("strategy") }
284
-
285
- it "should proxy symbolised strategies to create_strategy" do
286
- subject.should_receive(:create_strategy).with(:symbol)
287
- subject.strategy = :symbol
288
- end
289
-
290
- it "should proxy params with symbolised strategies" do
291
- subject.should_receive(:create_strategy).with(:symbol,:param => "one")
292
- subject.strategy= :symbol, {:param => "one"}
293
- end
294
-
295
- it "should accept strategy objects" do
296
- expect{ subject.strategy = mock_strategy }.to_not raise_error
297
- end
298
-
299
- it "should raise argument error when params given with strategy Object" do
300
- expect{ subject.strategy = mock("object"), {:param => "one"} }.to raise_error ArgumentError
301
- end
302
-
303
- it "should attempt to set strategy db" do
304
- subject.stub(:db).and_return(:my_db)
305
- subject.should_receive(:strategy_db=).with(:my_db)
306
- subject.strategy = mock_strategy
307
- end
308
-
309
- it "should return the stored strategy" do
310
- result = subject.strategy = mock_strategy
311
- result.should == mock_strategy
312
- end
313
- end
314
-
315
- describe "strategy" do
316
- subject { ::DatabaseCleaner::Base.new :a_orm }
317
-
318
- it "returns a null strategy when strategy no set and undetectable" do
319
- subject.instance_values["@strategy"] = nil
320
- subject.strategy.should == DatabaseCleaner::NullStrategy
321
- end
322
-
323
- it "returns the set strategy" do
324
- strategum = mock("strategy")
325
- subject.strategy = strategum
326
- subject.strategy.should == strategum
327
- end
328
- end
329
-
330
- describe "orm=" do
331
- it "should stored the desired orm" do
332
- subject.orm.should_not == :desired_orm
333
- subject.orm = :desired_orm
334
- subject.orm.should == :desired_orm
335
- end
336
- end
337
-
338
- describe "orm" do
339
- let(:mock_orm) { mock("orm") }
340
-
341
- it "should return orm if orm set" do
342
- subject.instance_variable_set "@orm", mock_orm
343
- subject.orm.should == mock_orm
344
- end
345
-
346
- context "orm isn't set" do
347
- before(:each) { subject.instance_variable_set "@orm", nil }
348
-
349
- it "should run autodetect if orm isn't set" do
350
- subject.should_receive(:autodetect)
351
- subject.orm
352
- end
353
-
354
- it "should return the result of autodetect if orm isn't set" do
355
- subject.stub(:autodetect).and_return(mock_orm)
356
- subject.orm.should == mock_orm
357
- end
358
- end
359
- end
360
-
361
- describe "proxy methods" do
362
- let (:strategy) { mock("strategy") }
363
-
364
- before(:each) do
365
- subject.stub(:strategy).and_return(strategy)
366
- end
367
-
368
- describe "start" do
369
- it "should proxy start to the strategy" do
370
- strategy.should_receive(:start)
371
- subject.start
372
- end
373
- end
374
-
375
- describe "clean" do
376
- it "should proxy clean to the strategy" do
377
- strategy.should_receive(:clean)
378
- subject.clean
379
- end
380
- end
381
-
382
- describe "clean!" do
383
- it "should proxy clean! to the strategy clean" do
384
- strategy.should_receive(:clean)
385
- subject.clean!
386
- end
387
- end
388
- end
389
-
390
- describe "auto_detected?" do
391
- it "should return true unless @autodetected is nil" do
392
- subject.instance_variable_set("@autodetected","not nil")
393
- subject.auto_detected?.should be_true
394
- end
395
-
396
- it "should return false if @autodetect is nil" do
397
- subject.instance_variable_set("@autodetected",nil)
398
- subject.auto_detected?.should be_false
399
- end
400
- end
401
-
402
- describe "orm_strategy" do
403
- let (:klass) { mock("klass") }
404
-
405
- before(:each) do
406
- subject.stub(:orm_module).and_return(klass)
407
- end
408
-
409
- context "in response to a LoadError" do
410
- before(:each) { subject.should_receive(:require).with(anything).and_raise(LoadError) }
411
-
412
- it "should catch LoadErrors" do
413
- expect { subject.send(:orm_strategy,:a_strategy) }.to_not raise_error LoadError
414
- end
415
-
416
- it "should raise UnknownStrategySpecified" do
417
- expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
418
- end
419
-
420
- it "should ask orm_module if it will list available_strategies" do
421
- klass.should_receive(:respond_to?).with(:available_strategies)
422
-
423
- subject.stub(:orm_module).and_return(klass)
424
-
425
- expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
426
- end
427
-
428
- it "should use available_strategies (for the error message) if its available" do
429
- klass.stub(:respond_to?).with(:available_strategies).and_return(true)
430
- klass.should_receive(:available_strategies).and_return([])
431
-
432
- subject.stub(:orm_module).and_return(klass)
433
-
434
- expect { subject.send(:orm_strategy,:a_strategy) }.to raise_error UnknownStrategySpecified
435
- end
436
- end
437
-
438
- it "should return the constant of the Strategy class requested" do
439
- strategy_klass = mock("strategy klass")
440
-
441
- subject.stub(:require).with(anything).and_return(true)
442
-
443
- klass.should_receive(:const_get).with("Cunningplan").and_return(strategy_klass)
444
-
445
- subject.send(:orm_strategy, :cunningplan).should == strategy_klass
446
- end
447
-
448
- end
449
-
450
- describe 'set_default_orm_strategy' do
451
- it 'sets strategy to :transaction for ActiveRecord' do
452
- cleaner = DatabaseCleaner::Base.new(:active_record)
453
- cleaner.strategy.should be_instance_of DatabaseCleaner::ActiveRecord::Transaction
454
- end
455
-
456
- it 'sets strategy to :transaction for DataMapper' do
457
- cleaner = DatabaseCleaner::Base.new(:data_mapper)
458
- cleaner.strategy.should be_instance_of DatabaseCleaner::DataMapper::Transaction
459
- end
460
-
461
- it 'sets strategy to :truncation for MongoMapper' do
462
- cleaner = DatabaseCleaner::Base.new(:mongo_mapper)
463
- cleaner.strategy.should be_instance_of DatabaseCleaner::MongoMapper::Truncation
464
- end
465
-
466
- it 'sets strategy to :truncation for Mongoid' do
467
- cleaner = DatabaseCleaner::Base.new(:mongoid)
468
- cleaner.strategy.should be_instance_of DatabaseCleaner::Mongoid::Truncation
469
- end
470
-
471
- it 'sets strategy to :truncation for CouchPotato' do
472
- cleaner = DatabaseCleaner::Base.new(:couch_potato)
473
- cleaner.strategy.should be_instance_of DatabaseCleaner::CouchPotato::Truncation
474
- end
475
- end
476
-
477
- end
478
- end