-
Notifications
You must be signed in to change notification settings - Fork 21.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Deep hashes are converted into collections of resources. Class attrib…
…ute writer methods. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4985 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
- Loading branch information
Showing
5 changed files
with
132 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
require "#{File.dirname(__FILE__)}/../abstract_unit" | ||
require "fixtures/person" | ||
require "fixtures/street_address" | ||
|
||
class BaseLoadTest < Test::Unit::TestCase | ||
def setup | ||
@matz = { :id => 1, :name => 'Matz' } | ||
@addys = [{ :id => 1, :street => '12345 Street' }, { :id => 2, :street => '67890 Street' }] | ||
@deep = { :id => 1, :street => { | ||
:id => 1, :state => { :id => 1, :name => 'Oregon', | ||
:notable_rivers => [{ :id => 1, :name => 'Willamette' }, | ||
{ :id => 2, :name => 'Columbia', :rafted_by => @matz }] }}} | ||
|
||
@person = Person.new | ||
end | ||
|
||
def test_load_simple_hash | ||
assert_equal Hash.new, @person.attributes | ||
assert_equal @matz.stringify_keys, @person.load(@matz).attributes | ||
end | ||
|
||
def test_load_one_with_existing_resource | ||
address = @person.load(:street_address => @addys.first).street_address | ||
assert_kind_of StreetAddress, address | ||
assert_equal @addys.first.stringify_keys, address.attributes | ||
end | ||
|
||
def test_load_one_with_unknown_resource | ||
address = silence_warnings { @person.load(:address => @addys.first).address } | ||
assert_kind_of Person::Address, address | ||
assert_equal @addys.first.stringify_keys, address.attributes | ||
end | ||
|
||
def test_load_collection_with_existing_resource | ||
addresses = @person.load(:street_addresses => @addys).street_addresses | ||
addresses.each { |address| assert_kind_of StreetAddress, address } | ||
assert_equal @addys.map(&:stringify_keys), addresses.map(&:attributes) | ||
end | ||
|
||
def test_load_collection_with_unknown_resource | ||
assert !Person.const_defined?(:Address), "Address shouldn't exist until autocreated" | ||
addresses = silence_warnings { @person.load(:addresses => @addys).addresses } | ||
assert Person.const_defined?(:Address), "Address should have been autocreated" | ||
addresses.each { |address| assert_kind_of Person::Address, address } | ||
assert_equal @addys.map(&:stringify_keys), addresses.map(&:attributes) | ||
end | ||
|
||
def test_recursively_loaded_collections | ||
person = @person.load(@deep) | ||
assert_equal @deep[:id], person.id | ||
|
||
street = person.street | ||
assert_kind_of Person::Street, street | ||
assert_equal @deep[:street][:id], street.id | ||
|
||
state = street.state | ||
assert_kind_of Person::Street::State, state | ||
assert_equal @deep[:street][:state][:id], state.id | ||
|
||
rivers = state.notable_rivers | ||
assert_kind_of Person::Street::State::NotableRiver, rivers.first | ||
assert_equal @deep[:street][:state][:notable_rivers].first[:id], rivers.first.id | ||
assert_equal @matz[:id], rivers.last.rafted_by.id | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
class StreetAddress < ActiveResource::Base | ||
self.site = "http://37s.sunrise.i:3000/people/:person_id/" | ||
set_element_name 'address' | ||
end | ||
self.element_name = 'address' | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters