Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions lib/fake_web.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
8 changes: 8 additions & 0 deletions lib/fake_web/request_stack.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
class RequestStack < Array
REQUEST_MAX_COUNT = 30

def <<(other)
super
self.shift if self.size > REQUEST_MAX_COUNT
end
end
1 change: 1 addition & 0 deletions test/test_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
32 changes: 32 additions & 0 deletions test/test_request_history.rb
Original file line number Diff line number Diff line change
@@ -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