prevent specs from leaking global state modifications.

This commit is contained in:
Micah Geisel 2018-04-26 09:59:07 -07:00
parent 467ab08e35
commit ae234c4e1a
15 changed files with 27 additions and 65 deletions

View File

@ -79,7 +79,7 @@ module DatabaseCleaner
if ::ActiveRecord::Base.respond_to?(:descendants)
database_name = connection_hash["database"] || connection_hash[:database]
models = ::ActiveRecord::Base.descendants
models.detect { |m| m.connection_pool.spec.config[:database] == database_name }
models.select(&:connection_pool).detect { |m| m.connection_pool.spec.config[:database] == database_name }
end
end

View File

@ -2,6 +2,7 @@ require 'spec_helper'
require 'active_record'
require 'database_cleaner/active_record/base'
require 'database_cleaner/shared_strategy'
require 'support/active_record/schema_setup'
class FakeModel
def self.connection

View File

@ -21,23 +21,19 @@ module DatabaseCleaner
before do
connection.stub(:transaction)
connection.stub(begin_transaction_method)
connection.stub(:respond_to?).with(:begin_transaction).and_return(:begin_transaction == begin_transaction_method)
end
it "should increment open transactions if possible" do
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(true)
connection.should_receive(:increment_open_transactions)
Transaction.new.start
end
it "should tell ActiveRecord to increment connection if its not possible to increment current connection" do
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(false)
::ActiveRecord::Base.should_receive(:increment_open_transactions)
Transaction.new.start
end
it "should start a transaction" do
connection.stub(:respond_to?).with(:increment_open_transactions).and_return(true)
connection.stub(:increment_open_transactions)
connection.should_receive(begin_transaction_method)
connection.should_receive(:transaction)
@ -61,9 +57,6 @@ module DatabaseCleaner
it "should decrement open transactions if possible" do
connection.should_receive(:open_transactions).and_return(1)
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(true)
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
connection.stub(:rollback_db_transaction)
connection.should_receive(:decrement_open_transactions)
@ -78,9 +71,6 @@ module DatabaseCleaner
it "should decrement connection via ActiveRecord::Base if connection won't" do
connection.should_receive(:open_transactions).and_return(1)
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
connection.stub(:rollback_db_transaction)
::ActiveRecord::Base.should_receive(:decrement_open_transactions)
@ -91,15 +81,9 @@ module DatabaseCleaner
connection_pool.stub(:connections).and_return([connection, connection_2])
connection.should_receive(:open_transactions).and_return(1)
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
connection.stub(:rollback_db_transaction)
connection_2.should_receive(:open_transactions).and_return(1)
connection_2.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
connection_2.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
connection_2.stub(:respond_to?).with(:rollback_transaction).and_return(false)
connection_2.stub(:rollback_db_transaction)
::ActiveRecord::Base.should_receive(:decrement_open_transactions).twice
@ -110,9 +94,6 @@ module DatabaseCleaner
connection_pool.stub(:connections).and_return([connection, connection_2])
connection.should_receive(:open_transactions).and_return(1)
connection.stub(:respond_to?).with(:decrement_open_transactions).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction).and_return(false)
connection.stub(:rollback_db_transaction)
connection_2.should_receive(:open_transactions).and_return(0)
@ -150,8 +131,6 @@ module DatabaseCleaner
it "should decrement connection via ActiveRecord::Base if connection won't" do
connection.should_receive(:open_transactions).and_return(1)
connection.stub(:respond_to?).with(:rollback_transaction_records, true).and_return(false)
connection.stub(:respond_to?).with(:rollback_transaction).and_return(true)
connection.stub(:rollback_transaction)
::ActiveRecord::Base.should_not_receive(:decrement_open_transactions)

View File

@ -7,9 +7,9 @@ require 'database_cleaner/active_record/truncation/shared_fast_truncation'
module ActiveRecord
module ConnectionAdapters
describe do
before(:all) { active_record_mysql2_setup }
before(:all) { MySQL2Helper.active_record_mysql2_setup }
let(:connection) { active_record_mysql2_connection }
let(:connection) { MySQL2Helper.active_record_mysql2_connection }
describe "#truncate_table" do
it "should truncate the table" do
@ -30,7 +30,7 @@ module ActiveRecord
end
it_behaves_like "an adapter with pre-count truncation" do
let(:connection) { active_record_mysql2_connection }
let(:connection) { MySQL2Helper.active_record_mysql2_connection }
end
end
end

View File

@ -7,9 +7,9 @@ require 'database_cleaner/active_record/truncation/shared_fast_truncation'
module ActiveRecord
module ConnectionAdapters
describe do
before(:all) { active_record_mysql_setup }
before(:all) { MySQLHelper.active_record_mysql_setup }
let(:connection) { active_record_mysql_connection }
let(:connection) { MySQLHelper.active_record_mysql_connection }
describe "#truncate_table" do
it "should truncate the table" do
@ -30,7 +30,7 @@ module ActiveRecord
end
it_behaves_like "an adapter with pre-count truncation" do
let(:connection) { active_record_mysql_connection }
let(:connection) { MySQLHelper.active_record_mysql_connection }
end
end
end

View File

