1 require 'abstract_unit'
2 require "fixtures/person"
3 require "fixtures/street_address"
6 class Note
< ActiveResource
::Base
7 self.site
= "http://37s.sunrise.i:3000"
10 class Comment
< ActiveResource
::Base
11 self.site
= "http://37s.sunrise.i:3000"
17 class Note
< ActiveResource
::Base
18 self.site
= "http://37s.sunrise.i:3000"
21 class Comment
< ActiveResource
::Base
22 self.site
= "http://37s.sunrise.i:3000"
25 module TestDifferentLevels
27 class Note
< ActiveResource
::Base
28 self.site
= "http://37s.sunrise.i:3000"
39 class BaseLoadTest
< Test
::Unit::TestCase
41 @matz = { :id => 1, :name => 'Matz' }
43 @first_address = { :id => 1, :street => '12345 Street' }
44 @addresses = [@first_address, { :id => 2, :street => '67890 Street' }]
45 @addresses_from_xml = { :street_addresses => @addresses }
46 @addresses_from_xml_single = { :street_addresses => [ @first_address ] }
48 @deep = { :id => 1, :street => {
49 :id => 1, :state => { :id => 1, :name => 'Oregon',
51 { :id => 1, :name => 'Willamette' },
52 { :id => 2, :name => 'Columbia', :rafted_by => @matz }] }}}
57 def test_load_expects_hash
58 assert_raise(ArgumentError
) { @person.load
nil }
59 assert_raise(ArgumentError
) { @person.load
'<person id="1"/>' }
62 def test_load_simple_hash
63 assert_equal Hash
.new
, @person.attributes
64 assert_equal
@matz.stringify_keys
, @person.load(@matz).attributes
67 def test_load_one_with_existing_resource
68 address
= @person.load(:street_address => @first_address).street_address
69 assert_kind_of StreetAddress
, address
70 assert_equal
@first_address.stringify_keys
, address
.attributes
73 def test_load_one_with_unknown_resource
74 address
= silence_warnings
{ @person.load(:address => @first_address).address
}
75 assert_kind_of Person
::Address, address
76 assert_equal
@first_address.stringify_keys
, address
.attributes
79 def test_load_collection_with_existing_resource
80 addresses
= @person.load(@addresses_from_xml).street_addresses
81 assert_kind_of Array
, addresses
82 addresses
.each
{ |address
| assert_kind_of StreetAddress
, address
}
83 assert_equal
@addresses.map(&:stringify_keys), addresses
.map(&:attributes)
86 def test_load_collection_with_unknown_resource
87 Person
.__send__(:remove_const, :Address) if Person
.const_defined
?(:Address)
88 assert
!Person
.const_defined
?(:Address), "Address shouldn't exist until autocreated"
89 addresses
= silence_warnings
{ @person.load(:addresses => @addresses).addresses
}
90 assert Person
.const_defined
?(:Address), "Address should have been autocreated"
91 addresses
.each
{ |address
| assert_kind_of Person
::Address, address
}
92 assert_equal
@addresses.map(&:stringify_keys), addresses
.map(&:attributes)
95 def test_load_collection_with_single_existing_resource
96 addresses
= @person.load(@addresses_from_xml_single).street_addresses
97 assert_kind_of Array
, addresses
98 addresses
.each
{ |address
| assert_kind_of StreetAddress
, address
}
99 assert_equal
[ @first_address ].map(&:stringify_keys), addresses
.map(&:attributes)
102 def test_load_collection_with_single_unknown_resource
103 Person
.__send__(:remove_const, :Address) if Person
.const_defined
?(:Address)
104 assert
!Person
.const_defined
?(:Address), "Address shouldn't exist until autocreated"
105 addresses
= silence_warnings
{ @person.load(:addresses => [ @first_address ]).addresses
}
106 assert Person
.const_defined
?(:Address), "Address should have been autocreated"
107 addresses
.each
{ |address
| assert_kind_of Person
::Address, address
}
108 assert_equal
[ @first_address ].map(&:stringify_keys), addresses
.map(&:attributes)
111 def test_recursively_loaded_collections
112 person
= @person.load(@deep)
113 assert_equal
@deep[:id], person
.id
115 street
= person
.street
116 assert_kind_of Person
::Street, street
117 assert_equal
@deep[:street][:id], street
.id
120 assert_kind_of Person
::Street::State, state
121 assert_equal
@deep[:street][:state][:id], state
.id
123 rivers
= state
.notable_rivers
124 assert_kind_of Array
, rivers
125 assert_kind_of Person
::Street::State::NotableRiver, rivers
.first
126 assert_equal
@deep[:street][:state][:notable_rivers].first
[:id], rivers
.first
.id
127 assert_equal
@matz[:id], rivers
.last
.rafted_by
.id
130 def test_nested_collections_within_the_same_namespace
131 n
= Highrise
::Note.new(:comments => [{ :name => "1" }])
132 assert_kind_of Highrise
::Comment, n
.comments
.first
135 def test_nested_collections_within_deeply_nested_namespace
136 n
= Highrise
::Deeply::Nested::Note.new(:comments => [{ :name => "1" }])
137 assert_kind_of Highrise
::Deeply::Nested::Comment, n
.comments
.first
140 def test_nested_collections_in_different_levels_of_namespaces
141 n
= Highrise
::Deeply::Nested::TestDifferentLevels::Note.new(:comments => [{ :name => "1" }])
142 assert_kind_of Highrise
::Deeply::Nested::Comment, n
.comments
.first