aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/dirty_test.rb
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2008-03-31 01:10:04 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2008-03-31 01:10:04 +0000
commit6b9448cdd227ef3adbe2f31ecaf64bc7ef062103 (patch)
tree6814f2520554eef1b7ed69e4e284db44d00d7fd9 /activerecord/test/cases/dirty_test.rb
parent2cf72ad250f7c393e6aa97384768ed803686eb97 (diff)
downloadrails-6b9448cdd227ef3adbe2f31ecaf64bc7ef062103.tar.gz
rails-6b9448cdd227ef3adbe2f31ecaf64bc7ef062103.tar.bz2
rails-6b9448cdd227ef3adbe2f31ecaf64bc7ef062103.zip
Partial updates include only unsaved attributes. Off by default; set YourClass.partial_updates = true to enable.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9157 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord/test/cases/dirty_test.rb')
-rw-r--r--activerecord/test/cases/dirty_test.rb47
1 files changed, 45 insertions, 2 deletions
diff --git a/activerecord/test/cases/dirty_test.rb b/activerecord/test/cases/dirty_test.rb
index 61f6ef04aa..356293140c 100644
--- a/activerecord/test/cases/dirty_test.rb
+++ b/activerecord/test/cases/dirty_test.rb
@@ -1,6 +1,7 @@
require 'cases/helper'
require 'models/topic' # For booleans
require 'models/pirate' # For timestamps
+require 'models/parrot'
class Pirate # Just reopening it, not defining it
attr_accessor :detected_changes_in_after_update # Boolean for if changes are detected
@@ -19,7 +20,7 @@ private
end
end
-class DirtyTest < Test::Unit::TestCase
+class DirtyTest < ActiveRecord::TestCase
def test_attribute_changes
# New record - no changes.
pirate = Pirate.new
@@ -43,7 +44,6 @@ class DirtyTest < Test::Unit::TestCase
assert_nil pirate.catchphrase_change
end
- # Rewritten from original tests to use AR
def test_object_should_be_changed_if_any_attribute_is_changed
pirate = Pirate.new
assert !pirate.changed?
@@ -62,6 +62,28 @@ class DirtyTest < Test::Unit::TestCase
assert_equal Hash.new, pirate.changes
end
+ def test_attribute_will_change!
+ pirate = Pirate.create!(:catchphrase => 'arr')
+
+ pirate.catchphrase << ' matey'
+ assert !pirate.catchphrase_changed?
+
+ assert pirate.catchphrase_will_change!
+ assert pirate.catchphrase_changed?
+ assert_equal ['arr matey', 'arr matey'], pirate.catchphrase_change
+
+ pirate.catchphrase << '!'
+ assert pirate.catchphrase_changed?
+ assert_equal ['arr matey', 'arr matey!'], pirate.catchphrase_change
+ end
+
+ def test_association_assignment_changes_foreign_key
+ pirate = Pirate.create!
+ pirate.parrot = Parrot.create!
+ assert pirate.changed?
+ assert_equal %w(parrot_id), pirate.changed
+ end
+
def test_attribute_should_be_compared_with_type_cast
topic = Topic.new
assert topic.approved?
@@ -74,4 +96,25 @@ class DirtyTest < Test::Unit::TestCase
assert topic.approved?
assert !topic.approved_changed?
end
+
+ def test_partial_update
+ pirate = Pirate.new(:catchphrase => 'foo')
+
+ with_partial_updates Pirate, false do
+ assert_queries(2) { 2.times { pirate.save! } }
+ end
+
+ with_partial_updates Pirate, true do
+ assert_queries(0) { 2.times { pirate.save! } }
+ end
+ end
+
+ private
+ def with_partial_updates(klass, on = true)
+ old = klass.partial_updates?
+ klass.partial_updates = on
+ yield
+ ensure
+ klass.partial_updates = old
+ end
end