mirror of
https://github.com/DatabaseCleaner/database_cleaner
synced 2023-03-27 23:22:03 -04:00
commit
9b3fbb9935
4 changed files with 139 additions and 0 deletions
|
@ -42,6 +42,7 @@ module DatabaseCleaner
|
|||
::MongoMapper = Temp_MM if defined? Temp_MM
|
||||
::Mongoid = Temp_MO if defined? Temp_MO
|
||||
::CouchPotato = Temp_CP if defined? Temp_CP
|
||||
::Sequel = Temp_SQ if defined? Temp_SQ
|
||||
::Moped = Temp_MP if defined? Temp_MP
|
||||
::Ohm = Temp_OH if defined? Temp_OH
|
||||
::Redis = Temp_RS if defined? Temp_RS
|
||||
|
@ -542,6 +543,11 @@ module DatabaseCleaner
|
|||
cleaner.strategy.should be_instance_of DatabaseCleaner::CouchPotato::Truncation
|
||||
end
|
||||
|
||||
it 'sets strategy to :transaction for Sequel' do
|
||||
cleaner = DatabaseCleaner::Base.new(:sequel)
|
||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Sequel::Transaction
|
||||
end
|
||||
|
||||
it 'sets strategy to :truncation for Moped' do
|
||||
cleaner = DatabaseCleaner::Base.new(:moped)
|
||||
cleaner.strategy.should be_instance_of DatabaseCleaner::Moped::Truncation
|
||||
|
|
0
spec/database_cleaner/sequel/truncation/sqlite3_spec.rb
Normal file
0
spec/database_cleaner/sequel/truncation/sqlite3_spec.rb
Normal file
|
@ -3,11 +3,142 @@ require 'database_cleaner/sequel/truncation'
|
|||
require 'database_cleaner/shared_strategy'
|
||||
require 'sequel'
|
||||
|
||||
# XXX: use ActiveRecord's db_config (`db/config.yml`) for CI/dev convenience
|
||||
require 'support/active_record/database_setup'
|
||||
|
||||
module DatabaseCleaner
|
||||
module Sequel
|
||||
describe Truncation do
|
||||
it_should_behave_like "a generic strategy"
|
||||
it_should_behave_like "a generic truncation strategy"
|
||||
end
|
||||
|
||||
shared_examples 'a Sequel truncation strategy' do
|
||||
|
||||
# XXX: it'd be really nice if Truncation accepted db: constructor parameter
|
||||
let(:truncation) do
|
||||
t = Truncation.new
|
||||
t.db = db
|
||||
t
|
||||
end
|
||||
|
||||
context 'when several tables have data' do
|
||||
before(:each) do
|
||||
db.create_table!(:precious_stones) { primary_key :id }
|
||||
db.create_table!(:replaceable_trifles) { primary_key :id }
|
||||
db.create_table!(:worthless_junk) { primary_key :id }
|
||||
|
||||
db[:precious_stones].insert
|
||||
db[:replaceable_trifles].insert
|
||||
db[:worthless_junk].insert
|
||||
end
|
||||
context 'by default' do
|
||||
it 'truncates all the tables' do
|
||||
t = Truncation.new
|
||||
t.db = db
|
||||
t.clean
|
||||
|
||||
expect(db[:replaceable_trifles]).to have(0).rows
|
||||
expect(db[:worthless_junk]).to have(0).rows
|
||||
expect(db[:precious_stones]).to have(0).rows
|
||||
end
|
||||
end
|
||||
context 'when the Truncation is restricted to "only: [...]" some tables' do
|
||||
it 'truncates only the mentioned tables (and leaves the rest alone)' do
|
||||
t = Truncation.new(only: ['worthless_junk', 'replaceable_trifles'])
|
||||
t.db = db
|
||||
t.clean
|
||||
|
||||
expect(db[:replaceable_trifles]).to have(0).rows
|
||||
expect(db[:worthless_junk]).to have(0).rows
|
||||
expect(db[:precious_stones]).to have(1).rows
|
||||
end
|
||||
end
|
||||
context 'when the Truncation is restricted to "except: [...]" some tables' do
|
||||
it 'leaves the mentioned tables alone (and truncates the rest)' do
|
||||
t = Truncation.new(except: ['precious_stones']) # XXX: Strings only, symbols are ignored
|
||||
t.db = db
|
||||
t.clean
|
||||
|
||||
expect(db[:replaceable_trifles]).to be_empty
|
||||
expect(db[:worthless_junk]).to be_empty
|
||||
expect(db[:precious_stones]).to have(1).item
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples_for 'a truncation strategy without autoincrement resets' do
|
||||
it "leaves AUTO_INCREMENT index alone by default (BUG: it should be reset instead)" do
|
||||
# Jordan Hollinger made everything reset auto increment IDs
|
||||
# in commit 6a0104382647e5c06578aeac586c0333c8944492 so I'm pretty sure
|
||||
# everything is meant to reset by default.
|
||||
#
|
||||
# For Postgres, db[:mytable].truncate(restart: true) should work.
|
||||
# For SQLite, db[:sqlite_sequence].where(name: 'mytable').delete
|
||||
|
||||
db.create_table!(:replaceable_trifles) { primary_key :id }
|
||||
table = db[:replaceable_trifles]
|
||||
2.times { table.insert }
|
||||
|
||||
truncation.clean
|
||||
|
||||
id_after_clean = table.insert
|
||||
pending('the bug being fixed') do
|
||||
expect(id_after_clean).to eq 1
|
||||
end
|
||||
end
|
||||
# XXX: it'd be really nice if Truncation accepted db: constructor parameter
|
||||
let(:truncation) do
|
||||
t = Truncation.new
|
||||
t.db = db
|
||||
t
|
||||
end
|
||||
end
|
||||
|
||||
shared_examples_for 'a truncation strategy that resets autoincrement keys by default' do
|
||||
it "resets AUTO_INCREMENT primary keys" do
|
||||
db.create_table!(:replaceable_trifles) { primary_key :id }
|
||||
table = db[:replaceable_trifles]
|
||||
2.times { table.insert }
|
||||
|
||||
truncation.clean
|
||||
|
||||
id_after_clean = table.insert
|
||||
expect(id_after_clean).to eq 1
|
||||
end
|
||||
|
||||
# XXX: it'd be really nice if Truncation accepted db: constructor parameter
|
||||
let(:truncation) do
|
||||
t = Truncation.new
|
||||
t.db = db
|
||||
t
|
||||
end
|
||||
end
|
||||
|
||||
half_supported_configurations = [
|
||||
{url: 'sqlite:///', connection_options: db_config['sqlite3']},
|
||||
{url: 'postgres:///', connection_options: db_config['postgres']},
|
||||
]
|
||||
supported_configurations = [
|
||||
{url: 'mysql:///', connection_options: db_config['mysql']},
|
||||
{url: 'mysql2:///', connection_options: db_config['mysql2']}
|
||||
]
|
||||
supported_configurations.each do |config|
|
||||
describe "Sequel truncation (using a #{config[:url]} connection)" do
|
||||
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
||||
|
||||
it_behaves_like 'a Sequel truncation strategy'
|
||||
it_behaves_like 'a truncation strategy that resets autoincrement keys by default'
|
||||
end
|
||||
end
|
||||
half_supported_configurations.each do |config|
|
||||
describe "Sequel truncation (using a #{config[:url]} connection)" do
|
||||
let(:db) { ::Sequel.connect(config[:url], config[:connection_options]) }
|
||||
|
||||
it_behaves_like 'a Sequel truncation strategy'
|
||||
it_behaves_like 'a truncation strategy without autoincrement resets'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
require 'yaml'
|
||||
|
||||
def db_config
|
||||
config_path = 'db/config.yml'
|
||||
@db_config ||= YAML.load(IO.read(config_path))
|
||||
|
|
Loading…
Reference in a new issue