aboutsummaryrefslogtreecommitdiffstats
path: root/activeresource/test
diff options
context:
space:
mode:
Diffstat (limited to 'activeresource/test')
-rw-r--r--activeresource/test/cases/base/custom_methods_test.rb2
-rw-r--r--activeresource/test/cases/base_test.rb49
-rw-r--r--activeresource/test/fixtures/address.rb19
-rw-r--r--activeresource/test/fixtures/subscription_plan.rb5
4 files changed, 74 insertions, 1 deletions
diff --git a/activeresource/test/cases/base/custom_methods_test.rb b/activeresource/test/cases/base/custom_methods_test.rb
index 459d33c24f..0fbf94bc0e 100644
--- a/activeresource/test/cases/base/custom_methods_test.rb
+++ b/activeresource/test/cases/base/custom_methods_test.rb
@@ -91,7 +91,7 @@ class CustomMethodsTest < Test::Unit::TestCase
201, {'Location' => '/people/1/addresses/2.xml'}),
addy.post(:link)
- matz = Person.new(:id => 1, :name => 'Matz')
+ matz = Person.find(1)
assert_equal ActiveResource::Response.new(@matz, 201), matz.post(:register)
end
diff --git a/activeresource/test/cases/base_test.rb b/activeresource/test/cases/base_test.rb
index b5914683e9..b63a218663 100644
--- a/activeresource/test/cases/base_test.rb
+++ b/activeresource/test/cases/base_test.rb
@@ -5,6 +5,8 @@ require "fixtures/street_address"
require "fixtures/sound"
require "fixtures/beast"
require "fixtures/proxy"
+require "fixtures/address"
+require "fixtures/subscription_plan"
require 'active_support/json'
require 'active_support/ordered_hash'
require 'active_support/core_ext/hash/conversions'
@@ -1034,4 +1036,51 @@ class BaseTest < Test::Unit::TestCase
end
end
end
+
+ def test_with_custom_formatter
+ @addresses = [{:id => "1", :street => "1 Infinite Loop", :city => "Cupertino", :state => "CA"}].to_xml(:root => 'addresses')
+
+ ActiveResource::HttpMock.respond_to do |mock|
+ mock.get "/addresses.xml", {}, @addresses, 200
+ end
+
+ # late bind the site
+ AddressResource.site = "http://localhost"
+ addresses = AddressResource.find(:all)
+
+ assert_equal "Cupertino, CA", addresses.first.city_state
+ end
+
+ def test_create_with_custom_primary_key
+ silver_plan = {:code => "silver", :price => 5.00}.to_xml(:root => "plan")
+
+ ActiveResource::HttpMock.respond_to do |mock|
+ mock.post "/plans.xml", {}, silver_plan, 201, 'Location' => '/plans/silver.xml'
+ end
+
+ plan = SubscriptionPlan.new(:code => "silver", :price => 5.00)
+ assert plan.new?
+
+ plan.save!
+ assert !plan.new?
+ end
+
+ def test_update_with_custom_primary_key
+ silver_plan = {:code => "silver", :price => 5.00}.to_xml(:root => "plan")
+ silver_plan_updated = {:code => "silver", :price => 10.00}.to_xml(:root => "plan")
+
+ ActiveResource::HttpMock.respond_to do |mock|
+ mock.get "/plans/silver.xml", {}, silver_plan
+ mock.put "/plans/silver.xml", {}, silver_plan_updated, 201, 'Location' => '/plans/silver.xml'
+ end
+
+ plan = SubscriptionPlan.find("silver")
+ assert !plan.new?
+ assert 5.00, plan.price
+
+ # update price
+ plan.price = 10.00
+ plan.save!
+ assert 10.00, plan.price
+ end
end
diff --git a/activeresource/test/fixtures/address.rb b/activeresource/test/fixtures/address.rb
new file mode 100644
index 0000000000..fe921e1595
--- /dev/null
+++ b/activeresource/test/fixtures/address.rb
@@ -0,0 +1,19 @@
+# turns everyting into the same object
+class AddressXMLFormatter
+ include ActiveResource::Formats::XmlFormat
+
+ def decode(xml)
+ data = ActiveResource::Formats::XmlFormat.decode(xml)
+ # process address fields
+ data.each do |address|
+ address['city_state'] = "#{address['city']}, #{address['state']}"
+ end
+ data
+ end
+
+end
+
+class AddressResource < ActiveResource::Base
+ self.element_name = "address"
+ self.format = AddressXMLFormatter.new
+end \ No newline at end of file
diff --git a/activeresource/test/fixtures/subscription_plan.rb b/activeresource/test/fixtures/subscription_plan.rb
new file mode 100644
index 0000000000..e3c2dd9a74
--- /dev/null
+++ b/activeresource/test/fixtures/subscription_plan.rb
@@ -0,0 +1,5 @@
+class SubscriptionPlan < ActiveResource::Base
+ self.site = "http://37s.sunrise.i:3000"
+ self.element_name = 'plan'
+ self.primary_key = :code
+end