mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Adding option to ActiveResource to allow you to not reset the previously stored requests and responses by passing false to respond_to
This commit is contained in:
parent
a299642293
commit
58d0e2c23c
2 changed files with 79 additions and 3 deletions
|
@ -133,8 +133,44 @@ module ActiveResource
|
||||||
# pairs = {create_matz => created_response, get_matz => ok_response}
|
# pairs = {create_matz => created_response, get_matz => ok_response}
|
||||||
#
|
#
|
||||||
# ActiveResource::HttpMock.respond_to(pairs)
|
# ActiveResource::HttpMock.respond_to(pairs)
|
||||||
def respond_to(pairs = {}) #:yields: mock
|
#
|
||||||
reset!
|
# Note, by default, every time you call +respond_to+, any previous request and response pairs stored
|
||||||
|
# in HttpMock will be deleted giving you a clean slate to work on.
|
||||||
|
#
|
||||||
|
# If you want to override this behaviour, pass in +false+ as the last argument to +respond_to+
|
||||||
|
#
|
||||||
|
# === Example
|
||||||
|
#
|
||||||
|
# ActiveResource::HttpMock.respond_to do |mock|
|
||||||
|
# mock.send(:get, "/people/1", {}, "XML1")
|
||||||
|
# end
|
||||||
|
# ActiveResource::HttpMock.responses.length #=> 1
|
||||||
|
#
|
||||||
|
# ActiveResource::HttpMock.respond_to(false) do |mock|
|
||||||
|
# mock.send(:get, "/people/2", {}, "XML2")
|
||||||
|
# end
|
||||||
|
# ActiveResource::HttpMock.responses.length #=> 2
|
||||||
|
#
|
||||||
|
# This also works with passing in generated pairs of requests and responses, again, just pass in false
|
||||||
|
# as the last argument:
|
||||||
|
#
|
||||||
|
# === Example
|
||||||
|
#
|
||||||
|
# ActiveResource::HttpMock.respond_to do |mock|
|
||||||
|
# mock.send(:get, "/people/1", {}, "XML1")
|
||||||
|
# end
|
||||||
|
# ActiveResource::HttpMock.responses.length #=> 1
|
||||||
|
#
|
||||||
|
# get_matz = ActiveResource::Request.new(:get, '/people/1.xml', nil)
|
||||||
|
# ok_response = ActiveResource::Response.new("", 200, {})
|
||||||
|
#
|
||||||
|
# pairs = {get_matz => ok_response}
|
||||||
|
#
|
||||||
|
# ActiveResource::HttpMock.respond_to(pairs, false)
|
||||||
|
# ActiveResource::HttpMock.responses.length #=> 2
|
||||||
|
def respond_to(*args) #:yields: mock
|
||||||
|
pairs = args.first || {}
|
||||||
|
reset! if args.last.class != FalseClass
|
||||||
responses.concat pairs.to_a
|
responses.concat pairs.to_a
|
||||||
if block_given?
|
if block_given?
|
||||||
yield Responder.new(responses)
|
yield Responder.new(responses)
|
||||||
|
|
|
@ -88,7 +88,7 @@ class HttpMockTest < ActiveSupport::TestCase
|
||||||
assert_equal matz, ActiveResource::HttpMock.responses.assoc(get_matz)[1].body
|
assert_equal matz, ActiveResource::HttpMock.responses.assoc(get_matz)[1].body
|
||||||
end
|
end
|
||||||
|
|
||||||
test "resets all mocked responses on each call to respond_to by default" do
|
test "resets all mocked responses on each call to respond_to with a block by default" do
|
||||||
ActiveResource::HttpMock.respond_to do |mock|
|
ActiveResource::HttpMock.respond_to do |mock|
|
||||||
mock.send(:get, "/people/1", {}, "XML1")
|
mock.send(:get, "/people/1", {}, "XML1")
|
||||||
end
|
end
|
||||||
|
@ -100,6 +100,46 @@ class HttpMockTest < ActiveSupport::TestCase
|
||||||
assert_equal 1, ActiveResource::HttpMock.responses.length
|
assert_equal 1, ActiveResource::HttpMock.responses.length
|
||||||
end
|
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)
|
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 a new issue