require File.join(File.dirname(__FILE__), "test_helper") class TestFakeWeb < Test::Unit::TestCase def setup FakeWeb.allow_net_connect = true FakeWeb.clean_registry end def test_register_uri FakeWeb.register_uri('http://mock/test_example.txt', :string => "example") assert FakeWeb.registered_uri?('http://mock/test_example.txt') end def test_register_uri_with_wrong_number_of_arguments assert_raises ArgumentError do FakeWeb.register_uri("http://example.com") end assert_raises ArgumentError do FakeWeb.register_uri(:get, "http://example.com", "/example", :string => "example") end end def test_registered_uri_with_wrong_number_of_arguments assert_raises ArgumentError do FakeWeb.registered_uri? end assert_raises ArgumentError do FakeWeb.registered_uri?(:get, "http://example.com", "/example") end end def test_response_for_with_wrong_number_of_arguments assert_raises ArgumentError do FakeWeb.response_for end assert_raises ArgumentError do FakeWeb.response_for(:get, "http://example.com", "/example") end end def test_register_uri_without_domain_name assert_raises URI::InvalidURIError do FakeWeb.register_uri('test_example2.txt', File.dirname(__FILE__) + '/fixtures/test_example.txt') end end def test_register_uri_with_port_and_check_with_port FakeWeb.register_uri('http://example.com:3000/', :string => 'foo') assert FakeWeb.registered_uri?('http://example.com:3000/') end def test_register_uri_with_port_and_check_without_port FakeWeb.register_uri('http://example.com:3000/', :string => 'foo') assert !FakeWeb.registered_uri?('http://example.com/') end def test_register_uri_with_default_port_for_http_and_check_without_port FakeWeb.register_uri('http://example.com:80/', :string => 'foo') assert FakeWeb.registered_uri?('http://example.com/') end def test_register_uri_with_default_port_for_https_and_check_without_port FakeWeb.register_uri('https://example.com:443/', :string => 'foo') assert FakeWeb.registered_uri?('https://example.com/') end def test_register_uri_with_no_port_for_http_and_check_with_default_port FakeWeb.register_uri('http://example.com/', :string => 'foo') assert FakeWeb.registered_uri?('http://example.com:80/') end def test_register_uri_with_no_port_for_https_and_check_with_default_port FakeWeb.register_uri('https://example.com/', :string => 'foo') assert FakeWeb.registered_uri?('https://example.com:443/') end def test_register_uri_with_no_port_for_https_and_check_with_443_on_http FakeWeb.register_uri('https://example.com/', :string => 'foo') assert !FakeWeb.registered_uri?('http://example.com:443/') end def test_register_uri_with_no_port_for_http_and_check_with_80_on_https FakeWeb.register_uri('http://example.com/', :string => 'foo') assert !FakeWeb.registered_uri?('https://example.com:80/') end def test_register_uri_for_any_method_explicitly FakeWeb.register_uri(:any, "http://example.com/rpc_endpoint", :string => "OK") assert FakeWeb.registered_uri?(:get, "http://example.com/rpc_endpoint") assert FakeWeb.registered_uri?(:post, "http://example.com/rpc_endpoint") assert FakeWeb.registered_uri?(:put, "http://example.com/rpc_endpoint") assert FakeWeb.registered_uri?(:delete, "http://example.com/rpc_endpoint") assert FakeWeb.registered_uri?(:any, "http://example.com/rpc_endpoint") assert FakeWeb.registered_uri?("http://example.com/rpc_endpoint") end def test_register_uri_for_get_method_only FakeWeb.register_uri(:get, "http://example.com/users", :string => "User list") assert FakeWeb.registered_uri?(:get, "http://example.com/users") assert !FakeWeb.registered_uri?(:post, "http://example.com/users") assert !FakeWeb.registered_uri?(:put, "http://example.com/users") assert !FakeWeb.registered_uri?(:delete, "http://example.com/users") assert !FakeWeb.registered_uri?(:any, "http://example.com/users") assert !FakeWeb.registered_uri?("http://example.com/users") end def test_response_for_with_registered_uri FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt') assert_equal 'test example content', FakeWeb.response_for('http://mock/test_example.txt').body end def test_response_for_with_unknown_uri assert_equal nil, FakeWeb.response_for(:get, 'http://example.com/') end def test_response_for_with_put_method FakeWeb.register_uri(:put, "http://example.com", :string => "response") assert_equal 'response', FakeWeb.response_for(:put, "http://example.com").body end def test_response_for_with_any_method_explicitly FakeWeb.register_uri(:any, "http://example.com", :string => "response") assert_equal 'response', FakeWeb.response_for(:get, "http://example.com").body assert_equal 'response', FakeWeb.response_for(:any, "http://example.com").body end def test_content_for_registered_uri_with_port_and_request_with_port FakeWeb.register_uri('http://example.com:3000/', :string => 'test example content') Net::HTTP.start('example.com', 3000) do |http| response = http.get('/') assert_equal 'test example content', response.body end end def test_content_for_registered_uri_with_default_port_for_http_and_request_without_port FakeWeb.register_uri('http://example.com:80/', :string => 'test example content') Net::HTTP.start('example.com') do |http| response = http.get('/') assert_equal 'test example content', response.body end end def test_content_for_registered_uri_with_no_port_for_http_and_request_with_default_port FakeWeb.register_uri('http://example.com/', :string => 'test example content') Net::HTTP.start('example.com', 80) do |http| response = http.get('/') assert_equal 'test example content', response.body end end def test_content_for_registered_uri_with_default_port_for_https_and_request_with_default_port FakeWeb.register_uri('https://example.com:443/', :string => 'test example content') http = Net::HTTP.new('example.com', 443) http.use_ssl = true response = http.get('/') assert_equal 'test example content', response.body end def test_content_for_registered_uri_with_no_port_for_https_and_request_with_default_port FakeWeb.register_uri('https://example.com/', :string => 'test example content') http = Net::HTTP.new('example.com', 443) http.use_ssl = true response = http.get('/') assert_equal 'test example content', response.body end def test_content_for_registered_uris_with_ports_on_same_domain_and_request_without_port FakeWeb.register_uri('http://example.com:3000/', :string => 'port 3000') FakeWeb.register_uri('http://example.com/', :string => 'port 80') Net::HTTP.start('example.com') do |http| response = http.get('/') assert_equal 'port 80', response.body end end def test_content_for_registered_uris_with_ports_on_same_domain_and_request_with_port FakeWeb.register_uri('http://example.com:3000/', :string => 'port 3000') FakeWeb.register_uri('http://example.com/', :string => 'port 80') Net::HTTP.start('example.com', 3000) do |http| response = http.get('/') assert_equal 'port 3000', response.body end end def test_content_for_registered_uri_with_get_method_only FakeWeb.allow_net_connect = false FakeWeb.register_uri(:get, "http://example.com/", :string => "test example content") Net::HTTP.start('example.com') do |http| assert_equal 'test example content', http.get('/').body assert_raises(FakeWeb::NetConnectNotAllowedError) { http.post('/', nil) } assert_raises(FakeWeb::NetConnectNotAllowedError) { http.put('/', nil) } assert_raises(FakeWeb::NetConnectNotAllowedError) { http.delete('/', nil) } end end def test_content_for_registered_uri_with_any_method_explicitly FakeWeb.allow_net_connect = false FakeWeb.register_uri(:any, "http://example.com/", :string => "test example content") Net::HTTP.start('example.com') do |http| assert_equal 'test example content', http.get('/').body assert_equal 'test example content', http.post('/', nil).body assert_equal 'test example content', http.put('/', nil).body assert_equal 'test example content', http.delete('/').body end end def test_content_for_registered_uri_with_any_method_implicitly FakeWeb.allow_net_connect = false FakeWeb.register_uri("http://example.com/", :string => "test example content") Net::HTTP.start('example.com') do |http| assert_equal 'test example content', http.get('/').body assert_equal 'test example content', http.post('/', nil).body assert_equal 'test example content', http.put('/', nil).body assert_equal 'test example content', http.delete('/').body end end def test_mock_request_with_block FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt') Net::HTTP.start('mock') do |http| response = http.get('/test_example.txt') assert_equal 'test example content', response.body end end def test_mock_request_with_undocumented_full_uri_argument_style FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt') Net::HTTP.start('mock') do |query| response = query.get('http://mock/test_example.txt') assert_equal 'test example content', response.body end end def test_mock_request_with_undocumented_full_uri_argument_style_and_query FakeWeb.register_uri('http://mock/test_example.txt?a=b', :string => 'test query content') Net::HTTP.start('mock') do |query| response = query.get('http://mock/test_example.txt?a=b') assert_equal 'test query content', response.body end end def test_mock_post FakeWeb.register_uri('http://mock/test_example.txt', :file => File.dirname(__FILE__) + '/fixtures/test_example.txt') response = nil Net::HTTP.start('mock') do |query| response = query.post('/test_example.txt', '') end assert_equal 'test example content', response.body end def test_mock_post_with_string_as_registered_uri response = nil FakeWeb.register_uri('http://mock/test_string.txt', :string => 'foo') Net::HTTP.start('mock') do |query| response = query.post('/test_string.txt', '') end assert_equal 'foo', response.body end def test_mock_get_with_request_as_registered_uri fake_response = Net::HTTPOK.new('1.1', '200', 'OK') FakeWeb.register_uri('http://mock/test_response', :response => fake_response) response = nil Net::HTTP.start('mock') do |query| response = query.get('/test_response') end assert_equal fake_response, response end def test_mock_get_with_request_from_file_as_registered_uri FakeWeb.register_uri('http://www.google.com/', :response => File.dirname(__FILE__) + '/fixtures/google_response_without_transfer_encoding') response = nil Net::HTTP.start('www.google.com') do |query| response = query.get('/') end assert_equal '200', response.code assert response.body.include?('