Updating documentation on ActiveResource HTTP Mock and also adding test coverage
This commit is contained in:
parent
b861942691
commit
a299642293
|
@ -29,7 +29,8 @@ module ActiveResource
|
||||||
#
|
#
|
||||||
# In order for a mock to deliver its content, the incoming request must match by the <tt>http_method</tt>,
|
# In order for a mock to deliver its content, the incoming request must match by the <tt>http_method</tt>,
|
||||||
# +path+ and <tt>request_headers</tt>. If no match is found an InvalidRequestError exception
|
# +path+ and <tt>request_headers</tt>. If no match is found an InvalidRequestError exception
|
||||||
# will be raised letting you know you need to create a new mock for that request.
|
# will be raised showing you what request it could not find a response for and also what requests and response
|
||||||
|
# pairs have been recorded so you can create a new mock for that request.
|
||||||
#
|
#
|
||||||
# ==== Example
|
# ==== Example
|
||||||
# def setup
|
# def setup
|
||||||
|
@ -97,8 +98,41 @@ module ActiveResource
|
||||||
@@responses ||= []
|
@@responses ||= []
|
||||||
end
|
end
|
||||||
|
|
||||||
# Accepts a block which declares a set of requests and responses for the HttpMock to respond to. See the main
|
# Accepts a block which declares a set of requests and responses for the HttpMock to respond to in
|
||||||
# ActiveResource::HttpMock description for a more detailed explanation.
|
# the following format:
|
||||||
|
#
|
||||||
|
# mock.http_method(path, request_headers = {}, body = nil, status = 200, response_headers = {})
|
||||||
|
#
|
||||||
|
# === Example
|
||||||
|
#
|
||||||
|
# @matz = { :id => 1, :name => "Matz" }.to_xml(:root => "person")
|
||||||
|
# ActiveResource::HttpMock.respond_to do |mock|
|
||||||
|
# mock.post "/people.xml", {}, @matz, 201, "Location" => "/people/1.xml"
|
||||||
|
# mock.get "/people/1.xml", {}, @matz
|
||||||
|
# mock.put "/people/1.xml", {}, nil, 204
|
||||||
|
# mock.delete "/people/1.xml", {}, nil, 200
|
||||||
|
# end
|
||||||
|
#
|
||||||
|
# Alternatively, accepts a hash of <tt>{Request => Response}</tt> pairs allowing you to generate
|
||||||
|
# these the following format:
|
||||||
|
#
|
||||||
|
# ActiveResource::Request.new(method, path, body, request_headers)
|
||||||
|
# ActiveResource::Response.new(body, status, response_headers)
|
||||||
|
#
|
||||||
|
# === Example
|
||||||
|
#
|
||||||
|
# Request.new(:#{method}, path, nil, request_headers)
|
||||||
|
#
|
||||||
|
# @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("", 200, {})
|
||||||
|
#
|
||||||
|
# pairs = {create_matz => created_response, get_matz => ok_response}
|
||||||
|
#
|
||||||
|
# ActiveResource::HttpMock.respond_to(pairs)
|
||||||
def respond_to(pairs = {}) #:yields: mock
|
def respond_to(pairs = {}) #:yields: mock
|
||||||
reset!
|
reset!
|
||||||
responses.concat pairs.to_a
|
responses.concat pairs.to_a
|
||||||
|
|
|
@ -72,6 +72,34 @@ class HttpMockTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
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 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
|
||||||
|
|
||||||
def request(method, path, headers = {}, body = nil)
|
def request(method, path, headers = {}, body = nil)
|
||||||
if [:put, :post].include? method
|
if [:put, :post].include? method
|
||||||
@http.send(method, path, body, headers)
|
@http.send(method, path, body, headers)
|
||||||
|
|
Loading…
Reference in New Issue