cotweet-fakeweb 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.autotest +5 -0
- data/.gitignore +7 -0
- data/CHANGELOG +215 -0
- data/LICENSE.txt +19 -0
- data/README.rdoc +189 -0
- data/Rakefile +67 -0
- data/fakeweb.gemspec +126 -0
- data/lib/fake_web.rb +215 -0
- data/lib/fake_web/ext/net_http.rb +72 -0
- data/lib/fake_web/registry.rb +127 -0
- data/lib/fake_web/responder.rb +122 -0
- data/lib/fake_web/response.rb +10 -0
- data/lib/fake_web/stub_socket.rb +15 -0
- data/lib/fake_web/utility.rb +90 -0
- data/lib/fakeweb.rb +2 -0
- data/test/fixtures/google_response_from_curl +12 -0
- data/test/fixtures/google_response_with_transfer_encoding +17 -0
- data/test/fixtures/google_response_without_transfer_encoding +11 -0
- data/test/fixtures/test_example.txt +1 -0
- data/test/fixtures/test_txt_file +3 -0
- data/test/test_allow_net_connect.rb +168 -0
- data/test/test_deprecations.rb +54 -0
- data/test/test_fake_authentication.rb +92 -0
- data/test/test_fake_web.rb +590 -0
- data/test/test_fake_web_open_uri.rb +58 -0
- data/test/test_helper.rb +90 -0
- data/test/test_last_request.rb +29 -0
- data/test/test_missing_open_uri.rb +25 -0
- data/test/test_missing_pathname.rb +37 -0
- data/test/test_other_net_http_libraries.rb +36 -0
- data/test/test_precedence.rb +79 -0
- data/test/test_query_string.rb +45 -0
- data/test/test_regexes.rb +157 -0
- data/test/test_response_headers.rb +79 -0
- data/test/test_trailing_slashes.rb +53 -0
- data/test/test_utility.rb +83 -0
- data/test/vendor/right_http_connection-1.2.4/History.txt +59 -0
- data/test/vendor/right_http_connection-1.2.4/Manifest.txt +7 -0
- data/test/vendor/right_http_connection-1.2.4/README.txt +54 -0
- data/test/vendor/right_http_connection-1.2.4/Rakefile +103 -0
- data/test/vendor/right_http_connection-1.2.4/lib/net_fix.rb +160 -0
- data/test/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb +435 -0
- data/test/vendor/right_http_connection-1.2.4/setup.rb +1585 -0
- data/test/vendor/samuel-0.2.1/.document +5 -0
- data/test/vendor/samuel-0.2.1/.gitignore +5 -0
- data/test/vendor/samuel-0.2.1/LICENSE +20 -0
- data/test/vendor/samuel-0.2.1/README.rdoc +70 -0
- data/test/vendor/samuel-0.2.1/Rakefile +62 -0
- data/test/vendor/samuel-0.2.1/VERSION +1 -0
- data/test/vendor/samuel-0.2.1/lib/samuel.rb +52 -0
- data/test/vendor/samuel-0.2.1/lib/samuel/net_http.rb +10 -0
- data/test/vendor/samuel-0.2.1/lib/samuel/request.rb +96 -0
- data/test/vendor/samuel-0.2.1/samuel.gemspec +69 -0
- data/test/vendor/samuel-0.2.1/test/request_test.rb +193 -0
- data/test/vendor/samuel-0.2.1/test/samuel_test.rb +42 -0
- data/test/vendor/samuel-0.2.1/test/test_helper.rb +66 -0
- data/test/vendor/samuel-0.2.1/test/thread_test.rb +32 -0
- metadata +167 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestFakeWebOpenURI < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_content_for_registered_uri
|
|
6
|
+
FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
|
|
7
|
+
assert_equal 'test example content', FakeWeb.response_for(:get, 'http://mock/test_example.txt').body
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def test_mock_open
|
|
11
|
+
FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
|
|
12
|
+
assert_equal 'test example content', open('http://mock/test_example.txt').read
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_mock_open_with_string_as_registered_uri
|
|
16
|
+
FakeWeb.register_uri(:get, 'http://mock/test_string.txt', :body => 'foo')
|
|
17
|
+
assert_equal 'foo', open('http://mock/test_string.txt').string
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_real_open
|
|
21
|
+
FakeWeb.allow_net_connect = true
|
|
22
|
+
setup_expectations_for_real_apple_hot_news_request
|
|
23
|
+
resp = open('http://images.apple.com/main/rss/hotnews/hotnews.rss')
|
|
24
|
+
assert_equal "200", resp.status.first
|
|
25
|
+
body = resp.read
|
|
26
|
+
assert body.include?('Apple')
|
|
27
|
+
assert body.include?('News')
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_mock_open_that_raises_exception
|
|
31
|
+
FakeWeb.register_uri(:get, 'http://mock/raising_exception.txt', :exception => StandardError)
|
|
32
|
+
assert_raises(StandardError) do
|
|
33
|
+
open('http://mock/raising_exception.txt')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_mock_open_that_raises_an_http_error
|
|
38
|
+
FakeWeb.register_uri(:get, 'http://mock/raising_exception.txt', :exception => OpenURI::HTTPError)
|
|
39
|
+
assert_raises(OpenURI::HTTPError) do
|
|
40
|
+
open('http://mock/raising_exception.txt')
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_mock_open_that_raises_an_http_error_with_a_specific_status
|
|
45
|
+
FakeWeb.register_uri(:get, 'http://mock/raising_exception.txt', :exception => OpenURI::HTTPError, :status => ['123', 'jodel'])
|
|
46
|
+
exception = assert_raises(OpenURI::HTTPError) do
|
|
47
|
+
open('http://mock/raising_exception.txt')
|
|
48
|
+
end
|
|
49
|
+
assert_equal '123', exception.io.code
|
|
50
|
+
assert_equal 'jodel', exception.io.message
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_mock_open_with_block
|
|
54
|
+
FakeWeb.register_uri(:get, 'http://mock/test_example.txt', :body => fixture_path("test_example.txt"))
|
|
55
|
+
body = open('http://mock/test_example.txt') { |f| f.readlines }
|
|
56
|
+
assert_equal 'test example content', body.first
|
|
57
|
+
end
|
|
58
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require 'test/unit'
|
|
2
|
+
require 'open-uri'
|
|
3
|
+
require 'pathname'
|
|
4
|
+
require 'fake_web'
|
|
5
|
+
require 'rbconfig'
|
|
6
|
+
require 'rubygems'
|
|
7
|
+
require 'mocha'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# Give all tests a common setup and teardown that prevents shared state
|
|
11
|
+
class Test::Unit::TestCase
|
|
12
|
+
alias setup_without_fakeweb setup
|
|
13
|
+
def setup
|
|
14
|
+
FakeWeb.clean_registry
|
|
15
|
+
@original_allow_net_connect = FakeWeb.allow_net_connect?
|
|
16
|
+
FakeWeb.allow_net_connect = false
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
alias teardown_without_fakeweb teardown
|
|
20
|
+
def teardown
|
|
21
|
+
FakeWeb.allow_net_connect = @original_allow_net_connect
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
module FakeWebTestHelper
|
|
27
|
+
|
|
28
|
+
def fixture_path(basename)
|
|
29
|
+
"test/fixtures/#{basename}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def capture_stderr
|
|
33
|
+
$stderr = StringIO.new
|
|
34
|
+
yield
|
|
35
|
+
$stderr.rewind && $stderr.read
|
|
36
|
+
ensure
|
|
37
|
+
$stderr = STDERR
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# The path to the current ruby interpreter. Adapted from Rake's FileUtils.
|
|
41
|
+
def ruby_path
|
|
42
|
+
ext = ((RbConfig::CONFIG['ruby_install_name'] =~ /\.(com|cmd|exe|bat|rb|sh)$/) ? "" : RbConfig::CONFIG['EXEEXT'])
|
|
43
|
+
File.join(RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'] + ext).sub(/.*\s.*/m, '"\&"')
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Sets several expectations (using Mocha) that a real HTTP request makes it
|
|
47
|
+
# past FakeWeb to the socket layer. You can use this when you need to check
|
|
48
|
+
# that a request isn't handled by FakeWeb.
|
|
49
|
+
def setup_expectations_for_real_request(options = {})
|
|
50
|
+
# Socket handling
|
|
51
|
+
if options[:port] == 443
|
|
52
|
+
socket = mock("SSLSocket")
|
|
53
|
+
OpenSSL::SSL::SSLSocket.expects(:===).with(socket).returns(true).at_least_once
|
|
54
|
+
OpenSSL::SSL::SSLSocket.expects(:new).with(socket, instance_of(OpenSSL::SSL::SSLContext)).returns(socket).at_least_once
|
|
55
|
+
socket.stubs(:sync_close=).returns(true)
|
|
56
|
+
socket.expects(:connect).with().at_least_once
|
|
57
|
+
else
|
|
58
|
+
socket = mock("TCPSocket")
|
|
59
|
+
Socket.expects(:===).with(socket).at_least_once.returns(true)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
TCPSocket.expects(:open).with(options[:host], options[:port]).returns(socket).at_least_once
|
|
63
|
+
socket.stubs(:closed?).returns(false)
|
|
64
|
+
socket.stubs(:close).returns(true)
|
|
65
|
+
|
|
66
|
+
# Request/response handling
|
|
67
|
+
request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
|
|
68
|
+
socket.expects(:write).with(all_of(includes(request_parts[0]), includes(request_parts[1]))).returns(100)
|
|
69
|
+
if !options[:request_body].nil?
|
|
70
|
+
socket.expects(:write).with(options[:request_body]).returns(100)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
read_method = RUBY_VERSION >= "1.9.2" ? :read_nonblock : :sysread
|
|
74
|
+
socket.expects(read_method).at_least_once.returns("HTTP/1.1 #{options[:response_code]} #{options[:response_message]}\nContent-Length: #{options[:response_body].length}\n\n#{options[:response_body]}").then.raises(EOFError)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
# A helper that calls #setup_expectations_for_real_request for you, using
|
|
79
|
+
# defaults for our commonly used test request to images.apple.com.
|
|
80
|
+
def setup_expectations_for_real_apple_hot_news_request(options = {})
|
|
81
|
+
defaults = { :host => "images.apple.com", :port => 80, :method => "GET",
|
|
82
|
+
:path => "/main/rss/hotnews/hotnews.rss",
|
|
83
|
+
:response_code => 200, :response_message => "OK",
|
|
84
|
+
:response_body => "<title>Apple Hot News</title>" }
|
|
85
|
+
setup_expectations_for_real_request(defaults.merge(options))
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
Test::Unit::TestCase.send(:include, FakeWebTestHelper)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestLastRequest < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_last_request_returns_correct_net_http_request_class
|
|
6
|
+
FakeWeb.register_uri(:get, "http://example.com", :status => [200, "OK"])
|
|
7
|
+
Net::HTTP.start("example.com") { |http| http.get("/") }
|
|
8
|
+
assert_instance_of Net::HTTP::Get, FakeWeb.last_request
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_last_request_has_correct_method_path_and_body_for_get
|
|
12
|
+
FakeWeb.register_uri(:get, "http://example.com", :status => [200, "OK"])
|
|
13
|
+
Net::HTTP.start("example.com") { |http| http.get("/") }
|
|
14
|
+
assert_equal "GET", FakeWeb.last_request.method
|
|
15
|
+
assert_equal "/", FakeWeb.last_request.path
|
|
16
|
+
assert_nil FakeWeb.last_request.body
|
|
17
|
+
assert_nil FakeWeb.last_request.content_length
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_last_request_has_correct_method_path_and_body_for_post
|
|
21
|
+
FakeWeb.register_uri(:post, "http://example.com/posts", :status => [201, "Created"])
|
|
22
|
+
Net::HTTP.start("example.com") { |http| http.post("/posts", "title=Test") }
|
|
23
|
+
assert_equal "POST", FakeWeb.last_request.method
|
|
24
|
+
assert_equal "/posts", FakeWeb.last_request.path
|
|
25
|
+
assert_equal "title=Test", FakeWeb.last_request.body
|
|
26
|
+
assert_equal 10, FakeWeb.last_request.content_length
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestMissingOpenURI < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
super
|
|
7
|
+
@saved_open_uri = OpenURI
|
|
8
|
+
Object.send(:remove_const, :OpenURI)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
super
|
|
13
|
+
Object.const_set(:OpenURI, @saved_open_uri)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_register_using_exception_without_open_uri
|
|
18
|
+
# regression test for Responder needing OpenURI::HTTPError to be defined
|
|
19
|
+
FakeWeb.register_uri(:get, "http://example.com/", :exception => StandardError)
|
|
20
|
+
assert_raises(StandardError) do
|
|
21
|
+
Net::HTTP.start("example.com") { |http| http.get("/") }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestMissingPathname < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def setup
|
|
6
|
+
super
|
|
7
|
+
@saved_pathname = Pathname
|
|
8
|
+
Object.send(:remove_const, :Pathname)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def teardown
|
|
12
|
+
super
|
|
13
|
+
Object.const_set(:Pathname, @saved_pathname)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# FakeWeb supports using Pathname objects where filenames are expected, but
|
|
17
|
+
# Pathname isn't required to use FakeWeb. Make sure everything still works
|
|
18
|
+
# when Pathname isn't in use.
|
|
19
|
+
|
|
20
|
+
def test_register_using_body_without_pathname
|
|
21
|
+
FakeWeb.register_uri(:get, "http://example.com/", :body => fixture_path("test_example.txt"))
|
|
22
|
+
Net::HTTP.start("example.com") { |http| http.get("/") }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_register_using_response_without_pathname
|
|
26
|
+
FakeWeb.register_uri(:get, "http://example.com/", :response => fixture_path("google_response_without_transfer_encoding"))
|
|
27
|
+
Net::HTTP.start("example.com") { |http| http.get("/") }
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_register_using_unsupported_response_without_pathname
|
|
31
|
+
FakeWeb.register_uri(:get, "http://example.com/", :response => 1)
|
|
32
|
+
assert_raise StandardError do
|
|
33
|
+
Net::HTTP.start("example.com") { |http| http.get("/") }
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestOtherNetHttpLibraries < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def capture_output_from_requiring(libs, additional_code = "")
|
|
6
|
+
requires = libs.map { |lib| "require '#{lib}'" }.join("; ")
|
|
7
|
+
fakeweb_dir = "#{File.dirname(__FILE__)}/../lib"
|
|
8
|
+
vendor_dirs = Dir["#{File.dirname(__FILE__)}/vendor/*/lib"]
|
|
9
|
+
load_path_opts = vendor_dirs.unshift(fakeweb_dir).map { |dir| "-I#{dir}" }.join(" ")
|
|
10
|
+
|
|
11
|
+
`#{ruby_path} #{load_path_opts} -e "#{requires}; #{additional_code}" 2>&1`
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def test_requiring_samuel_before_fakeweb_prints_warning
|
|
15
|
+
output = capture_output_from_requiring %w(samuel fakeweb)
|
|
16
|
+
assert_match %r(Warning: FakeWeb was loaded after Samuel), output
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_requiring_samuel_after_fakeweb_does_not_print_warning
|
|
20
|
+
output = capture_output_from_requiring %w(fakeweb samuel)
|
|
21
|
+
assert output.empty?
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def test_requiring_right_http_connection_before_fakeweb_and_then_connecting_does_not_print_warning
|
|
25
|
+
additional_code = "Net::HTTP.start('example.com')"
|
|
26
|
+
output = capture_output_from_requiring %w(right_http_connection fakeweb), additional_code
|
|
27
|
+
assert output.empty?
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_requiring_right_http_connection_after_fakeweb_and_then_connecting_prints_warning
|
|
31
|
+
additional_code = "Net::HTTP.start('example.com')"
|
|
32
|
+
output = capture_output_from_requiring %w(fakeweb right_http_connection), additional_code
|
|
33
|
+
assert_match %r(Warning: RightHttpConnection was loaded after FakeWeb), output
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestPrecedence < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_matching_get_strings_have_precedence_over_matching_get_regexes
|
|
6
|
+
FakeWeb.register_uri(:get, "http://example.com/test", :body => "string")
|
|
7
|
+
FakeWeb.register_uri(:get, %r|http://example\.com/test|, :body => "regex")
|
|
8
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
9
|
+
assert_equal "string", response.body
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def test_matching_any_strings_have_precedence_over_matching_any_regexes
|
|
13
|
+
FakeWeb.register_uri(:any, "http://example.com/test", :body => "string")
|
|
14
|
+
FakeWeb.register_uri(:any, %r|http://example\.com/test|, :body => "regex")
|
|
15
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
16
|
+
assert_equal "string", response.body
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_matching_get_strings_have_precedence_over_matching_any_strings
|
|
20
|
+
FakeWeb.register_uri(:get, "http://example.com/test", :body => "get method")
|
|
21
|
+
FakeWeb.register_uri(:any, "http://example.com/test", :body => "any method")
|
|
22
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
23
|
+
assert_equal "get method", response.body
|
|
24
|
+
|
|
25
|
+
# registration order should not matter
|
|
26
|
+
FakeWeb.register_uri(:any, "http://example.com/test2", :body => "any method")
|
|
27
|
+
FakeWeb.register_uri(:get, "http://example.com/test2", :body => "get method")
|
|
28
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test2') }
|
|
29
|
+
assert_equal "get method", response.body
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_matching_any_strings_have_precedence_over_matching_get_regexes
|
|
33
|
+
FakeWeb.register_uri(:any, "http://example.com/test", :body => "any string")
|
|
34
|
+
FakeWeb.register_uri(:get, %r|http://example\.com/test|, :body => "get regex")
|
|
35
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
36
|
+
assert_equal "any string", response.body
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_registered_strings_and_uris_are_equivalent_so_second_takes_precedence
|
|
40
|
+
FakeWeb.register_uri(:get, "http://example.com/test", :body => "string")
|
|
41
|
+
FakeWeb.register_uri(:get, URI.parse("http://example.com/test"), :body => "uri")
|
|
42
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
43
|
+
assert_equal "uri", response.body
|
|
44
|
+
|
|
45
|
+
FakeWeb.register_uri(:get, URI.parse("http://example.com/test2"), :body => "uri")
|
|
46
|
+
FakeWeb.register_uri(:get, "http://example.com/test2", :body => "string")
|
|
47
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test2') }
|
|
48
|
+
assert_equal "string", response.body
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def test_identical_registration_replaces_previous_registration
|
|
52
|
+
FakeWeb.register_uri(:get, "http://example.com/test", :body => "first")
|
|
53
|
+
FakeWeb.register_uri(:get, "http://example.com/test", :body => "second")
|
|
54
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
55
|
+
assert_equal "second", response.body
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def test_identical_registration_replaces_previous_registration_accounting_for_normalization
|
|
59
|
+
FakeWeb.register_uri(:get, "http://example.com/test?", :body => "first")
|
|
60
|
+
FakeWeb.register_uri(:get, "http://example.com:80/test", :body => "second")
|
|
61
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
62
|
+
assert_equal "second", response.body
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_identical_registration_replaces_previous_registration_accounting_for_query_params
|
|
66
|
+
FakeWeb.register_uri(:get, "http://example.com/test?a=1&b=2", :body => "first")
|
|
67
|
+
FakeWeb.register_uri(:get, "http://example.com/test?b=2&a=1", :body => "second")
|
|
68
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test?a=1&b=2') }
|
|
69
|
+
assert_equal "second", response.body
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def test_identical_registration_replaces_previous_registration_with_regexes
|
|
73
|
+
FakeWeb.register_uri(:get, /test/, :body => "first")
|
|
74
|
+
FakeWeb.register_uri(:get, /test/, :body => "second")
|
|
75
|
+
response = Net::HTTP.start("example.com") { |query| query.get('/test') }
|
|
76
|
+
assert_equal "second", response.body
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestFakeWebQueryString < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_register_uri_string_with_query_params
|
|
6
|
+
FakeWeb.register_uri(:get, 'http://example.com/?a=1&b=1', :body => 'foo')
|
|
7
|
+
assert FakeWeb.registered_uri?(:get, 'http://example.com/?a=1&b=1')
|
|
8
|
+
|
|
9
|
+
FakeWeb.register_uri(:post, URI.parse("http://example.org/?a=1&b=1"), :body => "foo")
|
|
10
|
+
assert FakeWeb.registered_uri?(:post, "http://example.org/?a=1&b=1")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_register_uri_with_query_params_and_check_in_different_order
|
|
14
|
+
FakeWeb.register_uri(:get, 'http://example.com/?a=1&b=1', :body => 'foo')
|
|
15
|
+
assert FakeWeb.registered_uri?(:get, 'http://example.com/?b=1&a=1')
|
|
16
|
+
|
|
17
|
+
FakeWeb.register_uri(:post, URI.parse('http://example.org/?a=1&b=1'), :body => 'foo')
|
|
18
|
+
assert FakeWeb.registered_uri?(:post, 'http://example.org/?b=1&a=1')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_registered_uri_gets_recognized_with_empty_query_params
|
|
22
|
+
FakeWeb.register_uri(:get, 'http://example.com/', :body => 'foo')
|
|
23
|
+
assert FakeWeb.registered_uri?(:get, 'http://example.com/?')
|
|
24
|
+
|
|
25
|
+
FakeWeb.register_uri(:post, URI.parse('http://example.org/'), :body => 'foo')
|
|
26
|
+
assert FakeWeb.registered_uri?(:post, 'http://example.org/?')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def test_register_uri_with_empty_query_params_and_check_with_none
|
|
30
|
+
FakeWeb.register_uri(:get, 'http://example.com/?', :body => 'foo')
|
|
31
|
+
assert FakeWeb.registered_uri?(:get, 'http://example.com/')
|
|
32
|
+
|
|
33
|
+
FakeWeb.register_uri(:post, URI.parse('http://example.org/?'), :body => 'foo')
|
|
34
|
+
assert FakeWeb.registered_uri?(:post, 'http://example.org/')
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def test_registry_sort_query_params
|
|
38
|
+
assert_equal "a=1&b=2", FakeWeb::Registry.instance.send(:sort_query_params, "b=2&a=1")
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_registry_sort_query_params_sorts_by_value_if_keys_collide
|
|
42
|
+
assert_equal "a=1&a=2&b=2", FakeWeb::Registry.instance.send(:sort_query_params, "a=2&b=2&a=1")
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
class TestRegexes < Test::Unit::TestCase
|
|
4
|
+
|
|
5
|
+
def test_registered_uri_with_pattern
|
|
6
|
+
FakeWeb.register_uri(:get, %r|http://example.com/test_example/\d+|, :body => "example")
|
|
7
|
+
assert FakeWeb.registered_uri?(:get, "http://example.com/test_example/25")
|
|
8
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/test_example/abc")
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def test_response_for_with_matching_registered_uri
|
|
12
|
+
FakeWeb.register_uri(:get, %r|http://www.google.com|, :body => "Welcome to Google!")
|
|
13
|
+
assert_equal "Welcome to Google!", FakeWeb.response_for(:get, "http://www.google.com").body
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_response_for_with_matching_registered_uri_and_get_method_matching_to_any_method
|
|
17
|
+
FakeWeb.register_uri(:any, %r|http://www.example.com|, :body => "example")
|
|
18
|
+
assert_equal "example", FakeWeb.response_for(:get, "http://www.example.com").body
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_registered_uri_with_authentication_and_pattern
|
|
22
|
+
FakeWeb.register_uri(:get, %r|http://user:pass@mock/example\.\w+|i, :body => "example")
|
|
23
|
+
assert FakeWeb.registered_uri?(:get, 'http://user:pass@mock/example.txt')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_registered_uri_with_authentication_and_pattern_handles_case_insensitivity
|
|
27
|
+
FakeWeb.register_uri(:get, %r|http://user:pass@mock/example\.\w+|i, :body => "example")
|
|
28
|
+
assert FakeWeb.registered_uri?(:get, 'http://uSeR:PAss@mock/example.txt')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_request_with_authentication_and_pattern_handles_case_insensitivity
|
|
32
|
+
FakeWeb.register_uri(:get, %r|http://user:pass@mock/example\.\w+|i, :body => "example")
|
|
33
|
+
http = Net::HTTP.new('mock', 80)
|
|
34
|
+
req = Net::HTTP::Get.new('/example.txt')
|
|
35
|
+
req.basic_auth 'uSeR', 'PAss'
|
|
36
|
+
assert_equal "example", http.request(req).body
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def test_requesting_a_uri_that_matches_two_registered_regexes_raises_an_error
|
|
40
|
+
FakeWeb.register_uri(:get, %r|http://example\.com/|, :body => "first")
|
|
41
|
+
FakeWeb.register_uri(:get, %r|http://example\.com/a|, :body => "second")
|
|
42
|
+
assert_raise FakeWeb::MultipleMatchingURIsError do
|
|
43
|
+
Net::HTTP.start("example.com") { |query| query.get('/a') }
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_requesting_a_uri_that_matches_two_registered_regexes_raises_an_error_including_request_info
|
|
48
|
+
FakeWeb.register_uri(:get, %r|http://example\.com/|, :body => "first")
|
|
49
|
+
FakeWeb.register_uri(:get, %r|http://example\.com/a|, :body => "second")
|
|
50
|
+
begin
|
|
51
|
+
Net::HTTP.start("example.com") { |query| query.get('/a') }
|
|
52
|
+
rescue FakeWeb::MultipleMatchingURIsError => exception
|
|
53
|
+
end
|
|
54
|
+
assert exception.message.include?("GET http://example.com/a")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_registry_does_not_find_using_mismatched_protocols_or_ports_when_registered_with_both
|
|
58
|
+
FakeWeb.register_uri(:get, %r|http://www.example.com:80|, :body => "example")
|
|
59
|
+
assert !FakeWeb.registered_uri?(:get, "https://www.example.com:80")
|
|
60
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com:443")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_registry_finds_using_non_default_port
|
|
64
|
+
FakeWeb.register_uri(:get, %r|example\.com:8080|, :body => "example")
|
|
65
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:8080/path")
|
|
66
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com:8080/path")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def test_registry_finds_using_default_port_and_http_when_registered_with_explicit_port_80
|
|
70
|
+
FakeWeb.register_uri(:get, %r|example\.com:80|, :body => "example")
|
|
71
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com/path")
|
|
72
|
+
|
|
73
|
+
# check other permutations, too
|
|
74
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:80/path")
|
|
75
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:8080/path")
|
|
76
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com:80/path")
|
|
77
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com:8080/path")
|
|
78
|
+
assert !FakeWeb.registered_uri?(:get, "https://www.example.com/path")
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_registry_finds_using_default_port_and_https_when_registered_with_explicit_port_443
|
|
82
|
+
FakeWeb.register_uri(:get, %r|example\.com:443|, :body => "example")
|
|
83
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com/path")
|
|
84
|
+
|
|
85
|
+
# check other permutations, too
|
|
86
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com:443/path")
|
|
87
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com:44321/path")
|
|
88
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:443/path")
|
|
89
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:44321/path")
|
|
90
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com/path")
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def test_registry_only_finds_using_default_port_when_registered_without_if_protocol_matches
|
|
94
|
+
FakeWeb.register_uri(:get, %r|http://www.example.com/test|, :body => "example")
|
|
95
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:80/test")
|
|
96
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com:443/test")
|
|
97
|
+
assert !FakeWeb.registered_uri?(:get, "https://www.example.com:443/test")
|
|
98
|
+
FakeWeb.register_uri(:get, %r|https://www.example.org/test|, :body => "example")
|
|
99
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.org:443/test")
|
|
100
|
+
assert !FakeWeb.registered_uri?(:get, "https://www.example.org:80/test")
|
|
101
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.org:80/test")
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def test_registry_matches_using_mismatched_port_when_registered_without
|
|
105
|
+
FakeWeb.register_uri(:get, %r|http://www.example.com|, :body => "example")
|
|
106
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:80")
|
|
107
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:443")
|
|
108
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:12345")
|
|
109
|
+
assert !FakeWeb.registered_uri?(:get, "https://www.example.com:443")
|
|
110
|
+
assert !FakeWeb.registered_uri?(:get, "https://www.example.com")
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def test_registry_matches_using_default_port_for_protocol_when_registered_without_protocol_or_port
|
|
114
|
+
FakeWeb.register_uri(:get, %r|www.example.com/home|, :body => "example")
|
|
115
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com/home")
|
|
116
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com/home")
|
|
117
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com:80/home")
|
|
118
|
+
assert FakeWeb.registered_uri?(:get, "https://www.example.com:443/home")
|
|
119
|
+
assert !FakeWeb.registered_uri?(:get, "https://www.example.com:80/home")
|
|
120
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com:443/home")
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def test_registry_matches_with_query_params
|
|
124
|
+
FakeWeb.register_uri(:get, %r[example.com/list\?(.*&|)important=1], :body => "example")
|
|
125
|
+
assert FakeWeb.registered_uri?(:get, "http://example.com/list?hash=123&important=1&unimportant=2")
|
|
126
|
+
assert FakeWeb.registered_uri?(:get, "http://example.com/list?hash=123&important=12&unimportant=2")
|
|
127
|
+
assert FakeWeb.registered_uri?(:get, "http://example.com/list?important=1&unimportant=2")
|
|
128
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?important=2")
|
|
129
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?important=2&unimportant=1")
|
|
130
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?hash=123&important=2&unimportant=1")
|
|
131
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?notimportant=1&unimportant=1")
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_registry_does_not_match_when_regex_has_unsorted_query_params
|
|
135
|
+
FakeWeb.register_uri(:get, %r[example\.com/list\?b=2&a=1], :body => "example")
|
|
136
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?b=2&a=1")
|
|
137
|
+
assert !FakeWeb.registered_uri?(:get, "http://example.com/list?a=1&b=2")
|
|
138
|
+
assert !FakeWeb.registered_uri?(:get, "https://example.com:443/list?b=2&a=1")
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def test_registry_matches_when_regex_has_sorted_query_params
|
|
142
|
+
FakeWeb.register_uri(:get, %r[example\.com/list\?a=1&b=2], :body => "example")
|
|
143
|
+
assert FakeWeb.registered_uri?(:get, "http://example.com/list?b=2&a=1")
|
|
144
|
+
assert FakeWeb.registered_uri?(:get, "http://example.com/list?a=1&b=2")
|
|
145
|
+
assert FakeWeb.registered_uri?(:get, "https://example.com:443/list?b=2&a=1")
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def test_registry_matches_quickly_with_lots_of_query_params
|
|
149
|
+
# regression test for code that tried to calculate the permutations of the
|
|
150
|
+
# query params, which hangs with a large number of params
|
|
151
|
+
FakeWeb.register_uri(:get, %r[example.com], :body => "example")
|
|
152
|
+
Timeout::timeout(1) do
|
|
153
|
+
FakeWeb.registered_uri?(:get, "http://example.com/?a=1&b=2&c=3&d=4&e=5&f=6&g=7&h=8")
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
end
|