Add support for default strategy for each ORM
DatabaseCleaner will select the best default strategy based on the ORM you're using without having you to select it by yourself. * ActiveRecord, DataMapper => :transaction * MongoMapper, Mongoid, CouchPotato => :truncation
This commit is contained in:
parent
9bd76e743d
commit
56ca7001d4
|
@ -10,19 +10,20 @@ ActiveRecord, DataMapper, MongoMapper, Mongoid, and CouchPotato are supported.
|
||||||
Here is an overview of the strategies supported for each library:
|
Here is an overview of the strategies supported for each library:
|
||||||
|
|
||||||
|_. ORM |_. Truncation |_. Transaction |_. Deletion |
|
|_. ORM |_. Truncation |_. Transaction |_. Deletion |
|
||||||
| ActiveRecord | Yes | Yes | Yes |
|
| ActiveRecord | Yes | **Yes** | Yes |
|
||||||
| DataMapper | Yes | Yes | No |
|
| DataMapper | Yes | **Yes** | No |
|
||||||
| CouchPotato | Yes | No | No |
|
| CouchPotato | **Yes** | No | No |
|
||||||
| MongoMapper | Yes | No | No |
|
| MongoMapper | **Yes** | No | No |
|
||||||
| Mongoid | Yes | No | No |
|
| Mongoid | **Yes** | No | No |
|
||||||
|
|
||||||
|
(Default strategy for each library is denoted in bold)
|
||||||
|
|
||||||
The ActiveRecord @:deletion@ strategy is only useful for when the @:truncation@ strategy causes
|
The ActiveRecord @:deletion@ strategy is only useful for when the @:truncation@ strategy causes
|
||||||
locks (as reported by some Oracle DB users). The @:truncation@ strategy is the preferred option
|
locks (as reported by some Oracle DB users). The @:truncation@ strategy is the preferred option
|
||||||
since it is much faster.
|
since it is much faster.
|
||||||
|
|
||||||
Database Cleaner also includes a @null@ strategy (that does no cleaning at all) which can be used
|
Database Cleaner also includes a @null@ strategy (that does no cleaning at all) which can be used
|
||||||
with any ORM library. _This is the default strategy and will be used unless you
|
with any ORM library. You can also explicitly use it by setting your strategy to @nil@.
|
||||||
specify one._ You can also explicitly use it by setting your strategy to @nil@.
|
|
||||||
|
|
||||||
h2. How to use
|
h2. How to use
|
||||||
|
|
||||||
|
|
|
@ -54,9 +54,9 @@ if orm && strategy
|
||||||
DatabaseCleaner[ orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym ].strategy = strategy.to_sym
|
DatabaseCleaner[ orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym ].strategy = strategy.to_sym
|
||||||
DatabaseCleaner[ another_orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym ].strategy = strategy.to_sym
|
DatabaseCleaner[ another_orm.gsub(/(.)([A-Z]+)/,'\1_\2').downcase.to_sym ].strategy = strategy.to_sym
|
||||||
else
|
else
|
||||||
DatabaseCleaner.strategy = strategy.to_sym
|
DatabaseCleaner.strategy = strategy.to_sym unless strategy == "default"
|
||||||
end
|
end
|
||||||
|
|
||||||
else
|
else
|
||||||
raise "Run 'ORM=ActiveRecord|DataMapper|MongoMapper|CouchPotato [ANOTHER_ORM=...] [MULTIPLE_DBS=true] STRATEGY=transaction|truncation cucumber examples/features'"
|
raise "Run 'ORM=ActiveRecord|DataMapper|MongoMapper|CouchPotato [ANOTHER_ORM=...] [MULTIPLE_DBS=true] STRATEGY=transaction|truncation|default cucumber examples/features'"
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
Feature: database cleaning
|
||||||
|
In order to ease example and feature writing
|
||||||
|
As a developer
|
||||||
|
I want to have my database in a clean state with default strategy
|
||||||
|
|
||||||
|
Scenario Outline: ruby app
|
||||||
|
Given I am using <ORM>
|
||||||
|
And the default cleaning strategy
|
||||||
|
|
||||||
|
When I run my scenarios that rely on a clean database
|
||||||
|
Then I should see all green
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
| ORM |
|
||||||
|
| ActiveRecord |
|
||||||
|
| DataMapper |
|
||||||
|
| MongoMapper |
|
||||||
|
| Mongoid |
|
||||||
|
| CouchPotato |
|
|
@ -9,6 +9,7 @@ module DatabaseCleaner
|
||||||
self.orm = desired_orm
|
self.orm = desired_orm
|
||||||
end
|
end
|
||||||
self.db = opts[:connection] if opts.has_key? :connection
|
self.db = opts[:connection] if opts.has_key? :connection
|
||||||
|
set_default_orm_strategy
|
||||||
end
|
end
|
||||||
|
|
||||||
def db=(desired_db)
|
def db=(desired_db)
|
||||||
|
@ -122,5 +123,14 @@ module DatabaseCleaner
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_default_orm_strategy
|
||||||
|
case orm
|
||||||
|
when :active_record, :data_mapper
|
||||||
|
self.strategy = :transaction
|
||||||
|
when :mongo_mapper, :mongoid, :couch_potato
|
||||||
|
self.strategy = :truncation
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
require File.dirname(__FILE__) + '/../spec_helper'
|
require File.dirname(__FILE__) + '/../spec_helper'
|
||||||
require 'database_cleaner/active_record/transaction'
|
require 'database_cleaner/active_record/transaction'
|
||||||
require 'database_cleaner/data_mapper/transaction'
|
require 'database_cleaner/data_mapper/transaction'
|
||||||
|
require 'database_cleaner/mongo_mapper/truncation'
|
||||||
|
require 'database_cleaner/mongoid/truncation'
|
||||||
|
require 'database_cleaner/couch_potato/truncation'
|
||||||
|
|
||||||
module DatabaseCleaner
|
module DatabaseCleaner
|
||||||
describe Base do
|
describe Base do
|
||||||
|
@ -310,7 +313,9 @@ module DatabaseCleaner
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "strategy" do
|
describe "strategy" do
|
||||||
it "returns a null strategy when strategy no set" do
|
subject { ::DatabaseCleaner::Base.new :a_orm }
|
||||||
|
|
||||||
|
it "returns a null strategy when strategy no set and undetectable" do
|
||||||
subject.instance_values["@strategy"] = nil
|
subject.instance_values["@strategy"] = nil
|
||||||
subject.strategy.should == DatabaseCleaner::NullStrategy
|
subject.strategy.should == DatabaseCleaner::NullStrategy
|
||||||
end
|
end
|
||||||
|
@ -442,5 +447,32 @@ module DatabaseCleaner
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'set_default_orm_strategy' do
|
||||||
|
it 'sets strategy to :transaction for ActiveRecord' do
|
||||||
|
cleaner = DatabaseCleaner::Base.new(:active_record)
|
||||||
|
cleaner.strategy.should be_instance_of DatabaseCleaner::ActiveRecord::Transaction
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets strategy to :transaction for DataMapper' do
|
||||||
|
cleaner = DatabaseCleaner::Base.new(:data_mapper)
|
||||||
|
cleaner.strategy.should be_instance_of DatabaseCleaner::DataMapper::Transaction
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets strategy to :truncation for MongoMapper' do
|
||||||
|
cleaner = DatabaseCleaner::Base.new(:mongo_mapper)
|
||||||
|
cleaner.strategy.should be_instance_of DatabaseCleaner::MongoMapper::Truncation
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets strategy to :truncation for Mongoid' do
|
||||||
|
cleaner = DatabaseCleaner::Base.new(:mongoid)
|
||||||
|
cleaner.strategy.should be_instance_of DatabaseCleaner::Mongoid::Truncation
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'sets strategy to :truncation for CouchPotato' do
|
||||||
|
cleaner = DatabaseCleaner::Base.new(:couch_potato)
|
||||||
|
cleaner.strategy.should be_instance_of DatabaseCleaner::CouchPotato::Truncation
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue