mirror of
https://github.com/TracksApp/tracks.git
synced 2026-03-03 11:30:15 +01:00
unfreeze rails 2.3.9
This commit is contained in:
parent
6443adac78
commit
dea6dbe4da
1916 changed files with 0 additions and 240923 deletions
|
|
@ -1,21 +0,0 @@
|
|||
require 'rubygems'
|
||||
require 'test/unit'
|
||||
require 'active_support/test_case'
|
||||
|
||||
$:.unshift File.expand_path('../../lib', __FILE__)
|
||||
$:.unshift File.expand_path('../../../activesupport/lib', __FILE__)
|
||||
require 'active_resource'
|
||||
require 'active_resource/http_mock'
|
||||
|
||||
$:.unshift "#{File.dirname(__FILE__)}/../test"
|
||||
require 'setter_trap'
|
||||
|
||||
ActiveResource::Base.logger = Logger.new("#{File.dirname(__FILE__)}/debug.log")
|
||||
|
||||
def uses_gem(gem_name, test_name, version = '> 0')
|
||||
gem gem_name.to_s, version
|
||||
require gem_name.to_s
|
||||
yield
|
||||
rescue LoadError
|
||||
$stderr.puts "Skipping #{test_name} tests. `gem install #{gem_name}` and try again."
|
||||
end
|
||||
|
|
@ -1,122 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
|
||||
class AuthorizationTest < Test::Unit::TestCase
|
||||
Response = Struct.new(:code)
|
||||
|
||||
def setup
|
||||
@conn = ActiveResource::Connection.new('http://localhost')
|
||||
@matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
|
||||
@david = { :id => 2, :name => 'David' }.to_xml(:root => 'person')
|
||||
@authenticated_conn = ActiveResource::Connection.new("http://david:test123@localhost")
|
||||
@authorization_request_header = { 'Authorization' => 'Basic ZGF2aWQ6dGVzdDEyMw==' }
|
||||
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.get "/people/2.xml", @authorization_request_header, @david
|
||||
mock.put "/people/2.xml", @authorization_request_header, nil, 204
|
||||
mock.delete "/people/2.xml", @authorization_request_header, nil, 200
|
||||
mock.post "/people/2/addresses.xml", @authorization_request_header, nil, 201, 'Location' => '/people/1/addresses/5'
|
||||
end
|
||||
end
|
||||
|
||||
def test_authorization_header
|
||||
authorization_header = @authenticated_conn.__send__(:authorization_header)
|
||||
assert_equal @authorization_request_header['Authorization'], authorization_header['Authorization']
|
||||
authorization = authorization_header["Authorization"].to_s.split
|
||||
|
||||
assert_equal "Basic", authorization[0]
|
||||
assert_equal ["david", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1]
|
||||
end
|
||||
|
||||
def test_authorization_header_with_username_but_no_password
|
||||
@conn = ActiveResource::Connection.new("http://david:@localhost")
|
||||
authorization_header = @conn.__send__(:authorization_header)
|
||||
authorization = authorization_header["Authorization"].to_s.split
|
||||
|
||||
assert_equal "Basic", authorization[0]
|
||||
assert_equal ["david"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1]
|
||||
end
|
||||
|
||||
def test_authorization_header_with_password_but_no_username
|
||||
@conn = ActiveResource::Connection.new("http://:test123@localhost")
|
||||
authorization_header = @conn.__send__(:authorization_header)
|
||||
authorization = authorization_header["Authorization"].to_s.split
|
||||
|
||||
assert_equal "Basic", authorization[0]
|
||||
assert_equal ["", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1]
|
||||
end
|
||||
|
||||
def test_authorization_header_with_decoded_credentials_from_url
|
||||
@conn = ActiveResource::Connection.new("http://my%40email.com:%31%32%33@localhost")
|
||||
authorization_header = @conn.__send__(:authorization_header)
|
||||
authorization = authorization_header["Authorization"].to_s.split
|
||||
|
||||
assert_equal "Basic", authorization[0]
|
||||
assert_equal ["my@email.com", "123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1]
|
||||
end
|
||||
|
||||
def test_authorization_header_explicitly_setting_username_and_password
|
||||
@authenticated_conn = ActiveResource::Connection.new("http://@localhost")
|
||||
@authenticated_conn.user = 'david'
|
||||
@authenticated_conn.password = 'test123'
|
||||
authorization_header = @authenticated_conn.__send__(:authorization_header)
|
||||
assert_equal @authorization_request_header['Authorization'], authorization_header['Authorization']
|
||||
authorization = authorization_header["Authorization"].to_s.split
|
||||
|
||||
assert_equal "Basic", authorization[0]
|
||||
assert_equal ["david", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1]
|
||||
end
|
||||
|
||||
def test_authorization_header_explicitly_setting_username_but_no_password
|
||||
@conn = ActiveResource::Connection.new("http://@localhost")
|
||||
@conn.user = "david"
|
||||
authorization_header = @conn.__send__(:authorization_header)
|
||||
authorization = authorization_header["Authorization"].to_s.split
|
||||
|
||||
assert_equal "Basic", authorization[0]
|
||||
assert_equal ["david"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1]
|
||||
end
|
||||
|
||||
def test_authorization_header_explicitly_setting_password_but_no_username
|
||||
@conn = ActiveResource::Connection.new("http://@localhost")
|
||||
@conn.password = "test123"
|
||||
authorization_header = @conn.__send__(:authorization_header)
|
||||
authorization = authorization_header["Authorization"].to_s.split
|
||||
|
||||
assert_equal "Basic", authorization[0]
|
||||
assert_equal ["", "test123"], ActiveSupport::Base64.decode64(authorization[1]).split(":")[0..1]
|
||||
end
|
||||
|
||||
def test_get
|
||||
david = @authenticated_conn.get("/people/2.xml")
|
||||
assert_equal "David", david["name"]
|
||||
end
|
||||
|
||||
def test_post
|
||||
response = @authenticated_conn.post("/people/2/addresses.xml")
|
||||
assert_equal "/people/1/addresses/5", response["Location"]
|
||||
end
|
||||
|
||||
def test_put
|
||||
response = @authenticated_conn.put("/people/2.xml")
|
||||
assert_equal 204, response.code
|
||||
end
|
||||
|
||||
def test_delete
|
||||
response = @authenticated_conn.delete("/people/2.xml")
|
||||
assert_equal 200, response.code
|
||||
end
|
||||
|
||||
def test_raises_invalid_request_on_unauthorized_requests
|
||||
assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2.xml") }
|
||||
assert_raise(ActiveResource::InvalidRequestError) { @conn.post("/people/2/addresses.xml") }
|
||||
assert_raise(ActiveResource::InvalidRequestError) { @conn.put("/people/2.xml") }
|
||||
assert_raise(ActiveResource::InvalidRequestError) { @conn.delete("/people/2.xml") }
|
||||
end
|
||||
|
||||
protected
|
||||
def assert_response_raises(klass, code)
|
||||
assert_raise(klass, "Expected response code #{code} to raise #{klass}") do
|
||||
@conn.__send__(:handle_response, Response.new(code))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
require 'fixtures/person'
|
||||
require 'fixtures/street_address'
|
||||
|
||||
class CustomMethodsTest < Test::Unit::TestCase
|
||||
def setup
|
||||
@matz = { :id => 1, :name => 'Matz' }.to_xml(:root => 'person')
|
||||
@matz_deep = { :id => 1, :name => 'Matz', :other => 'other' }.to_xml(:root => 'person')
|
||||
@matz_array = [{ :id => 1, :name => 'Matz' }].to_xml(:root => 'people')
|
||||
@ryan = { :name => 'Ryan' }.to_xml(:root => 'person')
|
||||
@addy = { :id => 1, :street => '12345 Street' }.to_xml(:root => 'address')
|
||||
@addy_deep = { :id => 1, :street => '12345 Street', :zip => "27519" }.to_xml(:root => 'address')
|
||||
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.get "/people/1.xml", {}, @matz
|
||||
mock.get "/people/1/shallow.xml", {}, @matz
|
||||
mock.get "/people/1/deep.xml", {}, @matz_deep
|
||||
mock.get "/people/retrieve.xml?name=Matz", {}, @matz_array
|
||||
mock.get "/people/managers.xml", {}, @matz_array
|
||||
mock.post "/people/hire.xml?name=Matz", {}, nil, 201
|
||||
mock.put "/people/1/promote.xml?position=Manager", {}, nil, 204
|
||||
mock.put "/people/promote.xml?name=Matz", {}, nil, 204, {}
|
||||
mock.put "/people/sort.xml?by=name", {}, nil, 204
|
||||
mock.delete "/people/deactivate.xml?name=Matz", {}, nil, 200
|
||||
mock.delete "/people/1/deactivate.xml", {}, nil, 200
|
||||
mock.post "/people/new/register.xml", {}, @ryan, 201, 'Location' => '/people/5.xml'
|
||||
mock.post "/people/1/register.xml", {}, @matz, 201
|
||||
mock.get "/people/1/addresses/1.xml", {}, @addy
|
||||
mock.get "/people/1/addresses/1/deep.xml", {}, @addy_deep
|
||||
mock.put "/people/1/addresses/1/normalize_phone.xml?locale=US", {}, nil, 204
|
||||
mock.put "/people/1/addresses/sort.xml?by=name", {}, nil, 204
|
||||
mock.post "/people/1/addresses/new/link.xml", {}, { :street => '12345 Street' }.to_xml(:root => 'address'), 201, 'Location' => '/people/1/addresses/2.xml'
|
||||
end
|
||||
|
||||
Person.user = nil
|
||||
Person.password = nil
|
||||
end
|
||||
|
||||
def teardown
|
||||
ActiveResource::HttpMock.reset!
|
||||
end
|
||||
|
||||
def test_custom_collection_method
|
||||
# GET
|
||||
assert_equal([{ "id" => 1, "name" => 'Matz' }], Person.get(:retrieve, :name => 'Matz'))
|
||||
|
||||
# POST
|
||||
assert_equal(ActiveResource::Response.new("", 201, {}), Person.post(:hire, :name => 'Matz'))
|
||||
|
||||
# PUT
|
||||
assert_equal ActiveResource::Response.new("", 204, {}),
|
||||
Person.put(:promote, {:name => 'Matz'}, 'atestbody')
|
||||
assert_equal ActiveResource::Response.new("", 204, {}), Person.put(:sort, :by => 'name')
|
||||
|
||||
# DELETE
|
||||
Person.delete :deactivate, :name => 'Matz'
|
||||
|
||||
# Nested resource
|
||||
assert_equal ActiveResource::Response.new("", 204, {}), StreetAddress.put(:sort, :person_id => 1, :by => 'name')
|
||||
end
|
||||
|
||||
def test_custom_element_method
|
||||
# Test GET against an element URL
|
||||
assert_equal Person.find(1).get(:shallow), {"id" => 1, "name" => 'Matz'}
|
||||
assert_equal Person.find(1).get(:deep), {"id" => 1, "name" => 'Matz', "other" => 'other'}
|
||||
|
||||
# Test PUT against an element URL
|
||||
assert_equal ActiveResource::Response.new("", 204, {}), Person.find(1).put(:promote, {:position => 'Manager'}, 'body')
|
||||
|
||||
# Test DELETE against an element URL
|
||||
assert_equal ActiveResource::Response.new("", 200, {}), Person.find(1).delete(:deactivate)
|
||||
|
||||
# With nested resources
|
||||
assert_equal StreetAddress.find(1, :params => { :person_id => 1 }).get(:deep),
|
||||
{ "id" => 1, "street" => '12345 Street', "zip" => "27519" }
|
||||
assert_equal ActiveResource::Response.new("", 204, {}),
|
||||
StreetAddress.find(1, :params => { :person_id => 1 }).put(:normalize_phone, :locale => 'US')
|
||||
end
|
||||
|
||||
def test_custom_new_element_method
|
||||
# Test POST against a new element URL
|
||||
ryan = Person.new(:name => 'Ryan')
|
||||
assert_equal ActiveResource::Response.new(@ryan, 201, {'Location' => '/people/5.xml'}), ryan.post(:register)
|
||||
expected_request = ActiveResource::Request.new(:post, '/people/new/register.xml', @ryan)
|
||||
assert_equal expected_request.body, ActiveResource::HttpMock.requests.first.body
|
||||
|
||||
# Test POST against a nested collection URL
|
||||
addy = StreetAddress.new(:street => '123 Test Dr.', :person_id => 1)
|
||||
assert_equal ActiveResource::Response.new({ :street => '12345 Street' }.to_xml(:root => 'address'),
|
||||
201, {'Location' => '/people/1/addresses/2.xml'}),
|
||||
addy.post(:link)
|
||||
|
||||
matz = Person.new(:id => 1, :name => 'Matz')
|
||||
assert_equal ActiveResource::Response.new(@matz, 201), matz.post(:register)
|
||||
end
|
||||
|
||||
def test_find_custom_resources
|
||||
assert_equal 'Matz', Person.find(:all, :from => :managers).first.name
|
||||
end
|
||||
end
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
require "fixtures/person"
|
||||
require "fixtures/street_address"
|
||||
|
||||
class BaseEqualityTest < Test::Unit::TestCase
|
||||
def setup
|
||||
@new = Person.new
|
||||
@one = Person.new(:id => 1)
|
||||
@two = Person.new(:id => 2)
|
||||
@street = StreetAddress.new(:id => 2)
|
||||
end
|
||||
|
||||
def test_should_equal_self
|
||||
assert @new == @new, '@new == @new'
|
||||
assert @one == @one, '@one == @one'
|
||||
end
|
||||
|
||||
def test_shouldnt_equal_new_resource
|
||||
assert @new != @one, '@new != @one'
|
||||
assert @one != @new, '@one != @new'
|
||||
end
|
||||
|
||||
def test_shouldnt_equal_different_class
|
||||
assert @two != @street, 'person != street_address with same id'
|
||||
assert @street != @two, 'street_address != person with same id'
|
||||
end
|
||||
|
||||
def test_eql_should_alias_equals_operator
|
||||
assert_equal @new == @new, @new.eql?(@new)
|
||||
assert_equal @new == @one, @new.eql?(@one)
|
||||
|
||||
assert_equal @one == @one, @one.eql?(@one)
|
||||
assert_equal @one == @new, @one.eql?(@new)
|
||||
|
||||
assert_equal @one == @street, @one.eql?(@street)
|
||||
end
|
||||
|
||||
def test_hash_should_be_id_hash
|
||||
[@new, @one, @two, @street].each do |resource|
|
||||
assert_equal resource.id.hash, resource.hash
|
||||
end
|
||||
end
|
||||
|
||||
def test_with_prefix_options
|
||||
assert_equal @one == @one, @one.eql?(@one)
|
||||
assert_equal @one == @one.dup, @one.eql?(@one.dup)
|
||||
new_one = @one.dup
|
||||
new_one.prefix_options = {:foo => 'bar'}
|
||||
assert_not_equal @one, new_one
|
||||
end
|
||||
|
||||
end
|
||||
161
vendor/rails/activeresource/test/base/load_test.rb
vendored
161
vendor/rails/activeresource/test/base/load_test.rb
vendored
|
|
@ -1,161 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
require "fixtures/person"
|
||||
require "fixtures/street_address"
|
||||
|
||||
module Highrise
|
||||
class Note < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000"
|
||||
end
|
||||
|
||||
class Comment < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000"
|
||||
end
|
||||
|
||||
module Deeply
|
||||
module Nested
|
||||
|
||||
class Note < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000"
|
||||
end
|
||||
|
||||
class Comment < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000"
|
||||
end
|
||||
|
||||
module TestDifferentLevels
|
||||
|
||||
class Note < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
class BaseLoadTest < Test::Unit::TestCase
|
||||
def setup
|
||||
@matz = { :id => 1, :name => 'Matz' }
|
||||
|
||||
@first_address = { :id => 1, :street => '12345 Street' }
|
||||
@addresses = [@first_address, { :id => 2, :street => '67890 Street' }]
|
||||
@addresses_from_xml = { :street_addresses => @addresses }
|
||||
@addresses_from_xml_single = { :street_addresses => [ @first_address ] }
|
||||
|
||||
@deep = { :id => 1, :street => {
|
||||
:id => 1, :state => { :id => 1, :name => 'Oregon',
|
||||
:notable_rivers => [
|
||||
{ :id => 1, :name => 'Willamette' },
|
||||
{ :id => 2, :name => 'Columbia', :rafted_by => @matz }],
|
||||
:postal_codes => [ 97018, 1234567890 ],
|
||||
:places => [ "Columbia City", "Unknown" ]}}}
|
||||
|
||||
@person = Person.new
|
||||
end
|
||||
|
||||
def test_load_expects_hash
|
||||
assert_raise(ArgumentError) { @person.load nil }
|
||||
assert_raise(ArgumentError) { @person.load '<person id="1"/>' }
|
||||
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 => @first_address).street_address
|
||||
assert_kind_of StreetAddress, address
|
||||
assert_equal @first_address.stringify_keys, address.attributes
|
||||
end
|
||||
|
||||
def test_load_one_with_unknown_resource
|
||||
address = silence_warnings { @person.load(:address => @first_address).address }
|
||||
assert_kind_of Person::Address, address
|
||||
assert_equal @first_address.stringify_keys, address.attributes
|
||||
end
|
||||
|
||||
def test_load_collection_with_existing_resource
|
||||
addresses = @person.load(@addresses_from_xml).street_addresses
|
||||
assert_kind_of Array, addresses
|
||||
addresses.each { |address| assert_kind_of StreetAddress, address }
|
||||
assert_equal @addresses.map(&:stringify_keys), addresses.map(&:attributes)
|
||||
end
|
||||
|
||||
def test_load_collection_with_unknown_resource
|
||||
Person.__send__(:remove_const, :Address) if Person.const_defined?(:Address)
|
||||
assert !Person.const_defined?(:Address), "Address shouldn't exist until autocreated"
|
||||
addresses = silence_warnings { @person.load(:addresses => @addresses).addresses }
|
||||
assert Person.const_defined?(:Address), "Address should have been autocreated"
|
||||
addresses.each { |address| assert_kind_of Person::Address, address }
|
||||
assert_equal @addresses.map(&:stringify_keys), addresses.map(&:attributes)
|
||||
end
|
||||
|
||||
def test_load_collection_with_single_existing_resource
|
||||
addresses = @person.load(@addresses_from_xml_single).street_addresses
|
||||
assert_kind_of Array, addresses
|
||||
addresses.each { |address| assert_kind_of StreetAddress, address }
|
||||
assert_equal [ @first_address ].map(&:stringify_keys), addresses.map(&:attributes)
|
||||
end
|
||||
|
||||
def test_load_collection_with_single_unknown_resource
|
||||
Person.__send__(:remove_const, :Address) if Person.const_defined?(:Address)
|
||||
assert !Person.const_defined?(:Address), "Address shouldn't exist until autocreated"
|
||||
addresses = silence_warnings { @person.load(:addresses => [ @first_address ]).addresses }
|
||||
assert Person.const_defined?(:Address), "Address should have been autocreated"
|
||||
addresses.each { |address| assert_kind_of Person::Address, address }
|
||||
assert_equal [ @first_address ].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 Array, 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
|
||||
|
||||
postal_codes = state.postal_codes
|
||||
assert_kind_of Array, postal_codes
|
||||
assert_equal 2, postal_codes.size
|
||||
assert_kind_of Fixnum, postal_codes.first
|
||||
assert_equal @deep[:street][:state][:postal_codes].first, postal_codes.first
|
||||
assert_kind_of Numeric, postal_codes.last
|
||||
assert_equal @deep[:street][:state][:postal_codes].last, postal_codes.last
|
||||
|
||||
places = state.places
|
||||
assert_kind_of Array, places
|
||||
assert_kind_of String, places.first
|
||||
assert_equal @deep[:street][:state][:places].first, places.first
|
||||
end
|
||||
|
||||
def test_nested_collections_within_the_same_namespace
|
||||
n = Highrise::Note.new(:comments => [{ :name => "1" }])
|
||||
assert_kind_of Highrise::Comment, n.comments.first
|
||||
end
|
||||
|
||||
def test_nested_collections_within_deeply_nested_namespace
|
||||
n = Highrise::Deeply::Nested::Note.new(:comments => [{ :name => "1" }])
|
||||
assert_kind_of Highrise::Deeply::Nested::Comment, n.comments.first
|
||||
end
|
||||
|
||||
def test_nested_collections_in_different_levels_of_namespaces
|
||||
n = Highrise::Deeply::Nested::TestDifferentLevels::Note.new(:comments => [{ :name => "1" }])
|
||||
assert_kind_of Highrise::Deeply::Nested::Comment, n.comments.first
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
|
@ -1,98 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
require "fixtures/person"
|
||||
|
||||
class BaseErrorsTest < Test::Unit::TestCase
|
||||
def setup
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.post "/people.xml", {}, %q(<?xml version="1.0" encoding="UTF-8"?><errors><error>Age can't be blank</error><error>Name can't be blank</error><error>Name must start with a letter</error><error>Person quota full for today.</error></errors>), 422, {'Content-Type' => 'application/xml; charset=utf-8'}
|
||||
mock.post "/people.json", {}, %q({"errors":["Age can't be blank","Name can't be blank","Name must start with a letter","Person quota full for today."]}), 422, {'Content-Type' => 'application/json; charset=utf-8'}
|
||||
end
|
||||
@person = Person.new(:name => '', :age => '')
|
||||
assert_equal @person.save, false
|
||||
end
|
||||
|
||||
def test_should_mark_as_invalid
|
||||
[ :json, :xml ].each do |format|
|
||||
invalid_user_using_format(format) do
|
||||
assert !@person.valid?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_parse_xml_errors
|
||||
[ :json, :xml ].each do |format|
|
||||
invalid_user_using_format(format) do
|
||||
assert_kind_of ActiveResource::Errors, @person.errors
|
||||
assert_equal 4, @person.errors.size
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_parse_errors_to_individual_attributes
|
||||
[ :json, :xml ].each do |format|
|
||||
invalid_user_using_format(format) do
|
||||
assert @person.errors[:name].any?
|
||||
assert_equal "can't be blank", @person.errors[:age]
|
||||
assert_equal ["can't be blank", "must start with a letter"], @person.errors[:name]
|
||||
assert_equal "Person quota full for today.", @person.errors[:base]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_iterate_over_errors
|
||||
[ :json, :xml ].each do |format|
|
||||
invalid_user_using_format(format) do
|
||||
errors = []
|
||||
@person.errors.each { |attribute, message| errors << [attribute, message] }
|
||||
assert errors.include?(['name', "can't be blank"])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_iterate_over_full_errors
|
||||
[ :json, :xml ].each do |format|
|
||||
invalid_user_using_format(format) do
|
||||
errors = []
|
||||
@person.errors.to_a.each { |message| errors << message }
|
||||
assert errors.include?(["name", "can't be blank"])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_format_full_errors
|
||||
[ :json, :xml ].each do |format|
|
||||
invalid_user_using_format(format) do
|
||||
full = @person.errors.full_messages
|
||||
assert full.include?("Age can't be blank")
|
||||
assert full.include?("Name can't be blank")
|
||||
assert full.include?("Name must start with a letter")
|
||||
assert full.include?("Person quota full for today.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_should_mark_as_invalid_when_content_type_is_unavailable_in_response_header
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.post "/people.xml", {}, %q(<?xml version="1.0" encoding="UTF-8"?><errors><error>Age can't be blank</error><error>Name can't be blank</error><error>Name must start with a letter</error><error>Person quota full for today.</error></errors>), 422, {}
|
||||
mock.post "/people.json", {}, %q({"errors":["Age can't be blank","Name can't be blank","Name must start with a letter","Person quota full for today."]}), 422, {}
|
||||
end
|
||||
|
||||
[ :json, :xml ].each do |format|
|
||||
invalid_user_using_format(format) do
|
||||
assert !@person.valid?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def invalid_user_using_format(mime_type_reference)
|
||||
previous_format = Person.format
|
||||
Person.format = mime_type_reference
|
||||
@person = Person.new(:name => '', :age => '')
|
||||
assert_equal false, @person.save
|
||||
|
||||
yield
|
||||
ensure
|
||||
Person.format = previous_format
|
||||
end
|
||||
end
|
||||
1087
vendor/rails/activeresource/test/base_test.rb
vendored
1087
vendor/rails/activeresource/test/base_test.rb
vendored
File diff suppressed because it is too large
Load diff
238
vendor/rails/activeresource/test/connection_test.rb
vendored
238
vendor/rails/activeresource/test/connection_test.rb
vendored
|
|
@ -1,238 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
|
||||
class ConnectionTest < Test::Unit::TestCase
|
||||
ResponseCodeStub = Struct.new(:code)
|
||||
|
||||
def setup
|
||||
@conn = ActiveResource::Connection.new('http://localhost')
|
||||
@matz = { :id => 1, :name => 'Matz' }
|
||||
@david = { :id => 2, :name => 'David' }
|
||||
@people = [ @matz, @david ].to_xml(:root => 'people')
|
||||
@people_single = [ @matz ].to_xml(:root => 'people-single-elements')
|
||||
@people_empty = [ ].to_xml(:root => 'people-empty-elements')
|
||||
@matz = @matz.to_xml(:root => 'person')
|
||||
@david = @david.to_xml(:root => 'person')
|
||||
@header = {'key' => 'value'}.freeze
|
||||
|
||||
@default_request_headers = { 'Content-Type' => 'application/xml' }
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.get "/people/2.xml", @header, @david
|
||||
mock.get "/people.xml", {}, @people
|
||||
mock.get "/people_single_elements.xml", {}, @people_single
|
||||
mock.get "/people_empty_elements.xml", {}, @people_empty
|
||||
mock.get "/people/1.xml", {}, @matz
|
||||
mock.put "/people/1.xml", {}, nil, 204
|
||||
mock.put "/people/2.xml", {}, @header, 204
|
||||
mock.delete "/people/1.xml", {}, nil, 200
|
||||
mock.delete "/people/2.xml", @header, nil, 200
|
||||
mock.post "/people.xml", {}, nil, 201, 'Location' => '/people/5.xml'
|
||||
mock.post "/members.xml", {}, @header, 201, 'Location' => '/people/6.xml'
|
||||
mock.head "/people/1.xml", {}, nil, 200
|
||||
end
|
||||
end
|
||||
|
||||
def test_handle_response
|
||||
# 2xx and 3xx are valid responses.
|
||||
[200, 299, 300, 399].each do |code|
|
||||
expected = ResponseCodeStub.new(code)
|
||||
assert_equal expected, handle_response(expected)
|
||||
end
|
||||
|
||||
# 400 is a bad request (e.g. malformed URI or missing request parameter)
|
||||
assert_response_raises ActiveResource::BadRequest, 400
|
||||
|
||||
# 401 is an unauthorized request
|
||||
assert_response_raises ActiveResource::UnauthorizedAccess, 401
|
||||
|
||||
# 403 is a forbidden requst (and authorizing will not help)
|
||||
assert_response_raises ActiveResource::ForbiddenAccess, 403
|
||||
|
||||
# 404 is a missing resource.
|
||||
assert_response_raises ActiveResource::ResourceNotFound, 404
|
||||
|
||||
# 405 is a missing not allowed error
|
||||
assert_response_raises ActiveResource::MethodNotAllowed, 405
|
||||
|
||||
# 409 is an optimistic locking error
|
||||
assert_response_raises ActiveResource::ResourceConflict, 409
|
||||
|
||||
# 410 is a removed resource
|
||||
assert_response_raises ActiveResource::ResourceGone, 410
|
||||
|
||||
# 422 is a validation error
|
||||
assert_response_raises ActiveResource::ResourceInvalid, 422
|
||||
|
||||
# 4xx are client errors.
|
||||
[402, 499].each do |code|
|
||||
assert_response_raises ActiveResource::ClientError, code
|
||||
end
|
||||
|
||||
# 5xx are server errors.
|
||||
[500, 599].each do |code|
|
||||
assert_response_raises ActiveResource::ServerError, code
|
||||
end
|
||||
|
||||
# Others are unknown.
|
||||
[199, 600].each do |code|
|
||||
assert_response_raises ActiveResource::ConnectionError, code
|
||||
end
|
||||
end
|
||||
|
||||
ResponseHeaderStub = Struct.new(:code, :message, 'Allow')
|
||||
def test_should_return_allowed_methods_for_method_no_allowed_exception
|
||||
begin
|
||||
handle_response ResponseHeaderStub.new(405, "HTTP Failed...", "GET, POST")
|
||||
rescue ActiveResource::MethodNotAllowed => e
|
||||
assert_equal "Failed with 405 HTTP Failed...", e.message
|
||||
assert_equal [:get, :post], e.allowed_methods
|
||||
end
|
||||
end
|
||||
|
||||
def test_initialize_raises_argument_error_on_missing_site
|
||||
assert_raise(ArgumentError) { ActiveResource::Connection.new(nil) }
|
||||
end
|
||||
|
||||
def test_site_accessor_accepts_uri_or_string_argument
|
||||
site = URI.parse("http://localhost")
|
||||
|
||||
assert_raise(URI::InvalidURIError) { @conn.site = nil }
|
||||
|
||||
assert_nothing_raised { @conn.site = "http://localhost" }
|
||||
assert_equal site, @conn.site
|
||||
|
||||
assert_nothing_raised { @conn.site = site }
|
||||
assert_equal site, @conn.site
|
||||
end
|
||||
|
||||
def test_proxy_accessor_accepts_uri_or_string_argument
|
||||
proxy = URI.parse("http://proxy_user:proxy_password@proxy.local:4242")
|
||||
|
||||
assert_nothing_raised { @conn.proxy = "http://proxy_user:proxy_password@proxy.local:4242" }
|
||||
assert_equal proxy, @conn.proxy
|
||||
|
||||
assert_nothing_raised { @conn.proxy = proxy }
|
||||
assert_equal proxy, @conn.proxy
|
||||
end
|
||||
|
||||
def test_timeout_accessor
|
||||
@conn.timeout = 5
|
||||
assert_equal 5, @conn.timeout
|
||||
end
|
||||
|
||||
def test_get
|
||||
matz = @conn.get("/people/1.xml")
|
||||
assert_equal "Matz", matz["name"]
|
||||
end
|
||||
|
||||
def test_head
|
||||
response = @conn.head("/people/1.xml")
|
||||
assert response.body.blank?
|
||||
assert_equal 200, response.code
|
||||
end
|
||||
|
||||
def test_get_with_header
|
||||
david = @conn.get("/people/2.xml", @header)
|
||||
assert_equal "David", david["name"]
|
||||
end
|
||||
|
||||
def test_get_collection
|
||||
people = @conn.get("/people.xml")
|
||||
assert_equal "Matz", people[0]["name"]
|
||||
assert_equal "David", people[1]["name"]
|
||||
end
|
||||
|
||||
def test_get_collection_single
|
||||
people = @conn.get("/people_single_elements.xml")
|
||||
assert_equal "Matz", people[0]["name"]
|
||||
end
|
||||
|
||||
def test_get_collection_empty
|
||||
people = @conn.get("/people_empty_elements.xml")
|
||||
assert_equal [], people
|
||||
end
|
||||
|
||||
def test_post
|
||||
response = @conn.post("/people.xml")
|
||||
assert_equal "/people/5.xml", response["Location"]
|
||||
end
|
||||
|
||||
def test_post_with_header
|
||||
response = @conn.post("/members.xml", @header)
|
||||
assert_equal "/people/6.xml", response["Location"]
|
||||
end
|
||||
|
||||
def test_put
|
||||
response = @conn.put("/people/1.xml")
|
||||
assert_equal 204, response.code
|
||||
end
|
||||
|
||||
def test_put_with_header
|
||||
response = @conn.put("/people/2.xml", @header)
|
||||
assert_equal 204, response.code
|
||||
end
|
||||
|
||||
def test_delete
|
||||
response = @conn.delete("/people/1.xml")
|
||||
assert_equal 200, response.code
|
||||
end
|
||||
|
||||
def test_delete_with_header
|
||||
response = @conn.delete("/people/2.xml", @header)
|
||||
assert_equal 200, response.code
|
||||
end
|
||||
|
||||
def test_timeout
|
||||
@http = mock('new Net::HTTP')
|
||||
@conn.expects(:http).returns(@http)
|
||||
@http.expects(:get).raises(Timeout::Error, 'execution expired')
|
||||
assert_raise(ActiveResource::TimeoutError) { @conn.get('/people_timeout.xml') }
|
||||
end
|
||||
|
||||
def test_setting_timeout
|
||||
http = Net::HTTP.new('')
|
||||
|
||||
[10, 20].each do |timeout|
|
||||
@conn.timeout = timeout
|
||||
@conn.send(:configure_http, http)
|
||||
assert_equal timeout, http.open_timeout
|
||||
assert_equal timeout, http.read_timeout
|
||||
end
|
||||
end
|
||||
|
||||
def test_accept_http_header
|
||||
@http = mock('new Net::HTTP')
|
||||
@conn.expects(:http).returns(@http)
|
||||
path = '/people/1.xml'
|
||||
@http.expects(:get).with(path, {'Accept' => 'application/xhtml+xml'}).returns(ActiveResource::Response.new(@matz, 200, {'Content-Type' => 'text/xhtml'}))
|
||||
assert_nothing_raised(Mocha::ExpectationError) { @conn.get(path, {'Accept' => 'application/xhtml+xml'}) }
|
||||
end
|
||||
|
||||
def test_ssl_options_get_applied_to_http
|
||||
http = Net::HTTP.new('')
|
||||
@conn.site="https://secure"
|
||||
@conn.ssl_options={:verify_mode => OpenSSL::SSL::VERIFY_PEER}
|
||||
@conn.timeout = 10 # prevent warning about uninitialized.
|
||||
@conn.send(:configure_http, http)
|
||||
|
||||
assert http.use_ssl?
|
||||
assert_equal http.verify_mode, OpenSSL::SSL::VERIFY_PEER
|
||||
end
|
||||
|
||||
def test_ssl_error
|
||||
http = Net::HTTP.new('')
|
||||
@conn.expects(:http).returns(http)
|
||||
http.expects(:get).raises(OpenSSL::SSL::SSLError, 'Expired certificate')
|
||||
assert_raise(ActiveResource::SSLError) { @conn.get('/people/1.xml') }
|
||||
end
|
||||
|
||||
protected
|
||||
def assert_response_raises(klass, code)
|
||||
assert_raise(klass, "Expected response code #{code} to raise #{klass}") do
|
||||
handle_response ResponseCodeStub.new(code)
|
||||
end
|
||||
end
|
||||
|
||||
def handle_response(response)
|
||||
@conn.__send__(:handle_response, response)
|
||||
end
|
||||
end
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
class BeastResource < ActiveResource::Base
|
||||
self.site = 'http://beast.caboo.se'
|
||||
site.user = 'foo'
|
||||
site.password = 'bar'
|
||||
end
|
||||
|
||||
class Forum < BeastResource
|
||||
# taken from BeastResource
|
||||
# self.site = 'http://beast.caboo.se'
|
||||
end
|
||||
|
||||
class Topic < BeastResource
|
||||
self.site += '/forums/:forum_id'
|
||||
end
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
class Customer < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000"
|
||||
end
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
class Person < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000"
|
||||
end
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
class ProxyResource < ActiveResource::Base
|
||||
self.site = "http://localhost"
|
||||
self.proxy = "http://user:password@proxy.local:3000"
|
||||
end
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
class StreetAddress < ActiveResource::Base
|
||||
self.site = "http://37s.sunrise.i:3000/people/:person_id/"
|
||||
self.element_name = 'address'
|
||||
end
|
||||
112
vendor/rails/activeresource/test/format_test.rb
vendored
112
vendor/rails/activeresource/test/format_test.rb
vendored
|
|
@ -1,112 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
require "fixtures/person"
|
||||
require "fixtures/street_address"
|
||||
|
||||
class FormatTest < Test::Unit::TestCase
|
||||
def setup
|
||||
@matz = { :id => 1, :name => 'Matz' }
|
||||
@david = { :id => 2, :name => 'David' }
|
||||
|
||||
@programmers = [ @matz, @david ]
|
||||
end
|
||||
|
||||
def test_http_format_header_name
|
||||
header_name = ActiveResource::Connection::HTTP_FORMAT_HEADER_NAMES[:get]
|
||||
assert_equal 'Accept', header_name
|
||||
|
||||
headers_names = [ActiveResource::Connection::HTTP_FORMAT_HEADER_NAMES[:put], ActiveResource::Connection::HTTP_FORMAT_HEADER_NAMES[:post]]
|
||||
headers_names.each{ |name| assert_equal 'Content-Type', name }
|
||||
end
|
||||
|
||||
def test_formats_on_single_element
|
||||
for format in [ :json, :xml ]
|
||||
using_format(Person, format) do
|
||||
ActiveResource::HttpMock.respond_to.get "/people/1.#{format}", {'Accept' => ActiveResource::Formats[format].mime_type}, ActiveResource::Formats[format].encode(@david)
|
||||
assert_equal @david[:name], Person.find(1).name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_formats_on_collection
|
||||
for format in [ :json, :xml ]
|
||||
using_format(Person, format) do
|
||||
ActiveResource::HttpMock.respond_to.get "/people.#{format}", {'Accept' => ActiveResource::Formats[format].mime_type}, ActiveResource::Formats[format].encode(@programmers)
|
||||
remote_programmers = Person.find(:all)
|
||||
assert_equal 2, remote_programmers.size
|
||||
assert remote_programmers.select { |p| p.name == 'David' }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_formats_on_custom_collection_method
|
||||
for format in [ :json, :xml ]
|
||||
using_format(Person, format) do
|
||||
ActiveResource::HttpMock.respond_to.get "/people/retrieve.#{format}?name=David", {'Accept' => ActiveResource::Formats[format].mime_type}, ActiveResource::Formats[format].encode([@david])
|
||||
remote_programmers = Person.get(:retrieve, :name => 'David')
|
||||
assert_equal 1, remote_programmers.size
|
||||
assert_equal @david[:id], remote_programmers[0]['id']
|
||||
assert_equal @david[:name], remote_programmers[0]['name']
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_formats_on_custom_element_method
|
||||
for format in [ :json, :xml ]
|
||||
using_format(Person, format) do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.get "/people/2.#{format}", {'Accept' => ActiveResource::Formats[format].mime_type}, ActiveResource::Formats[format].encode(@david)
|
||||
mock.get "/people/2/shallow.#{format}", {'Accept' => ActiveResource::Formats[format].mime_type}, ActiveResource::Formats[format].encode(@david)
|
||||
end
|
||||
remote_programmer = Person.find(2).get(:shallow)
|
||||
assert_equal @david[:id], remote_programmer['id']
|
||||
assert_equal @david[:name], remote_programmer['name']
|
||||
end
|
||||
end
|
||||
|
||||
for format in [ :json, :xml ]
|
||||
ryan = ActiveResource::Formats[format].encode({ :name => 'Ryan' })
|
||||
using_format(Person, format) do
|
||||
remote_ryan = Person.new(:name => 'Ryan')
|
||||
ActiveResource::HttpMock.respond_to.post "/people.#{format}", {'Content-Type' => ActiveResource::Formats[format].mime_type}, ryan, 201, {'Location' => "/people/5.#{format}"}
|
||||
remote_ryan.save
|
||||
|
||||
remote_ryan = Person.new(:name => 'Ryan')
|
||||
ActiveResource::HttpMock.respond_to.post "/people/new/register.#{format}", {'Content-Type' => ActiveResource::Formats[format].mime_type}, ryan, 201, {'Location' => "/people/5.#{format}"}
|
||||
assert_equal ActiveResource::Response.new(ryan, 201, {'Location' => "/people/5.#{format}"}), remote_ryan.post(:register)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_setting_format_before_site
|
||||
resource = Class.new(ActiveResource::Base)
|
||||
resource.format = :json
|
||||
resource.site = 'http://37s.sunrise.i:3000'
|
||||
assert_equal ActiveResource::Formats[:json], resource.connection.format
|
||||
end
|
||||
|
||||
def test_serialization_of_nested_resource
|
||||
address = { :street => '12345 Street' }
|
||||
person = { :name=> 'Rus', :address => address}
|
||||
|
||||
[:json, :xml].each do |format|
|
||||
encoded_person = ActiveResource::Formats[format].encode(person)
|
||||
assert_match(/12345 Street/, encoded_person)
|
||||
remote_person = Person.new(person.update({:address => StreetAddress.new(address)}))
|
||||
assert_kind_of StreetAddress, remote_person.address
|
||||
using_format(Person, format) do
|
||||
ActiveResource::HttpMock.respond_to.post "/people.#{format}", {'Content-Type' => ActiveResource::Formats[format].mime_type}, encoded_person, 201, {'Location' => "/people/5.#{format}"}
|
||||
remote_person.save
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def using_format(klass, mime_type_reference)
|
||||
previous_format = klass.format
|
||||
klass.format = mime_type_reference
|
||||
|
||||
yield
|
||||
ensure
|
||||
klass.format = previous_format
|
||||
end
|
||||
end
|
||||
155
vendor/rails/activeresource/test/http_mock_test.rb
vendored
155
vendor/rails/activeresource/test/http_mock_test.rb
vendored
|
|
@ -1,155 +0,0 @@
|
|||
require 'abstract_unit'
|
||||
|
||||
class HttpMockTest < ActiveSupport::TestCase
|
||||
def setup
|
||||
@http = ActiveResource::HttpMock.new("http://example.com")
|
||||
end
|
||||
|
||||
FORMAT_HEADER = { :get => 'Accept',
|
||||
:put => 'Content-Type',
|
||||
:post => 'Content-Type',
|
||||
:delete => 'Accept',
|
||||
:head => 'Accept'
|
||||
}
|
||||
|
||||
[:post, :put, :get, :delete, :head].each do |method|
|
||||
test "responds to simple #{method} request" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/xml"}, "Response")
|
||||
end
|
||||
|
||||
assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/xml").body
|
||||
end
|
||||
|
||||
test "adds format header by default to #{method} request" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(method, "/people/1", {}, "Response")
|
||||
end
|
||||
|
||||
assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/xml").body
|
||||
end
|
||||
|
||||
test "respond only when headers match header by default to #{method} request" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(method, "/people/1", {"X-Header" => "X"}, "Response")
|
||||
end
|
||||
|
||||
assert_equal "Response", request(method, "/people/1", "X-Header" => "X").body
|
||||
assert_raise(ActiveResource::InvalidRequestError) { request(method, "/people/1") }
|
||||
end
|
||||
|
||||
test "does not overwrite format header to #{method} request" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/json"}, "Response")
|
||||
end
|
||||
|
||||
assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/json").body
|
||||
end
|
||||
|
||||
test "ignores format header when there is only one response to same url in a #{method} request" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(method, "/people/1", {}, "Response")
|
||||
end
|
||||
|
||||
assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/json").body
|
||||
assert_equal "Response", request(method, "/people/1", FORMAT_HEADER[method] => "application/xml").body
|
||||
end
|
||||
|
||||
test "responds correctly when format header is given to #{method} request" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/xml"}, "XML")
|
||||
mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/json"}, "Json")
|
||||
end
|
||||
|
||||
assert_equal "XML", request(method, "/people/1", FORMAT_HEADER[method] => "application/xml").body
|
||||
assert_equal "Json", request(method, "/people/1", FORMAT_HEADER[method] => "application/json").body
|
||||
end
|
||||
|
||||
test "raises InvalidRequestError if no response found for the #{method} request" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(method, "/people/1", {FORMAT_HEADER[method] => "application/xml"}, "XML")
|
||||
end
|
||||
|
||||
assert_raise(::ActiveResource::InvalidRequestError) do
|
||||
request(method, "/people/1", FORMAT_HEADER[method] => "application/json")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
test "allows you to send in pairs directly to the respond_to method" do
|
||||
matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
|
||||
|
||||
create_matz = ActiveResource::Request.new(:post, '/people.xml', matz, {})
|
||||
created_response = ActiveResource::Response.new("", 201, {"Location" => "/people/1.xml"})
|
||||
get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
|
||||
ok_response = ActiveResource::Response.new(matz, 200, {})
|
||||
|
||||
pairs = {create_matz => created_response, get_matz => ok_response}
|
||||
|
||||
ActiveResource::HttpMock.respond_to(pairs)
|
||||
assert_equal 2, ActiveResource::HttpMock.responses.length
|
||||
assert_equal "", ActiveResource::HttpMock.responses.assoc(create_matz)[1].body
|
||||
assert_equal matz, ActiveResource::HttpMock.responses.assoc(get_matz)[1].body
|
||||
end
|
||||
|
||||
test "resets all mocked responses on each call to respond_to with a block by default" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(:get, "/people/1", {}, "XML1")
|
||||
end
|
||||
assert_equal 1, ActiveResource::HttpMock.responses.length
|
||||
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(:get, "/people/2", {}, "XML2")
|
||||
end
|
||||
assert_equal 1, ActiveResource::HttpMock.responses.length
|
||||
end
|
||||
|
||||
test "resets all mocked responses on each call to respond_to by passing pairs by default" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(:get, "/people/1", {}, "XML1")
|
||||
end
|
||||
assert_equal 1, ActiveResource::HttpMock.responses.length
|
||||
|
||||
matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
|
||||
get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
|
||||
ok_response = ActiveResource::Response.new(matz, 200, {})
|
||||
ActiveResource::HttpMock.respond_to({get_matz => ok_response})
|
||||
|
||||
assert_equal 1, ActiveResource::HttpMock.responses.length
|
||||
end
|
||||
|
||||
test "allows you to add new responses to the existing responses by calling a block" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(:get, "/people/1", {}, "XML1")
|
||||
end
|
||||
assert_equal 1, ActiveResource::HttpMock.responses.length
|
||||
|
||||
ActiveResource::HttpMock.respond_to(false) do |mock|
|
||||
mock.send(:get, "/people/2", {}, "XML2")
|
||||
end
|
||||
assert_equal 2, ActiveResource::HttpMock.responses.length
|
||||
end
|
||||
|
||||
test "allows you to add new responses to the existing responses by passing pairs" do
|
||||
ActiveResource::HttpMock.respond_to do |mock|
|
||||
mock.send(:get, "/people/1", {}, "XML1")
|
||||
end
|
||||
assert_equal 1, ActiveResource::HttpMock.responses.length
|
||||
|
||||
matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
|
||||
get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
|
||||
ok_response = ActiveResource::Response.new(matz, 200, {})
|
||||
ActiveResource::HttpMock.respond_to({get_matz => ok_response}, false)
|
||||
|
||||
assert_equal 2, ActiveResource::HttpMock.responses.length
|
||||
end
|
||||
|
||||
def request(method, path, headers = {}, body = nil)
|
||||
if [:put, :post].include? method
|
||||
@http.send(method, path, body, headers)
|
||||
else
|
||||
@http.send(method, path, headers)
|
||||
end
|
||||
end
|
||||
end
|
||||
26
vendor/rails/activeresource/test/setter_trap.rb
vendored
26
vendor/rails/activeresource/test/setter_trap.rb
vendored
|
|
@ -1,26 +0,0 @@
|
|||
class SetterTrap < ActiveSupport::BasicObject
|
||||
class << self
|
||||
def rollback_sets(obj)
|
||||
trapped = new(obj)
|
||||
yield(trapped).tap { trapped.rollback_sets }
|
||||
end
|
||||
end
|
||||
|
||||
def initialize(obj)
|
||||
@cache = {}
|
||||
@obj = obj
|
||||
end
|
||||
|
||||
def respond_to?(method)
|
||||
@obj.respond_to?(method)
|
||||
end
|
||||
|
||||
def method_missing(method, *args, &proc)
|
||||
@cache[method] ||= @obj.send($`) if method.to_s =~ /=$/
|
||||
@obj.send method, *args, &proc
|
||||
end
|
||||
|
||||
def rollback_sets
|
||||
@cache.each { |k, v| @obj.send k, v }
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue