mirror of
https://github.com/DatabaseCleaner/database_cleaner
synced 2023-03-27 23:22:03 -04:00
Merge branch 'rlue-strategy-getter'
This commit is contained in:
commit
22b87c882f
3 changed files with 55 additions and 1 deletions
|
@ -13,6 +13,25 @@ module DatabaseCleaner
|
||||||
fetch([orm, opts]) { add_cleaner(orm, **opts) }
|
fetch([orm, opts]) { add_cleaner(orm, **opts) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# It returns a hash with all the strategies associated with
|
||||||
|
# all the cleaners.
|
||||||
|
#
|
||||||
|
# For example:
|
||||||
|
#
|
||||||
|
# ```
|
||||||
|
# cleaners.strategy
|
||||||
|
# => {
|
||||||
|
# :active_record_1 => :truncation,
|
||||||
|
# :active_record_2 => :truncation,
|
||||||
|
# :data_mapper_1 => :truncation
|
||||||
|
# }
|
||||||
|
# ```
|
||||||
|
#
|
||||||
|
# @return [Hash]
|
||||||
|
def strategy
|
||||||
|
transform_values(&:strategy)
|
||||||
|
end
|
||||||
|
|
||||||
def strategy=(strategy)
|
def strategy=(strategy)
|
||||||
values.each { |cleaner| cleaner.strategy = strategy }
|
values.each { |cleaner| cleaner.strategy = strategy }
|
||||||
remove_duplicates
|
remove_duplicates
|
||||||
|
|
|
@ -7,6 +7,7 @@ module DatabaseCleaner
|
||||||
extend Forwardable
|
extend Forwardable
|
||||||
delegate [
|
delegate [
|
||||||
:[],
|
:[],
|
||||||
|
:strategy,
|
||||||
:strategy=,
|
:strategy=,
|
||||||
:start,
|
:start,
|
||||||
:clean,
|
:clean,
|
||||||
|
|
|
@ -55,7 +55,7 @@ RSpec.describe DatabaseCleaner::Cleaners do
|
||||||
|
|
||||||
context "top level api methods" do
|
context "top level api methods" do
|
||||||
context "single orm single db" do
|
context "single orm single db" do
|
||||||
let(:cleaner) { cleaners[:active_record] }
|
let!(:cleaner) { cleaners[:active_record] }
|
||||||
|
|
||||||
it "should proxy strategy=" do
|
it "should proxy strategy=" do
|
||||||
stratagem = double("stratagem")
|
stratagem = double("stratagem")
|
||||||
|
@ -154,6 +154,32 @@ RSpec.describe DatabaseCleaner::Cleaners do
|
||||||
context "multiple orm proxy methods" do
|
context "multiple orm proxy methods" do
|
||||||
class FakeStrategy < Struct.new(:orm, :db, :strategy); end
|
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
|
||||||
|
|
||||||
|
let(:result) do
|
||||||
|
{
|
||||||
|
:active_record_1 => :truncation,
|
||||||
|
:active_record_2 => :truncation,
|
||||||
|
:data_mapper_1 => :truncation
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should proxy #strategy to all cleaners and return a single result" do
|
||||||
|
expect(cleaners.strategy).to eq(result)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "with differing strategies" do
|
context "with differing strategies" do
|
||||||
let(:active_record_1) { FakeStrategy.new(:active_record, :default, :truncation) }
|
let(:active_record_1) { FakeStrategy.new(:active_record, :default, :truncation) }
|
||||||
let(:active_record_2) { FakeStrategy.new(:active_record, :default, :transaction) }
|
let(:active_record_2) { FakeStrategy.new(:active_record, :default, :transaction) }
|
||||||
|
@ -165,6 +191,14 @@ RSpec.describe DatabaseCleaner::Cleaners do
|
||||||
})
|
})
|
||||||
end
|
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
|
it "should proxy #strategy= to all cleaners and remove duplicate cleaners" do
|
||||||
expect { cleaners.strategy = :truncation }
|
expect { cleaners.strategy = :truncation }
|
||||||
.to change { cleaners.values }
|
.to change { cleaners.values }
|
||||||
|
|
Loading…
Reference in a new issue