aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2010-06-08 14:40:20 -0400
committerJeremy Kemper <jeremy@bitsweat.net>2010-06-08 14:56:08 -0400
commit1b2941cba1165b0721f57524645fe378bee2a950 (patch)
tree40d88f07c8bed5a15304753277917750c5885ed9 /activerecord/test/cases
parent32d4330b8185caa05af6ae69b0769b34b5e159eb (diff)
downloadrails-1b2941cba1165b0721f57524645fe378bee2a950.tar.gz
rails-1b2941cba1165b0721f57524645fe378bee2a950.tar.bz2
rails-1b2941cba1165b0721f57524645fe378bee2a950.zip
Temporarily revert "Update after_commit and after_rollback docs and tests to use new style API with an :on options instead of on_* suffix." and "Add after_commit and after_rollback callbacks to ActiveRecord that are called after transactions either commit or rollback on all records saved or destroyed in the transaction."
This reverts commits d2a49e4b1f30c5997e169110eed94a55aee53f56 and da840d13da865331297d5287391231b1ed39721b. [#2991] Conflicts: activerecord/CHANGELOG activerecord/lib/active_record/transactions.rb activerecord/test/cases/transaction_callbacks_test.rb
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r--activerecord/test/cases/transaction_callbacks_test.rb240
-rw-r--r--activerecord/test/cases/transactions_test.rb33
2 files changed, 0 insertions, 273 deletions
diff --git a/activerecord/test/cases/transaction_callbacks_test.rb b/activerecord/test/cases/transaction_callbacks_test.rb
deleted file mode 100644
index ebc16653cb..0000000000
--- a/activerecord/test/cases/transaction_callbacks_test.rb
+++ /dev/null
@@ -1,240 +0,0 @@
-require "cases/helper"
-require 'models/topic'
-require 'models/reply'
-
-class TransactionCallbacksTest < ActiveRecord::TestCase
- self.use_transactional_fixtures = false
- fixtures :topics
-
- class TopicWithCallbacks < ActiveRecord::Base
- set_table_name :topics
-
- after_commit{|record| record.send(:do_after_commit, nil)}
- after_commit(:on => :create){|record| record.send(:do_after_commit, :create)}
- after_commit(:on => :update){|record| record.send(:do_after_commit, :update)}
- after_commit(:on => :destroy){|record| record.send(:do_after_commit, :destroy)}
- after_rollback{|record| record.send(:do_after_rollback, nil)}
- after_rollback(:on => :create){|record| record.send(:do_after_rollback, :create)}
- after_rollback(:on => :update){|record| record.send(:do_after_rollback, :update)}
- after_rollback(:on => :destroy){|record| record.send(:do_after_rollback, :destroy)}
-
- def history
- @history ||= []
- end
-
- def after_commit_block(on = nil, &block)
- @after_commit ||= {}
- @after_commit[on] ||= []
- @after_commit[on] << block
- end
-
- def after_rollback_block(on = nil, &block)
- @after_rollback ||= {}
- @after_rollback[on] ||= []
- @after_rollback[on] << block
- end
-
- def do_after_commit(on)
- blocks = @after_commit[on] if defined?(@after_commit)
- blocks.each{|b| b.call(self)} if blocks
- end
-
- def do_after_rollback(on)
- blocks = @after_rollback[on] if defined?(@after_rollback)
- blocks.each{|b| b.call(self)} if blocks
- end
- end
-
- def setup
- @first, @second = TopicWithCallbacks.find(1, 3).sort_by { |t| t.id }
- end
-
- def test_call_after_commit_after_transaction_commits
- @first.after_commit_block{|r| r.history << :after_commit}
- @first.after_rollback_block{|r| r.history << :after_rollback}
-
- @first.save!
- assert_equal [:after_commit], @first.history
- end
-
- def test_only_call_after_commit_on_update_after_transaction_commits_for_existing_record
- @first.after_commit_block(:create){|r| r.history << :commit_on_create}
- @first.after_commit_block(:update){|r| r.history << :commit_on_update}
- @first.after_commit_block(:destroy){|r| r.history << :commit_on_destroy}
- @first.after_rollback_block(:create){|r| r.history << :rollback_on_create}
- @first.after_rollback_block(:update){|r| r.history << :rollback_on_update}
- @first.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy}
-
- @first.save!
- assert_equal [:commit_on_update], @first.history
- end
-
- def test_only_call_after_commit_on_destroy_after_transaction_commits_for_destroyed_record
- @first.after_commit_block(:create){|r| r.history << :commit_on_create}
- @first.after_commit_block(:update){|r| r.history << :commit_on_update}
- @first.after_commit_block(:destroy){|r| r.history << :commit_on_destroy}
- @first.after_rollback_block(:create){|r| r.history << :rollback_on_create}
- @first.after_rollback_block(:update){|r| r.history << :rollback_on_update}
- @first.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy}
-
- @first.destroy
- assert_equal [:commit_on_destroy], @first.history
- end
-
- def test_only_call_after_commit_on_create_after_transaction_commits_for_new_record
- @new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Date.today)
- @new_record.after_commit_block(:create){|r| r.history << :commit_on_create}
- @new_record.after_commit_block(:update){|r| r.history << :commit_on_update}
- @new_record.after_commit_block(:destroy){|r| r.history << :commit_on_destroy}
- @new_record.after_rollback_block(:create){|r| r.history << :rollback_on_create}
- @new_record.after_rollback_block(:update){|r| r.history << :rollback_on_update}
- @new_record.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy}
-
- @new_record.save!
- assert_equal [:commit_on_create], @new_record.history
- end
-
- def test_call_after_rollback_after_transaction_rollsback
- @first.after_commit_block{|r| r.history << :after_commit}
- @first.after_rollback_block{|r| r.history << :after_rollback}
-
- Topic.transaction do
- @first.save!
- raise ActiveRecord::Rollback
- end
-
- assert_equal [:after_rollback], @first.history
- end
-
- def test_only_call_after_rollback_on_update_after_transaction_rollsback_for_existing_record
- @first.after_commit_block(:create){|r| r.history << :commit_on_create}
- @first.after_commit_block(:update){|r| r.history << :commit_on_update}
- @first.after_commit_block(:destroy){|r| r.history << :commit_on_destroy}
- @first.after_rollback_block(:create){|r| r.history << :rollback_on_create}
- @first.after_rollback_block(:update){|r| r.history << :rollback_on_update}
- @first.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy}
-
- Topic.transaction do
- @first.save!
- raise ActiveRecord::Rollback
- end
-
- assert_equal [:rollback_on_update], @first.history
- end
-
- def test_only_call_after_rollback_on_destroy_after_transaction_rollsback_for_destroyed_record
- @first.after_commit_block(:create){|r| r.history << :commit_on_create}
- @first.after_commit_block(:update){|r| r.history << :commit_on_update}
- @first.after_commit_block(:destroy){|r| r.history << :commit_on_update}
- @first.after_rollback_block(:create){|r| r.history << :rollback_on_create}
- @first.after_rollback_block(:update){|r| r.history << :rollback_on_update}
- @first.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy}
-
- Topic.transaction do
- @first.destroy
- raise ActiveRecord::Rollback
- end
-
- assert_equal [:rollback_on_destroy], @first.history
- end
-
- def test_only_call_after_rollback_on_create_after_transaction_rollsback_for_new_record
- @new_record = TopicWithCallbacks.new(:title => "New topic", :written_on => Date.today)
- @new_record.after_commit_block(:create){|r| r.history << :commit_on_create}
- @new_record.after_commit_block(:update){|r| r.history << :commit_on_update}
- @new_record.after_commit_block(:destroy){|r| r.history << :commit_on_destroy}
- @new_record.after_rollback_block(:create){|r| r.history << :rollback_on_create}
- @new_record.after_rollback_block(:update){|r| r.history << :rollback_on_update}
- @new_record.after_rollback_block(:destroy){|r| r.history << :rollback_on_destroy}
-
- Topic.transaction do
- @new_record.save!
- raise ActiveRecord::Rollback
- end
-
- assert_equal [:rollback_on_create], @new_record.history
- end
-
- def test_call_after_rollback_when_commit_fails
- @first.connection.class.send(:alias_method, :real_method_commit_db_transaction, :commit_db_transaction)
- begin
- @first.connection.class.class_eval do
- def commit_db_transaction; raise "boom!"; end
- end
-
- @first.after_commit_block{|r| r.history << :after_commit}
- @first.after_rollback_block{|r| r.history << :after_rollback}
-
- assert !@first.save rescue nil
- assert_equal [:after_rollback], @first.history
- ensure
- @first.connection.class.send(:remove_method, :commit_db_transaction)
- @first.connection.class.send(:alias_method, :commit_db_transaction, :real_method_commit_db_transaction)
- end
- end
-
- def test_only_call_after_rollback_on_records_rolled_back_to_a_savepoint
- def @first.rollbacks(i=0); @rollbacks ||= 0; @rollbacks += i if i; end
- def @first.commits(i=0); @commits ||= 0; @commits += i if i; end
- @first.after_rollback_block{|r| r.rollbacks(1)}
- @first.after_commit_block{|r| r.commits(1)}
-
- def @second.rollbacks(i=0); @rollbacks ||= 0; @rollbacks += i if i; end
- def @second.commits(i=0); @commits ||= 0; @commits += i if i; end
- @second.after_rollback_block{|r| r.rollbacks(1)}
- @second.after_commit_block{|r| r.commits(1)}
-
- Topic.transaction do
- @first.save!
- Topic.transaction(:requires_new => true) do
- @second.save!
- raise ActiveRecord::Rollback
- end
- end
-
- assert_equal 1, @first.commits
- assert_equal 0, @first.rollbacks
- assert_equal 0, @second.commits
- assert_equal 1, @second.rollbacks
- end
-
- def test_only_call_after_rollback_on_records_rolled_back_to_a_savepoint_when_release_savepoint_fails
- def @first.rollbacks(i=0); @rollbacks ||= 0; @rollbacks += i if i; end
- def @first.commits(i=0); @commits ||= 0; @commits += i if i; end
-
- @first.after_rollback_block{|r| r.rollbacks(1)}
- @first.after_commit_block{|r| r.commits(1)}
-
- Topic.transaction do
- @first.save
- Topic.transaction(:requires_new => true) do
- @first.save!
- raise ActiveRecord::Rollback
- end
- Topic.transaction(:requires_new => true) do
- @first.save!
- raise ActiveRecord::Rollback
- end
- end
-
- assert_equal 1, @first.commits
- assert_equal 2, @first.rollbacks
- end
-
- def test_after_transaction_callbacks_should_not_raise_errors
- def @first.last_after_transaction_error=(e); @last_transaction_error = e; end
- def @first.last_after_transaction_error; @last_transaction_error; end
- @first.after_commit_block{|r| r.last_after_transaction_error = :commit; raise "fail!";}
- @first.after_rollback_block{|r| r.last_after_transaction_error = :rollback; raise "fail!";}
-
- @first.save!
- assert_equal :commit, @first.last_after_transaction_error
-
- Topic.transaction do
- @first.save!
- raise ActiveRecord::Rollback
- end
-
- assert_equal :rollback, @first.last_after_transaction_error
- end
-end
diff --git a/activerecord/test/cases/transactions_test.rb b/activerecord/test/cases/transactions_test.rb
index 958a4e4f94..00f3b527d7 100644
--- a/activerecord/test/cases/transactions_test.rb
+++ b/activerecord/test/cases/transactions_test.rb
@@ -320,33 +320,6 @@ class TransactionTest < ActiveRecord::TestCase
end
end
- def test_restore_active_record_state_for_all_records_in_a_transaction
- topic_1 = Topic.new(:title => 'test_1')
- topic_2 = Topic.new(:title => 'test_2')
- Topic.transaction do
- assert topic_1.save
- assert topic_2.save
- @first.save
- @second.destroy
- assert_equal false, topic_1.new_record?
- assert_not_nil topic_1.id
- assert_equal false, topic_2.new_record?
- assert_not_nil topic_2.id
- assert_equal false, @first.new_record?
- assert_not_nil @first.id
- assert_equal true, @second.destroyed?
- raise ActiveRecord::Rollback
- end
-
- assert_equal true, topic_1.new_record?
- assert_nil topic_1.id
- assert_equal true, topic_2.new_record?
- assert_nil topic_2.id
- assert_equal false, @first.new_record?
- assert_not_nil @first.id
- assert_equal false, @second.destroyed?
- end
-
if current_adapter?(:PostgreSQLAdapter) && defined?(PGconn::PQTRANS_IDLE)
def test_outside_transaction_works
assert Topic.connection.outside_transaction?
@@ -409,12 +382,6 @@ class TransactionTest < ActiveRecord::TestCase
end
private
- def define_callback_method(callback_method)
- define_method(callback_method) do
- self.history << [callback_method, :method]
- end
- end
-
def add_exception_raising_after_save_callback_to_topic
Topic.class_eval <<-eoruby, __FILE__, __LINE__ + 1
remove_method(:after_save_for_transaction)