From eebf33a2347bd4717b6ce966c2b7def4d573ec51 Mon Sep 17 00:00:00 2001 From: Marcin Raczkowski Date: Mon, 6 Sep 2010 03:30:06 +0200 Subject: IdentityMap - Fixes problem with dirty attributes --- activerecord/test/cases/identity_map_test.rb | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'activerecord/test/cases/identity_map_test.rb') diff --git a/activerecord/test/cases/identity_map_test.rb b/activerecord/test/cases/identity_map_test.rb index bc0ceae605..d157443b7b 100644 --- a/activerecord/test/cases/identity_map_test.rb +++ b/activerecord/test/cases/identity_map_test.rb @@ -16,6 +16,9 @@ require 'models/sponsor' require 'models/member' require 'models/essay' require 'models/subscriber' +require "models/pirate" +require "models/bird" +require "models/parrot" class IdentityMapTest < ActiveRecord::TestCase fixtures :accounts, :companies, :developers, :projects, :topics, @@ -70,6 +73,35 @@ class IdentityMapTest < ActiveRecord::TestCase assert_same(t1, t2) end + def test_loading_new_instance_should_not_update_dirty_attributes + swistak = Subscriber.find(:first, :conditions => {:nick => 'swistak'}) + swistak.name = "Swistak Sreberkowiec" + assert_equal(["name"], swistak.changed) + + s = Subscriber.find('swistak') + + assert swistak.name_changed? + assert_equal("Swistak Sreberkowiec", swistak.name) + end + + def test_loading_new_instance_should_remove_dirt + #assert_equal({'name' => ["Marcin Raczkowski", "Swistak Sreberkowiec"]}, swistak.changes) + #assert_equal("Swistak Sreberkowiec", swistak.name) + end + + def test_has_many_associations + pirate = Pirate.create!(:catchphrase => "Don' botharrr talkin' like one, savvy?") + pirate.birds.create!(:name => 'Posideons Killer') + pirate.birds.create!(:name => 'Killer bandita Dionne') + + posideons, killer = pirate.birds + + pirate.reload + + pirate.birds_attributes = [{ :id => posideons.id, :name => 'Grace OMalley' }] + assert_equal 'Grace OMalley', pirate.birds.send(:load_target).find { |r| r.id == posideons.id }.name + end + # Currently AR is not allowing changing primary key (see Persistence#update) # So we ignore it. If this changes, this test needs to be uncommented. # def test_updating_of_pkey -- cgit v1.2.3