diff --git a/lib/fake_web.rb b/lib/fake_web.rb index 13a25a4..dcf145e 100644 --- a/lib/fake_web.rb +++ b/lib/fake_web.rb @@ -6,6 +6,7 @@ require 'fake_web/responder' require 'fake_web/stub_socket' require 'fake_web/utility' +require 'fake_web/request_stack' FakeWeb::Utility.record_loaded_net_http_replacement_libs FakeWeb::Utility.puts_warning_for_net_http_around_advice_libs_if_needed @@ -198,9 +199,18 @@ def self.last_request end def self.last_request=(request) #:nodoc: + request_history << request @last_request = request end + def self.request_history + @request_history ||= RequestStack.new + end + + def self.clear_request_history + @request_history = RequestStack.new + end + private def self.print_missing_http_method_deprecation_warning(*args) diff --git a/lib/fake_web/request_stack.rb b/lib/fake_web/request_stack.rb new file mode 100644 index 0000000..2147714 --- /dev/null +++ b/lib/fake_web/request_stack.rb @@ -0,0 +1,8 @@ +class RequestStack < Array + REQUEST_MAX_COUNT = 30 + + def <<(other) + super + self.shift if self.size > REQUEST_MAX_COUNT + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb index ca91827..1d03f48 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -17,6 +17,7 @@ def setup FakeWeb.clean_registry @original_allow_net_connect = FakeWeb.allow_net_connect? FakeWeb.allow_net_connect = false + FakeWeb.clear_request_history end alias teardown_without_fakeweb teardown diff --git a/test/test_request_history.rb b/test/test_request_history.rb new file mode 100644 index 0000000..15e992b --- /dev/null +++ b/test/test_request_history.rb @@ -0,0 +1,32 @@ +require 'test_helper' + +class TestRequestHistory < Test::Unit::TestCase + + def test_request_history_returns_request_stack_class + assert_instance_of RequestStack, FakeWeb.request_history + end + + def test_request_history_stacks_requests + FakeWeb.register_uri(:get, "http://example.com", :status => [200, "OK"]) + expected_stack_count = 3 + expected_stack_count.times do + Net::HTTP.start("example.com") { |http| http.get("/") } + end + + assert_equal expected_stack_count, FakeWeb.request_history.count + FakeWeb.request_history.each do |request| + assert_equal "GET", request.method + assert_equal "/", request.path + assert_nil request.body + assert_nil request.content_length + end + end + + def test_request_hitory_stacks_requests_untill_30 + FakeWeb.register_uri(:get, "http://example.com", :status => [200, "OK"]) + 40.times do + Net::HTTP.start("example.com") { |http| http.get("/") } + end + assert_equal 30, FakeWeb.request_history.count + end +end