aboutsummaryrefslogtreecommitdiffstats
path: root/activeresource/test
diff options
context:
space:
mode:
authorRick Olson <technoweenie@gmail.com>2006-09-01 01:15:10 +0000
committerRick Olson <technoweenie@gmail.com>2006-09-01 01:15:10 +0000
commit7749c9c2200ad190e3f9935c27f09ec9b95227f2 (patch)
tree5ef693429c4511957bee18bf20594b948bb3a249 /activeresource/test
parente278b72bf3238353906a6cb928410aaf712556f4 (diff)
downloadrails-7749c9c2200ad190e3f9935c27f09ec9b95227f2.tar.gz
rails-7749c9c2200ad190e3f9935c27f09ec9b95227f2.tar.bz2
rails-7749c9c2200ad190e3f9935c27f09ec9b95227f2.zip
Major updates to ActiveResource, please see changelog and unit tests [Rick Olson]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4890 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activeresource/test')
-rw-r--r--activeresource/test/base_test.rb109
-rw-r--r--activeresource/test/fixtures/person.rb2
-rw-r--r--activeresource/test/fixtures/street_address.rb4
-rw-r--r--activeresource/test/http_mock.rb34
4 files changed, 128 insertions, 21 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
diff --git a/activeresource/test/fixtures/person.rb b/activeresource/test/fixtures/person.rb
index 4914863230..8e5768586a 100644
--- a/activeresource/test/fixtures/person.rb
+++ b/activeresource/test/fixtures/person.rb
@@ -1,3 +1,3 @@
class Person < ActiveResource::Base
- self.site = "http://37s.sunrise.i:3000/"
+ self.site = "http://37s.sunrise.i:3000"
end \ No newline at end of file
diff --git a/activeresource/test/fixtures/street_address.rb b/activeresource/test/fixtures/street_address.rb
new file mode 100644
index 0000000000..84f20bbed6
--- /dev/null
+++ b/activeresource/test/fixtures/street_address.rb
@@ -0,0 +1,4 @@
+class StreetAddress < ActiveResource::Base
+ self.site = "http://37s.sunrise.i:3000/people/:person_id/"
+ set_element_name 'address'
+end \ No newline at end of file
diff --git a/activeresource/test/http_mock.rb b/activeresource/test/http_mock.rb
index a4bc7e7cb2..75a54e71fe 100644
--- a/activeresource/test/http_mock.rb
+++ b/activeresource/test/http_mock.rb
@@ -2,6 +2,20 @@ require 'active_resource/connection'
module ActiveResource
class HttpMock
+ class Responder
+ def initialize(responses)
+ @responses = responses
+ end
+
+ for method in [ :post, :put, :get, :delete ]
+ module_eval <<-EOE
+ def #{method}(path, body = nil, status = 200, headers = {})
+ @responses[Request.new(:#{method}, path, nil)] = Response.new(body || {}, status, headers)
+ end
+ EOE
+ end
+ end
+
class << self
def requests
@@requests ||= []
@@ -11,11 +25,12 @@ module ActiveResource
@@responses ||= {}
end
- def respond_to(pairs)
+ def respond_to(pairs = {})
reset!
pairs.each do |(path, response)|
responses[path] = response
end
+ yield Responder.new(responses) if block_given?
end
def reset!
@@ -42,7 +57,7 @@ module ActiveResource
class Request
attr_accessor :path, :method, :body
- def initialize(method, path, body = nil)
+ def initialize(method, path, body = nil, headers = nil)
@method, @path, @body = method, path, body
end
@@ -64,15 +79,24 @@ module ActiveResource
end
class Response
- attr_accessor :body, :code
+ attr_accessor :body, :code, :headers
- def initialize(body, code = 200)
- @body, @code = body, code
+ def initialize(body, code = 200, headers = nil)
+ @body, @code, @headers = body, code, headers
end
def success?
(200..299).include?(code)
end
+
+ def [](key)
+ headers[key]
+ end
+
+ def []=(key, value)
+ headers[key] = value
+ end
+
end
class Connection