diff options
author | Rick Olson <technoweenie@gmail.com> | 2006-12-12 15:29:54 +0000 |
---|---|---|
committer | Rick Olson <technoweenie@gmail.com> | 2006-12-12 15:29:54 +0000 |
commit | 55d4dbb8df9b4e6e46d461352f97e35ba69b417e (patch) | |
tree | 399c3929848e39f21f5770a9e11e5138407ea745 /activeresource/test/base | |
parent | 2f5ee5a812bee922b198c7efbe3ffff29d072ffd (diff) | |
download | rails-55d4dbb8df9b4e6e46d461352f97e35ba69b417e.tar.gz rails-55d4dbb8df9b4e6e46d461352f97e35ba69b417e.tar.bz2 rails-55d4dbb8df9b4e6e46d461352f97e35ba69b417e.zip |
Fix issues with ActiveResource collection handling. Closes #6291. [bmilekic]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5714 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activeresource/test/base')
-rw-r--r-- | activeresource/test/base/load_test.rb | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/activeresource/test/base/load_test.rb b/activeresource/test/base/load_test.rb index ca8d924693..6d2f65e1c5 100644 --- a/activeresource/test/base/load_test.rb +++ b/activeresource/test/base/load_test.rb @@ -8,13 +8,14 @@ class BaseLoadTest < Test::Unit::TestCase @first_address = { :id => 1, :street => '12345 Street' } @addresses = [@first_address, { :id => 2, :street => '67890 Street' }] - @addresses_from_xml = { :street_addresses => { :street_address => @addresses }} + @addresses_from_xml = { :street_addresses => @addresses } + @addresses_from_xml_single = { :street_addresses => [ @first_address ] } @deep = { :id => 1, :street => { :id => 1, :state => { :id => 1, :name => 'Oregon', - :notable_rivers => { :notable_river => [ + :notable_rivers => [ { :id => 1, :name => 'Willamette' }, - { :id => 2, :name => 'Columbia', :rafted_by => @matz }] }}}} + { :id => 2, :name => 'Columbia', :rafted_by => @matz }] }}} @person = Person.new end @@ -49,6 +50,7 @@ class BaseLoadTest < Test::Unit::TestCase end def test_load_collection_with_unknown_resource + Person.send(:remove_const, :Address) if Person.const_defined?(:Address) assert !Person.const_defined?(:Address), "Address shouldn't exist until autocreated" addresses = silence_warnings { @person.load(:addresses => @addresses).addresses } assert Person.const_defined?(:Address), "Address should have been autocreated" @@ -56,6 +58,22 @@ class BaseLoadTest < Test::Unit::TestCase assert_equal @addresses.map(&:stringify_keys), addresses.map(&:attributes) end + def test_load_collection_with_single_existing_resource + addresses = @person.load(@addresses_from_xml_single).street_addresses + assert_kind_of Array, addresses + addresses.each { |address| assert_kind_of StreetAddress, address } + assert_equal [ @first_address ].map(&:stringify_keys), addresses.map(&:attributes) + end + + def test_load_collection_with_single_unknown_resource + Person.send(:remove_const, :Address) if Person.const_defined?(:Address) + assert !Person.const_defined?(:Address), "Address shouldn't exist until autocreated" + addresses = silence_warnings { @person.load(:addresses => [ @first_address ]).addresses } + assert Person.const_defined?(:Address), "Address should have been autocreated" + addresses.each { |address| assert_kind_of Person::Address, address } + assert_equal [ @first_address ].map(&:stringify_keys), addresses.map(&:attributes) + end + def test_recursively_loaded_collections person = @person.load(@deep) assert_equal @deep[:id], person.id @@ -71,7 +89,7 @@ class BaseLoadTest < Test::Unit::TestCase rivers = state.notable_rivers assert_kind_of Array, rivers assert_kind_of Person::Street::State::NotableRiver, rivers.first - assert_equal @deep[:street][:state][:notable_rivers][:notable_river].first[:id], rivers.first.id + assert_equal @deep[:street][:state][:notable_rivers].first[:id], rivers.first.id assert_equal @matz[:id], rivers.last.rafted_by.id end end |