@ -8,18 +8,18 @@ module ActiveRecord
module ConnectionAdapters
describe "schema_migrations table" do
it "is not truncated" do
active_record_pg_migrate
PostgreSQLHelper.active_record_pg_migrate
DatabaseCleaner::ActiveRecord::Truncation.new.clean
result = active_record_pg_connection.execute("select count(*) from schema_migrations;")
result = PostgreSQLHelper.active_record_pg_connection.execute("select count(*) from schema_migrations;")
result.values.first.should eq ["2"]
end
end
describe do
before(:all) { active_record_pg_setup }
before(:all) { PostgreSQLHelper.active_record_pg_setup }
let(:connection) do
active_record_pg_connection
PostgreSQLHelper.active_record_pg_connection
end
before(:each) do
@ -67,7 +67,7 @@ module ActiveRecord
end
it_behaves_like "an adapter with pre-count truncation" do
let(:connection) { active_record_pg_connection }
let(:connection) { PostgreSQLHelper.active_record_pg_connection }
end
end

View File

@ -6,10 +6,10 @@ require 'database_cleaner/active_record/truncation'
module ActiveRecord
module ConnectionAdapters
describe do
before(:all) { active_record_sqlite3_setup }
before(:all) { SQLite3Helper.active_record_sqlite3_setup }
let(:connection) do
active_record_sqlite3_connection
SQLite3Helper.active_record_sqlite3_connection
end
before(:each) do

View File

@ -302,14 +302,11 @@ module DatabaseCleaner
end
it "should check that strategy supports db specification" do
strategy.should_receive(:respond_to?).with(:db=).and_return(true)
strategy.stub(:db=)
subject.strategy_db = :a_db
end
context "when strategy supports db specification" do
before(:each) { strategy.stub(:respond_to?).with(:db=).and_return true }
it "should pass db to the strategy" do
strategy.should_receive(:db=).with(:a_db)
subject.strategy_db = :a_db
@ -317,8 +314,6 @@ module DatabaseCleaner
end
context "when strategy doesn't supports db specification" do
before(:each) { strategy.stub(:respond_to?).with(:db=).and_return false }
it "should check to see if db is :default" do
db = double("default")
db.should_receive(:==).with(:default).and_return(true)
@ -540,7 +535,6 @@ module DatabaseCleaner
end
it "should use available_strategies (for the error message) if its available" do
strategy_class.stub(:respond_to?).with(:available_strategies).and_return(true)
strategy_class.should_receive(:available_strategies).and_return([])
subject.stub(:orm_module).and_return(strategy_class)

View File

@ -1,18 +1,18 @@
require 'spec_helper'
require 'dm-core'
require 'dm-sqlite-adapter'
require File.expand_path('../../../../support/data_mapper/sqlite3_setup', __FILE__)
require 'support/data_mapper/sqlite3_setup'
require 'database_cleaner/data_mapper/truncation'
module DataMapper
module ConnectionAdapters
describe do
before(:all) { data_mapper_sqlite3_setup }
before(:all) { DataMapperSQLite3Helper.data_mapper_sqlite3_setup }
let(:adapter) { DataMapperSQLite3Adapter }
let(:connection) do
data_mapper_sqlite3_connection
DataMapperSQLite3Helper.data_mapper_sqlite3_connection
end
before(:each) do

View File

@ -23,16 +23,10 @@ RSpec.configure do |config|
config.run_all_when_everything_filtered = true
config.expect_with :rspec do |expectations|
# Enable only the newer, non-monkey-patching expect syntax.
# For more details, see:
# - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
expectations.syntax = [:should, :expect]
end
config.mock_with :rspec do |mocks|
# Enable only the newer, non-monkey-patching expect syntax.
# For more details, see:
# - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
mocks.syntax = [:should, :expect]
end
end

View File

@ -2,6 +2,8 @@ require 'support/active_record/database_setup'
require 'support/active_record/schema_setup'
module MySQL2Helper
extend self
puts "Active Record #{ActiveRecord::VERSION::STRING}, mysql2"
# require 'logger'
@ -39,6 +41,3 @@ module MySQL2Helper
end
end
RSpec.configure do |c|
c.include MySQL2Helper
end

View File

@ -2,6 +2,8 @@ require 'support/active_record/database_setup'
require 'support/active_record/schema_setup'
module MySQLHelper
extend self
puts "Active Record #{ActiveRecord::VERSION::STRING}, mysql"
# require 'logger'
@ -39,6 +41,3 @@ module MySQLHelper
end
end
RSpec.configure do |c|
c.include MySQLHelper
end

View File

@ -2,6 +2,8 @@ require 'support/active_record/database_setup'
require 'support/active_record/schema_setup'
module PostgreSQLHelper
extend self
puts "Active Record #{ActiveRecord::VERSION::STRING}, pg"
# ActiveRecord::Base.logger = Logger.new(STDERR)
@ -43,6 +45,3 @@ module PostgreSQLHelper
end
end
RSpec.configure do |c|
c.include PostgreSQLHelper
end

View File

@ -2,6 +2,8 @@ require 'support/active_record/database_setup'
require 'support/active_record/schema_setup'
module SQLite3Helper
extend self
puts "Active Record #{ActiveRecord::VERSION::STRING}, sqlite3"
# ActiveRecord::Base.logger = Logger.new(STDERR)
@ -35,6 +37,3 @@ module SQLite3Helper
end
end
RSpec.configure do |c|
c.include SQLite3Helper
end

View File

@ -2,6 +2,7 @@ require 'support/active_record/database_setup'
require 'support/data_mapper/schema_setup'
module DataMapperSQLite3Helper
extend self
puts "DataMapper #{DataMapper::VERSION}, sqlite3"
@ -34,6 +35,3 @@ module DataMapperSQLite3Helper
end
end
RSpec.configure do |c|
c.include(DataMapperSQLite3Helper)
end