aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-01-19 09:38:37 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2012-01-19 09:39:20 -0800
commit4c5b73fef8a41bd2bd8435fa4b00f7c40b721650 (patch)
treee365d2a2478ef3c81baecea85c9aff638509f4ca /activerecord/test
parent00554568e0625b2e4d4212ab7464f02234f74427 (diff)
downloadrails-4c5b73fef8a41bd2bd8435fa4b00f7c40b721650.tar.gz
rails-4c5b73fef8a41bd2bd8435fa4b00f7c40b721650.tar.bz2
rails-4c5b73fef8a41bd2bd8435fa4b00f7c40b721650.zip
Merge pull request #4531 from exviva/pessimistic_with_lock
Add ActiveRecord::Base#with_lock
Diffstat (limited to 'activerecord/test')
-rw-r--r--activerecord/test/cases/locking_test.rb20
1 files changed, 20 insertions, 0 deletions
diff --git a/activerecord/test/cases/locking_test.rb b/activerecord/test/cases/locking_test.rb
index be7edb858f..6da9830525 100644
--- a/activerecord/test/cases/locking_test.rb
+++ b/activerecord/test/cases/locking_test.rb
@@ -415,6 +415,26 @@ unless current_adapter?(:SybaseAdapter, :OpenBaseAdapter) || in_memory_db?
end
end
+ def test_with_lock_commits_transaction
+ person = Person.find 1
+ person.with_lock do
+ person.first_name = 'fooman'
+ person.save!
+ end
+ assert_equal 'fooman', person.reload.first_name
+ end
+
+ def test_with_lock_rolls_back_transaction
+ person = Person.find 1
+ old = person.first_name
+ person.with_lock do
+ person.first_name = 'fooman'
+ person.save!
+ raise 'oops'
+ end rescue nil
+ assert_equal old, person.reload.first_name
+ end
+
if current_adapter?(:PostgreSQLAdapter, :OracleAdapter)
def test_no_locks_no_wait
first, second = duel { Person.find 1 }