From 4a1bb9d0ce985fd105f930078a733601b29ef8a4 Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Thu, 12 Feb 2015 23:06:44 -0500 Subject: Add transaction callbacks that wont enroll to the transaction. Add after_commit_without_transaction_enrollment and after_rollback_without_transaction_enrollment private callbacks so we can create after_commit and after_rollback callbacks without having the records automatic enrolled in the transaction. [fixes #18904] --- .../test/cases/transaction_callbacks_test.rb | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) (limited to 'activerecord/test/cases') diff --git a/activerecord/test/cases/transaction_callbacks_test.rb b/activerecord/test/cases/transaction_callbacks_test.rb index f185cda263..60b0fd4112 100644 --- a/activerecord/test/cases/transaction_callbacks_test.rb +++ b/activerecord/test/cases/transaction_callbacks_test.rb @@ -400,3 +400,62 @@ class CallbacksOnMultipleActionsTest < ActiveRecord::TestCase assert_equal [:update_and_destroy, :create_and_destroy], topic.history end end + + +class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase + + class TopicWithoutTransactionalEnrollmentCallbacks < ActiveRecord::Base + self.table_name = :topics + + after_commit_without_transaction_enrollment { |r| r.history << :commit } + after_rollback_without_transaction_enrollment { |r| r.history << :rollback } + + def history + @history ||= [] + end + end + + def setup + @topic = TopicWithoutTransactionalEnrollmentCallbacks.create! + end + + def test_commit_dont_enroll_transaction + @topic.transaction do + @topic.content = 'foo' + @topic.save! + end + assert @topic.history.empty? + end + + def test_commit_enrollment_transaction_when_call_add + @topic.transaction do + 2.times do + @topic.content = 'foo' + @topic.save! + end + @topic.class.connection.add_transaction_record(@topic) + end + assert_equal [:commit], @topic.history + end + + def test_rollback_dont_enroll_transaction + @topic.transaction do + @topic.content = 'foo' + @topic.save! + raise ActiveRecord::Rollback + end + assert @topic.history.empty? + end + + def test_rollback_enrollment_transaction_when_call_add + @topic.transaction do + 2.times do + @topic.content = 'foo' + @topic.save! + end + @topic.class.connection.add_transaction_record(@topic) + raise ActiveRecord::Rollback + end + assert_equal [:rollback], @topic.history + end +end -- cgit v1.2.3 From 7d2a87281c7fc8ecfdf6ab7d6beedc49d166424b Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Fri, 13 Feb 2015 21:10:53 -0500 Subject: Add before_commit [fixes #18903] --- activerecord/test/cases/transaction_callbacks_test.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'activerecord/test/cases') diff --git a/activerecord/test/cases/transaction_callbacks_test.rb b/activerecord/test/cases/transaction_callbacks_test.rb index 60b0fd4112..5cac9ff84b 100644 --- a/activerecord/test/cases/transaction_callbacks_test.rb +++ b/activerecord/test/cases/transaction_callbacks_test.rb @@ -407,7 +407,8 @@ class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase class TopicWithoutTransactionalEnrollmentCallbacks < ActiveRecord::Base self.table_name = :topics - after_commit_without_transaction_enrollment { |r| r.history << :commit } + before_commit_without_transaction_enrollment { |r| r.history << :before_commit } + after_commit_without_transaction_enrollment { |r| r.history << :after_commit } after_rollback_without_transaction_enrollment { |r| r.history << :rollback } def history @@ -435,7 +436,7 @@ class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase end @topic.class.connection.add_transaction_record(@topic) end - assert_equal [:commit], @topic.history + assert_equal [:before_commit, :after_commit], @topic.history end def test_rollback_dont_enroll_transaction -- cgit v1.2.3 From 45755135fe9669d1ba3c8567c517559a6a291304 Mon Sep 17 00:00:00 2001 From: Arthur Neves Date: Tue, 24 Feb 2015 19:16:45 -0500 Subject: Rename tests --- activerecord/test/cases/transaction_callbacks_test.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'activerecord/test/cases') diff --git a/activerecord/test/cases/transaction_callbacks_test.rb b/activerecord/test/cases/transaction_callbacks_test.rb index 5cac9ff84b..e868022fed 100644 --- a/activerecord/test/cases/transaction_callbacks_test.rb +++ b/activerecord/test/cases/transaction_callbacks_test.rb @@ -420,7 +420,7 @@ class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase @topic = TopicWithoutTransactionalEnrollmentCallbacks.create! end - def test_commit_dont_enroll_transaction + def test_commit_does_not_run_transactions_callbacks_without_enrollment @topic.transaction do @topic.content = 'foo' @topic.save! @@ -428,7 +428,7 @@ class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase assert @topic.history.empty? end - def test_commit_enrollment_transaction_when_call_add + def test_commit_run_transactions_callbacks_with_explicit_enrollment @topic.transaction do 2.times do @topic.content = 'foo' @@ -439,7 +439,7 @@ class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase assert_equal [:before_commit, :after_commit], @topic.history end - def test_rollback_dont_enroll_transaction + def test_rollback_does_not_run_transactions_callbacks_without_enrollment @topic.transaction do @topic.content = 'foo' @topic.save! @@ -448,7 +448,7 @@ class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase assert @topic.history.empty? end - def test_rollback_enrollment_transaction_when_call_add + def test_rollback_run_transactions_callbacks_with_explicit_enrollment @topic.transaction do 2.times do @topic.content = 'foo' -- cgit v1.2.3