diff options
author | Daniel Morrison <daniel@collectiveidea.com> | 2008-06-15 16:25:59 -0400 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-06-22 20:33:43 -0700 |
commit | 3610997ba32128921115bedb89c322a7bcbe161a (patch) | |
tree | 00ea6993b4c2981bf64a371f26a1d4bcaed7e3be /activerecord/test/cases/dirty_test.rb | |
parent | 0fd3e4cd2b2b1b31304a922dc65284d5363f78b6 (diff) | |
download | rails-3610997ba32128921115bedb89c322a7bcbe161a.tar.gz rails-3610997ba32128921115bedb89c322a7bcbe161a.tar.bz2 rails-3610997ba32128921115bedb89c322a7bcbe161a.zip |
Partial updates don't update lock_version if nothing changed. [#426 state:resolved]
Diffstat (limited to 'activerecord/test/cases/dirty_test.rb')
-rw-r--r-- | activerecord/test/cases/dirty_test.rb | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/activerecord/test/cases/dirty_test.rb b/activerecord/test/cases/dirty_test.rb index c011ffaf57..d70a787208 100644 --- a/activerecord/test/cases/dirty_test.rb +++ b/activerecord/test/cases/dirty_test.rb @@ -2,6 +2,7 @@ require 'cases/helper' require 'models/topic' # For booleans require 'models/pirate' # For timestamps require 'models/parrot' +require 'models/person' # For optimistic locking class Pirate # Just reopening it, not defining it attr_accessor :detected_changes_in_after_update # Boolean for if changes are detected @@ -125,6 +126,24 @@ class DirtyTest < ActiveRecord::TestCase end end + def test_partial_update_with_optimistic_locking + person = Person.new(:first_name => 'foo') + old_lock_version = 1 + + with_partial_updates Person, false do + assert_queries(2) { 2.times { person.save! } } + Person.update_all({ :first_name => 'baz' }, :id => person.id) + end + + with_partial_updates Person, true do + assert_queries(0) { 2.times { person.save! } } + assert_equal old_lock_version, person.reload.lock_version + + assert_queries(1) { person.first_name = 'bar'; person.save! } + assert_not_equal old_lock_version, person.reload.lock_version + end + end + def test_changed_attributes_should_be_preserved_if_save_failure pirate = Pirate.new pirate.parrot_id = 1 |