diff options
Diffstat (limited to 'activeresource/test/base_test.rb')
-rw-r--r-- | activeresource/test/base_test.rb | 109 |
1 files changed, 94 insertions, 15 deletions
diff --git a/activeresource/test/base_test.rb b/activeresource/test/base_test.rb index e4839613ee..97f2ea3d01 100644 --- a/activeresource/test/base_test.rb +++ b/activeresource/test/base_test.rb @@ -1,20 +1,32 @@ require "#{File.dirname(__FILE__)}/abstract_unit" require "fixtures/person" +require "fixtures/street_address" class BaseTest < Test::Unit::TestCase def setup - ActiveResource::HttpMock.respond_to( - ActiveResource::Request.new(:get, "/people/1.xml") => ActiveResource::Response.new("<person><name>Matz</name><id type='integer'>1</id></person>"), - ActiveResource::Request.new(:get, "/people/2.xml") => ActiveResource::Response.new("<person><name>David</name><id type='integer'>2</id></person>"), - ActiveResource::Request.new(:put, "/people/1.xml") => ActiveResource::Response.new({}, 200), - ActiveResource::Request.new(:delete, "/people/1.xml") => ActiveResource::Response.new({}, 200), - ActiveResource::Request.new(:delete, "/people/2.xml") => ActiveResource::Response.new({}, 400), - ActiveResource::Request.new(:post, "/people.xml") => ActiveResource::Response.new({}, 200), - ActiveResource::Request.new(:get, "/people/99.xml") => ActiveResource::Response.new({}, 404), - ActiveResource::Request.new(:get, "/people.xml") => ActiveResource::Response.new( - "<people><person><name>Matz</name><id type='integer'>1</id></person><person><name>David</name><id type='integer'>2</id></person></people>" - ) - ) + @matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person') + @david = { :id => 2, :name => 'David' }.to_xml(:root => 'person') + @addy = { :id => 1, :street => '12345 Street' }.to_xml(:root => 'address') + ActiveResource::HttpMock.respond_to do |mock| + mock.get "/people/1.xml", @matz + mock.get "/people/2.xml", @david + mock.put "/people/1", nil, 204 + mock.delete "/people/1", nil, 200 + mock.delete "/people/2", nil, 400 + mock.post "/people", nil, 201, 'Location' => '/people/5.xml' + mock.get "/people/99.xml", nil, 404 + mock.get "/people.xml", "<people>#{@matz}#{@david}</people>" + mock.get "/people/1/addresses.xml", "<addresses>#{@addy}</addresses>" + mock.get "/people/1/addresses/1.xml", @addy + mock.put "/people/1/addresses/1", nil, 204 + mock.delete "/people/1/addresses/1", nil, 200 + mock.post "/people/1/addresses", nil, 201, 'Location' => '/people/1/addresses/5' + mock.get "/people//addresses.xml", nil, 404 + mock.get "/people//addresses/1.xml", nil, 404 + mock.put "/people//addresses/1", nil, 404 + mock.delete "/people//addresses/1", nil, 404 + mock.post "/people//addresses", nil, 404 + end end @@ -33,12 +45,47 @@ class BaseTest < Test::Unit::TestCase assert_equal "people", Person.collection_name end + def test_collection_path + assert_equal '/people.xml', Person.collection_path + end + + def test_custom_element_path + assert_equal '/people/1/addresses/1.xml', StreetAddress.element_path(1, :person_id => 1) + end + + def test_custom_collection_path + assert_equal '/people/1/addresses.xml', StreetAddress.collection_path(:person_id => 1) + end + + def test_custom_element_name + assert_equal 'address', StreetAddress.element_name + end + + def test_custom_collection_name + assert_equal 'addresses', StreetAddress.collection_name + end + + def test_prefix + assert_equal "/", Person.prefix + end + + def test_custom_prefix + assert_equal '/people//', StreetAddress.prefix + assert_equal '/people/1/', StreetAddress.prefix(:person_id => 1) + end + def test_find_by_id matz = Person.find(1) assert_kind_of Person, matz assert_equal "Matz", matz.name end + def test_find_by_id_with_custom_prefix + addy = StreetAddress.find(1, :person_id => 1) + assert_kind_of StreetAddress, addy + assert_equal '12345 Street', addy.street + end + def test_find_all all = Person.find(:all) assert_equal 2, all.size @@ -55,8 +102,21 @@ class BaseTest < Test::Unit::TestCase def test_find_by_id_not_found assert_raises(ActiveResource::ResourceNotFound) { Person.find(99) } + assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1) } + end + + def test_create + rick = Person.new + rick.save + assert_equal '5', rick.id + end + + def test_create_with_custom_prefix + matzs_house = StreetAddress.new({}, {:person_id => 1}) + matzs_house.save + assert_equal '5', matzs_house.id end - + def test_update matz = Person.find(:first) matz.name = "David" @@ -64,9 +124,28 @@ class BaseTest < Test::Unit::TestCase assert_equal "David", matz.name matz.save end - + + def test_update_with_custom_prefix + addy = StreetAddress.find(1, :person_id => 1) + addy.street = "54321 Street" + assert_kind_of StreetAddress, addy + assert_equal "54321 Street", addy.street + addy.save + end + def test_destroy assert Person.find(1).destroy - assert_raises(ActiveResource::ClientError) { Person.find(2).destroy } + ActiveResource::HttpMock.respond_to do |mock| + mock.get "/people/1.xml", nil, 404 + end + assert_raises(ActiveResource::ResourceNotFound) { Person.find(1).destroy } + end + + def test_destroy_with_custom_prefix + assert StreetAddress.find(1, :person_id => 1).destroy + ActiveResource::HttpMock.respond_to do |mock| + mock.get "/people/1/addresses/1.xml", nil, 404 + end + assert_raises(ActiveResource::ResourceNotFound) { StreetAddress.find(1, :person_id => 1).destroy } end end |