From f921a26b258b182a63390d1043160b912dbbd5a5 Mon Sep 17 00:00:00 2001 From: David Kim Date: Fri, 16 Dec 2011 17:24:55 +1030 Subject: [PATCH] Don't clean it if nothing can be cleaned. --- lib/database_cleaner/active_record/transaction.rb | 2 ++ .../active_record/transaction_spec.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/lib/database_cleaner/active_record/transaction.rb b/lib/database_cleaner/active_record/transaction.rb index 10528cc..b4e9fd5 100644 --- a/lib/database_cleaner/active_record/transaction.rb +++ b/lib/database_cleaner/active_record/transaction.rb @@ -14,6 +14,8 @@ module DatabaseCleaner::ActiveRecord def clean + return unless connection_klass.connection.open_transactions > 0 + connection_klass.connection.rollback_db_transaction if connection_klass.connection.respond_to?(:decrement_open_transactions) diff --git a/spec/database_cleaner/active_record/transaction_spec.rb b/spec/database_cleaner/active_record/transaction_spec.rb index a354274..73ea217 100644 --- a/spec/database_cleaner/active_record/transaction_spec.rb +++ b/spec/database_cleaner/active_record/transaction_spec.rb @@ -38,12 +38,17 @@ module DatabaseCleaner describe "#clean" do it "should start a transaction" do + connection.should_receive(:open_transactions).and_return(1) + connection.stub!(:decrement_open_transactions) connection.should_receive(:rollback_db_transaction) Transaction.new.clean end + 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!(:rollback_db_transaction) @@ -51,7 +56,14 @@ module DatabaseCleaner Transaction.new.clean end + it "should not try to decrement or rollback if open_transactions is 0 for whatever reason" do + connection.should_receive(:open_transactions).and_return(0) + + Transaction.new.clean + end + 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!(:rollback_db_transaction)