aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases
diff options
context:
space:
mode:
authorbogdanvlviv <bogdanvlviv@gmail.com>2017-04-22 14:01:59 +0300
committerbogdanvlviv <bogdanvlviv@gmail.com>2017-06-12 23:22:20 +0300
commit7b1ee9f54c5906b49b60b300212e17e0290e8ee5 (patch)
tree20e35a320618a791a6eb25e888fde6b05cfcccd5 /activerecord/test/cases
parent42a80721938453a2ecbba204ce21a0d496756178 (diff)
downloadrails-7b1ee9f54c5906b49b60b300212e17e0290e8ee5.tar.gz
rails-7b1ee9f54c5906b49b60b300212e17e0290e8ee5.tar.bz2
rails-7b1ee9f54c5906b49b60b300212e17e0290e8ee5.zip
Add test cases for optimistic locking
Add test to ensure that locking_column cannot be updated explicitly. Add test to prevent regression on creating new object with explicit value locking_column. Related to #28318
Diffstat (limited to 'activerecord/test/cases')
-rw-r--r--activerecord/test/cases/locking_test.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/activerecord/test/cases/locking_test.rb b/activerecord/test/cases/locking_test.rb
index 3a3b8e51f9..2b139a5da4 100644
--- a/activerecord/test/cases/locking_test.rb
+++ b/activerecord/test/cases/locking_test.rb
@@ -167,6 +167,12 @@ class OptimisticLockingTest < ActiveRecord::TestCase
assert_equal 0, p1.lock_version
end
+ def test_lock_new_when_explicitly_passing_value
+ p1 = Person.new(first_name: "Douglas Adams", lock_version: 42)
+ p1.save!
+ assert_equal 42, p1.lock_version
+ end
+
def test_touch_existing_lock
p1 = Person.find(1)
assert_equal 0, p1.lock_version
@@ -186,6 +192,19 @@ class OptimisticLockingTest < ActiveRecord::TestCase
end
end
+ def test_explicit_update_lock_column_raise_error
+ person = Person.find(1)
+
+ assert_raises(ActiveRecord::StaleObjectError) do
+ person.first_name = "Douglas Adams"
+ person.lock_version = 42
+
+ assert person.lock_version_changed?
+
+ person.save
+ end
+ end
+
def test_lock_column_name_existing
t1 = LegacyThing.find(1)
t2 = LegacyThing.find(1)