aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorPaul Nikitochkin <paul.nikitochkin@gmail.com>2013-07-08 12:31:07 +0300
committerPaul Nikitochkin <paul.nikitochkin@gmail.com>2013-07-14 20:35:31 +0300
commite0d59e6219c752d8cffc6b78c2240755f5728922 (patch)
treeee900eaf247547a9596eaf44eee5ea28b96a0584 /activerecord/test
parent9fbdd9d83e8e2775845cbc581e0c357f99d292e4 (diff)
downloadrails-e0d59e6219c752d8cffc6b78c2240755f5728922.tar.gz
rails-e0d59e6219c752d8cffc6b78c2240755f5728922.tar.bz2
rails-e0d59e6219c752d8cffc6b78c2240755f5728922.zip
#4566: Remove extra decrement of transaction level
`rollback_active_record_state!` tries to restore model state on `Exception` by invoking `restore_transaction_record_state` it decrement deep level by `1`. After restoring it ensure that states to be cleared and level decremented by invoking `clear_transaction_record_state`, which cause the bug: because state already reduced in `restore_transaction_record_state`. Removed double derement of transaction level and removed duplicated code which clear transaction state for top level.
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/transactions_test.rb14
1 files changed, 14 insertions, 0 deletions
diff --git a/activerecord/test/cases/transactions_test.rb b/activerecord/test/cases/transactions_test.rb
index c0cad52b22..9c5f2e4724 100644
--- a/activerecord/test/cases/transactions_test.rb
+++ b/activerecord/test/cases/transactions_test.rb
@@ -117,6 +117,20 @@ class TransactionTest < ActiveRecord::TestCase
assert !Topic.find(1).approved?
end
+ def test_raising_exception_in_nested_transaction_restore_state_in_save
+ topic = Topic.new
+
+ def topic.after_save_for_transaction
+ raise 'Make the transaction rollback'
+ end
+
+ assert_raises(RuntimeError) do
+ Topic.transaction { topic.save }
+ end
+
+ assert topic.new_record?, "#{topic.inspect} should be new record"
+ end
+
def test_update_should_rollback_on_failure
author = Author.find(1)
posts_count = author.posts.size