sandro-fakeweb 1.2.5

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.
@@ -0,0 +1,64 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+
3
+ class TestFakeWebFixture < Test::Unit::TestCase
4
+ def setup
5
+ @response = Net::HTTPOK.new("1.1", "200", "OK")
6
+ @path = "."
7
+ @fixture = FakeWeb::Fixture.new(@path, :get, "http://www.apple.com", @response)
8
+ end
9
+
10
+ def test_register_fixtures_in_path
11
+ fixture = mock(:register => true)
12
+ YAML.expects(:load_file).with('file').returns(fixture)
13
+ Dir.expects(:glob).yields('file')
14
+ FakeWeb::Fixture.register(@path)
15
+ end
16
+
17
+ def test_register_fixture_with_fake_web
18
+ FakeWeb.expects(:register_uri).with(:get, "http://www.apple.com", :response => @response)
19
+ @fixture.register
20
+ end
21
+
22
+ def test_file_name_without_path
23
+ assert_equal @fixture.file_name, "GET_www.apple.com.fixture"
24
+ end
25
+
26
+ def test_file_name_with_path_and_querystring
27
+ url = "http://www.apple.com/iphone/why-iphone/?q=iphone&other=i%20phone"
28
+ fixture = FakeWeb::Fixture.new(@path, :get, url, stub)
29
+ assert_equal fixture.file_name, "GET_www.apple.com-iphone-why-iphone.fixture"
30
+ end
31
+
32
+ def test_duplicate_file_name_increments_number_identifier
33
+ File.new('GET_www.apple.com.fixture', 'w')
34
+ assert_equal @fixture.file_name, "GET_www.apple.com_2.fixture"
35
+ File.unlink('GET_www.apple.com.fixture')
36
+ end
37
+
38
+ def test_unique_file_name_when_integer_does_not_exist
39
+ File.new('original.txt', 'w')
40
+
41
+ fixture = FakeWeb::Fixture.allocate
42
+ assert_equal fixture.send(:next_unique_file_name, "original.txt"), "original_2.txt"
43
+
44
+ File.unlink('original.txt')
45
+ end
46
+
47
+ def test_unique_file_name_when_integer_exists
48
+ File.new('original.txt', 'w')
49
+ File.new('original_2.txt', 'w')
50
+
51
+ fixture = FakeWeb::Fixture.allocate
52
+ assert_equal fixture.send(:next_unique_file_name, "original.txt"), "original_3.txt"
53
+
54
+ File.unlink('original.txt')
55
+ File.unlink('original_2.txt')
56
+ end
57
+
58
+ def test_save
59
+ file = stub
60
+ File.expects(:open).with(@fixture.file_name, 'w').yields(file)
61
+ file.expects(:write).with(@fixture.to_yaml)
62
+ @fixture.save
63
+ end
64
+ end
@@ -0,0 +1,71 @@
1
+ require File.join(File.dirname(__FILE__), "test_helper")
2
+ require 'fileutils'
3
+
4
+ class TestFakeWebGenerateFixture < Test::Unit::TestCase
5
+ def setup
6
+ @path = File.dirname(__FILE__) + "/fixtures/tmp"
7
+ Dir.mkdir(@path)
8
+ end
9
+
10
+ def teardown
11
+ FileUtils.rm_rf @path
12
+ FakeWeb.allow_net_connect = true
13
+ end
14
+
15
+ def test_raise_error_when_path_invalid
16
+ assert_raise RuntimeError do
17
+ FakeWeb.generate_fixtures("invalid_path")
18
+ end
19
+ end
20
+
21
+ def test_save_and_restore_one_fixture
22
+ FakeWeb.generate_fixtures(@path)
23
+ request = lambda { Net::HTTP.get_response URI.parse("http://www.google.com") }
24
+ setup_basic_response_for_request
25
+ real_response = request.call
26
+
27
+ FakeWeb.register_fixtures(@path)
28
+ FakeWeb.allow_net_connect = false
29
+ assert_nothing_raised do
30
+ assert_equal real_response.body, request.call.body
31
+ end
32
+ end
33
+
34
+ def test_save_and_restore_multiple_fixtures
35
+ FakeWeb.generate_fixtures(@path)
36
+ setup_basic_response_for_request
37
+ setup_basic_response_for_request :path => "/news/ipod.rss", :response_body => "iPod news"
38
+ setup_basic_response_for_request :path => "/news/iphone.rss", :response_body => "iPhone news"
39
+ requests = lambda do
40
+ Net::HTTP.get_response URI.parse("http://www.google.com")
41
+ Net::HTTP.get_response URI.parse("http://www.google.com/news/ipod.rss")
42
+ Net::HTTP.get_response URI.parse("http://www.google.com/news/iphone.rss")
43
+ end
44
+ requests.call
45
+
46
+ FakeWeb.register_fixtures(@path)
47
+ FakeWeb.allow_net_connect = false
48
+ assert_nothing_raised do
49
+ requests.call
50
+ end
51
+ end
52
+
53
+ def test_restoring_fixtures_stops_generating_fixtures
54
+ FakeWeb.register_fixtures(@path)
55
+ assert ! FakeWeb.generate_fixtures?
56
+ end
57
+
58
+ def test_generating_fixtures_allows_net_connections
59
+ FakeWeb.allow_net_connect = false
60
+ FakeWeb.generate_fixtures(@path)
61
+ assert FakeWeb.allow_net_connect?
62
+ end
63
+
64
+ def test_compatibility_with_open_uri
65
+ FakeWeb.generate_fixtures(@path)
66
+ setup_basic_response_for_request
67
+ assert_nothing_raised TypeError, "no marshal_dump is defined for class Proc" do
68
+ open("http://www.google.com")
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,58 @@
1
+ require File.join(File.dirname(__FILE__), "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 => File.dirname(__FILE__) + '/fixtures/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 => File.dirname(__FILE__) + '/fixtures/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 => File.dirname(__FILE__) + '/fixtures/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
@@ -0,0 +1,87 @@
1
+ $:.unshift "#{File.dirname(__FILE__)}/../lib"
2
+
3
+ require 'test/unit'
4
+ require 'open-uri'
5
+ require 'fake_web'
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 capture_stderr
29
+ $stderr = StringIO.new
30
+ yield
31
+ $stderr.rewind && $stderr.read
32
+ ensure
33
+ $stderr = STDERR
34
+ end
35
+
36
+ # Sets several expectations (using Mocha) that a real HTTP request makes it
37
+ # past FakeWeb to the socket layer. You can use this when you need to check
38
+ # that a request isn't handled by FakeWeb.
39
+ def setup_expectations_for_real_request(options = {})
40
+ # Socket handling
41
+ if options[:port] == 443
42
+ socket = mock("SSLSocket")
43
+ OpenSSL::SSL::SSLSocket.expects(:===).with(socket).returns(true).at_least_once
44
+ OpenSSL::SSL::SSLSocket.expects(:new).with(socket, instance_of(OpenSSL::SSL::SSLContext)).returns(socket).at_least_once
45
+ socket.stubs(:sync_close=).returns(true)
46
+ socket.expects(:connect).with().at_least_once
47
+ else
48
+ socket = mock("TCPSocket")
49
+ Socket.expects(:===).with(socket).returns(true)
50
+ end
51
+
52
+ TCPSocket.expects(:open).with(options[:host], options[:port]).returns(socket).at_least_once
53
+ socket.stubs(:closed?).returns(false)
54
+ socket.stubs(:close).returns(true)
55
+
56
+ # Request/response handling
57
+ request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
58
+ socket.expects(:write).with(all_of(includes(request_parts[0]), includes(request_parts[1]))).returns(100)
59
+
60
+ socket.expects(:sysread).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)
61
+ end
62
+
63
+
64
+ # A helper that calls #setup_expectations_for_real_request for you, using
65
+ # defaults for our commonly used test request to images.apple.com.
66
+ def setup_expectations_for_real_apple_hot_news_request(options = {})
67
+ defaults = { :host => "images.apple.com", :port => 80, :method => "GET",
68
+ :path => "/main/rss/hotnews/hotnews.rss",
69
+ :response_code => 200, :response_message => "OK",
70
+ :response_body => "<title>Apple Hot News</title>" }
71
+ setup_expectations_for_real_request(defaults.merge(options))
72
+ end
73
+
74
+ def setup_basic_response_for_request(options = {})
75
+ defaults = { :host => "www.google.com", :port => 80, :method => "GET",
76
+ :path => "", :response_code => 200, :response_message => "OK",
77
+ :response_body => "Google" }
78
+ options = defaults.merge(options)
79
+
80
+ socket = stub("TCPSocket", :closed? => false, :close => true, :write => 100)
81
+ Socket.stubs(:===).returns(true)
82
+ TCPSocket.stubs(:open).returns(socket)
83
+ socket.stubs(:sysread).returns("HTTP/1.1 #{options[:response_code]} #{options[:response_message]}\nContent-Length: #{options[:response_body].length}\n\n#{options[:response_body]}")
84
+ end
85
+ end
86
+
87
+ Test::Unit::TestCase.send(:include, FakeWebTestHelper)
@@ -0,0 +1,25 @@
1
+ require File.join(File.dirname(__FILE__), "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,79 @@
1
+ require File.join(File.dirname(__FILE__), "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 File.join(File.dirname(__FILE__), "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,152 @@
1
+ require File.join(File.dirname(__FILE__), "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_with_differently_ordered_query_params_raises_an_error
48
+ FakeWeb.register_uri(:get, %r[example.com/list\?b=2&a=1], :body => "first")
49
+ FakeWeb.register_uri(:get, %r[example.com/list\?a=1&b=2], :body => "second")
50
+ assert_raise FakeWeb::MultipleMatchingURIsError do
51
+ Net::HTTP.start("example.com") { |query| query.get('/list?a=1&b=2') }
52
+ end
53
+ assert_raise FakeWeb::MultipleMatchingURIsError do
54
+ Net::HTTP.start("example.com") { |query| query.get('/list?b=2&a=1') }
55
+ end
56
+ end
57
+
58
+ def test_requesting_a_uri_that_matches_two_registered_regexes_raises_an_error_including_request_info
59
+ FakeWeb.register_uri(:get, %r|http://example\.com/|, :body => "first")
60
+ FakeWeb.register_uri(:get, %r|http://example\.com/a|, :body => "second")
61
+ begin
62
+ Net::HTTP.start("example.com") { |query| query.get('/a') }
63
+ rescue FakeWeb::MultipleMatchingURIsError => exception
64
+ end
65
+ assert exception.message.include?("GET http://example.com/a")
66
+ end
67
+
68
+ def test_registry_does_not_find_using_mismatched_protocols_or_ports_when_registered_with_both
69
+ FakeWeb.register_uri(:get, %r|http://www.example.com:80|, :body => "example")
70
+ assert !FakeWeb.registered_uri?(:get, "https://www.example.com:80")
71
+ assert !FakeWeb.registered_uri?(:get, "http://www.example.com:443")
72
+ end
73
+
74
+ def test_registry_finds_using_non_default_port
75
+ FakeWeb.register_uri(:get, %r|example\.com:8080|, :body => "example")
76
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:8080/path")
77
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com:8080/path")
78
+ end
79
+
80
+ def test_registry_finds_using_default_port_and_http_when_registered_with_explicit_port_80
81
+ FakeWeb.register_uri(:get, %r|example\.com:80|, :body => "example")
82
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com/path")
83
+
84
+ # check other permutations, too
85
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:80/path")
86
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:8080/path")
87
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com:80/path")
88
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com:8080/path")
89
+ assert !FakeWeb.registered_uri?(:get, "https://www.example.com/path")
90
+ end
91
+
92
+ def test_registry_finds_using_default_port_and_https_when_registered_with_explicit_port_443
93
+ FakeWeb.register_uri(:get, %r|example\.com:443|, :body => "example")
94
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com/path")
95
+
96
+ # check other permutations, too
97
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com:443/path")
98
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com:44321/path")
99
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:443/path")
100
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:44321/path")
101
+ assert !FakeWeb.registered_uri?(:get, "http://www.example.com/path")
102
+ end
103
+
104
+ def test_registry_only_finds_using_default_port_when_registered_without_if_protocol_matches
105
+ FakeWeb.register_uri(:get, %r|http://www.example.com/test|, :body => "example")
106
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:80/test")
107
+ assert !FakeWeb.registered_uri?(:get, "http://www.example.com:443/test")
108
+ assert !FakeWeb.registered_uri?(:get, "https://www.example.com:443/test")
109
+ FakeWeb.register_uri(:get, %r|https://www.example.org/test|, :body => "example")
110
+ assert FakeWeb.registered_uri?(:get, "https://www.example.org:443/test")
111
+ assert !FakeWeb.registered_uri?(:get, "https://www.example.org:80/test")
112
+ assert !FakeWeb.registered_uri?(:get, "http://www.example.org:80/test")
113
+ end
114
+
115
+ def test_registry_matches_using_mismatched_port_when_registered_without
116
+ FakeWeb.register_uri(:get, %r|http://www.example.com|, :body => "example")
117
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:80")
118
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:443")
119
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:12345")
120
+ assert !FakeWeb.registered_uri?(:get, "https://www.example.com:443")
121
+ assert !FakeWeb.registered_uri?(:get, "https://www.example.com")
122
+ end
123
+
124
+ def test_registry_matches_using_default_port_for_protocol_when_registered_without_protocol_or_port
125
+ FakeWeb.register_uri(:get, %r|www.example.com/home|, :body => "example")
126
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com/home")
127
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com/home")
128
+ assert FakeWeb.registered_uri?(:get, "http://www.example.com:80/home")
129
+ assert FakeWeb.registered_uri?(:get, "https://www.example.com:443/home")
130
+ assert !FakeWeb.registered_uri?(:get, "https://www.example.com:80/home")
131
+ assert !FakeWeb.registered_uri?(:get, "http://www.example.com:443/home")
132
+ end
133
+
134
+ def test_registry_matches_with_query_params
135
+ FakeWeb.register_uri(:get, %r[example.com/list\?(.*&|)important=1], :body => "example")
136
+ assert FakeWeb.registered_uri?(:get, "http://example.com/list?hash=123&important=1&unimportant=2")
137
+ assert FakeWeb.registered_uri?(:get, "http://example.com/list?hash=123&important=12&unimportant=2")
138
+ assert FakeWeb.registered_uri?(:get, "http://example.com/list?important=1&unimportant=2")
139
+ assert !FakeWeb.registered_uri?(:get, "http://example.com/list?important=2")
140
+ assert !FakeWeb.registered_uri?(:get, "http://example.com/list?important=2&unimportant=1")
141
+ assert !FakeWeb.registered_uri?(:get, "http://example.com/list?hash=123&important=2&unimportant=1")
142
+ assert !FakeWeb.registered_uri?(:get, "http://example.com/list?notimportant=1&unimportant=1")
143
+ end
144
+
145
+ def test_registry_matches_with_unsorted_query_params
146
+ FakeWeb.register_uri(:get, %r[example\.com/list\?b=2&a=1], :body => "example")
147
+ assert FakeWeb.registered_uri?(:get, "http://example.com/list?b=2&a=1")
148
+ assert FakeWeb.registered_uri?(:get, "http://example.com/list?a=1&b=2")
149
+ assert FakeWeb.registered_uri?(:get, "https://example.com:443/list?b=2&a=1")
150
+ end
151
+
152
+ end