mirror of
https://github.com/DatabaseCleaner/database_cleaner
synced 2023-03-27 23:22:03 -04:00
Merge branch 'strategy-getter' of https://github.com/rlue/database_cleaner into rlue-strategy-getter
This commit is contained in:
commit
933df38680
3 changed files with 48 additions and 1 deletions
|
@ -13,6 +13,19 @@ module DatabaseCleaner
|
|||
fetch([orm, opts]) { add_cleaner(orm, **opts) }
|
||||
end
|
||||
|
||||
def strategy
|
||||
strategies = transform_values(&:strategy)
|
||||
|
||||
case strategies.values.uniq.compact.count
|
||||
when 0
|
||||
nil
|
||||
when 1
|
||||
strategies.values.first
|
||||
else
|
||||
strategies
|
||||
end
|
||||
end
|
||||
|
||||
def strategy=(strategy)
|
||||
values.each { |cleaner| cleaner.strategy = strategy }
|
||||
remove_duplicates
|
||||
|
|
|
@ -7,6 +7,7 @@ module DatabaseCleaner
|
|||
extend Forwardable
|
||||
delegate [
|
||||
:[],
|
||||
:strategy,
|
||||
:strategy=,
|
||||
:start,
|
||||
:clean,
|
||||
|
|
|
@ -55,7 +55,11 @@ RSpec.describe DatabaseCleaner::Cleaners do
|
|||
|
||||
context "top level api methods" do
|
||||
context "single orm single db" do
|
||||
let(:cleaner) { cleaners[:active_record] }
|
||||
let!(:cleaner) { cleaners[:active_record] }
|
||||
|
||||
it "should proxy strategy" do
|
||||
expect(cleaners.strategy).to eq(cleaner.strategy)
|
||||
end
|
||||
|
||||
it "should proxy strategy=" do
|
||||
stratagem = double("stratagem")
|
||||
|
@ -154,6 +158,27 @@ RSpec.describe DatabaseCleaner::Cleaners do
|
|||
context "multiple orm proxy methods" do
|
||||
class FakeStrategy < Struct.new(:orm, :db, :strategy); end
|
||||
|
||||
context "with same strategy but differing orms and dbs" do
|
||||
let(:active_record_1) { FakeStrategy.new(:active_record, nil, :truncation) }
|
||||
let(:active_record_2) { FakeStrategy.new(:active_record, :different, :truncation) }
|
||||
let(:data_mapper_1) { FakeStrategy.new(:data_mapper, nil, :truncation) }
|
||||
|
||||
subject(:cleaners) do
|
||||
DatabaseCleaner::Cleaners.new({
|
||||
active_record_1: active_record_1,
|
||||
active_record_2: active_record_2,
|
||||
data_mapper_1: data_mapper_1,
|
||||
})
|
||||
end
|
||||
|
||||
it "should proxy #strategy to all cleaners and return a single result" do
|
||||
expect(cleaners.strategy)
|
||||
.to eq(active_record_1.strategy)
|
||||
.and eq(active_record_2.strategy)
|
||||
.and eq(data_mapper_1.strategy)
|
||||
end
|
||||
end
|
||||
|
||||
context "with differing strategies" do
|
||||
let(:active_record_1) { FakeStrategy.new(:active_record, :default, :truncation) }
|
||||
let(:active_record_2) { FakeStrategy.new(:active_record, :default, :transaction) }
|
||||
|
@ -165,6 +190,14 @@ RSpec.describe DatabaseCleaner::Cleaners do
|
|||
})
|
||||
end
|
||||
|
||||
it "should proxy #strategy to all cleaners and return a hash of results" do
|
||||
expect(cleaners.strategy)
|
||||
.to eq({
|
||||
active_record_1: active_record_1.strategy,
|
||||
active_record_2: active_record_2.strategy
|
||||
})
|
||||
end
|
||||
|
||||
it "should proxy #strategy= to all cleaners and remove duplicate cleaners" do
|
||||
expect { cleaners.strategy = :truncation }
|
||||
.to change { cleaners.values }
|
||||
|
|
Loading…
Reference in a new issue