webmock 1.7.5 → 1.7.6

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.
Files changed (65) hide show
  1. data/.rspec-tm +2 -0
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile +2 -2
  4. data/README.md +1 -0
  5. data/Rakefile +3 -3
  6. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +11 -4
  7. data/lib/webmock/version.rb +1 -1
  8. data/spec/{curb_spec.rb → acceptance/curb/curb_spec.rb} +9 -9
  9. data/spec/{curb_spec_helper.rb → acceptance/curb/curb_spec_helper.rb} +0 -0
  10. data/spec/{em_http_request_spec.rb → acceptance/em_http_request/em_http_request_spec.rb} +13 -13
  11. data/spec/{em_http_request_spec_helper.rb → acceptance/em_http_request/em_http_request_spec_helper.rb} +0 -0
  12. data/spec/acceptance/httpclient/httpclient_spec.rb +67 -0
  13. data/spec/{httpclient_spec_helper.rb → acceptance/httpclient/httpclient_spec_helper.rb} +0 -0
  14. data/spec/{net_http_shared.rb → acceptance/net_http/net_http_shared.rb} +0 -0
  15. data/spec/{net_http_spec.rb → acceptance/net_http/net_http_spec.rb} +6 -6
  16. data/spec/{net_http_spec_helper.rb → acceptance/net_http/net_http_spec_helper.rb} +0 -0
  17. data/spec/{real_net_http_spec.rb → acceptance/net_http/real_net_http_spec.rb} +1 -1
  18. data/spec/{patron_spec.rb → acceptance/patron/patron_spec.rb} +12 -12
  19. data/spec/{patron_spec_helper.rb → acceptance/patron/patron_spec_helper.rb} +0 -0
  20. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +142 -0
  21. data/spec/acceptance/shared/callbacks.rb +130 -0
  22. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +96 -0
  23. data/spec/acceptance/shared/precedence_of_stubs.rb +15 -0
  24. data/spec/acceptance/shared/request_expectations.rb +620 -0
  25. data/spec/acceptance/shared/returning_declared_responses.rb +377 -0
  26. data/spec/acceptance/shared/stubbing_requests.rb +314 -0
  27. data/spec/{typhoeus_hydra_spec.rb → acceptance/typhoeus/typhoeus_hydra_spec.rb} +5 -5
  28. data/spec/{typhoeus_hydra_spec_helper.rb → acceptance/typhoeus/typhoeus_hydra_spec_helper.rb} +0 -0
  29. data/spec/acceptance/webmock_shared.rb +38 -0
  30. data/spec/spec_helper.rb +4 -2
  31. data/spec/{example_curl_output.txt → support/example_curl_output.txt} +0 -0
  32. data/spec/{my_rack_app.rb → support/my_rack_app.rb} +0 -0
  33. data/spec/{network_connection.rb → support/network_connection.rb} +0 -0
  34. data/spec/{errors_spec.rb → unit/errors_spec.rb} +1 -1
  35. data/spec/{http_lib_adapters → unit/http_lib_adapters}/http_lib_adapter_registry_spec.rb +1 -1
  36. data/spec/{http_lib_adapters → unit/http_lib_adapters}/http_lib_adapter_spec.rb +1 -1
  37. data/spec/{rack_response_spec.rb → unit/rack_response_spec.rb} +1 -1
  38. data/spec/{request_execution_verifier_spec.rb → unit/request_execution_verifier_spec.rb} +1 -1
  39. data/spec/{request_pattern_spec.rb → unit/request_pattern_spec.rb} +1 -1
  40. data/spec/{request_registry_spec.rb → unit/request_registry_spec.rb} +1 -1
  41. data/spec/{request_signature_spec.rb → unit/request_signature_spec.rb} +1 -1
  42. data/spec/{request_stub_spec.rb → unit/request_stub_spec.rb} +1 -1
  43. data/spec/{response_spec.rb → unit/response_spec.rb} +4 -4
  44. data/spec/{stub_registry_spec.rb → unit/stub_registry_spec.rb} +1 -1
  45. data/spec/{stub_request_snippet_spec.rb → unit/stub_request_snippet_spec.rb} +1 -1
  46. data/spec/{util → unit/util}/hash_counter_spec.rb +1 -1
  47. data/spec/{util → unit/util}/hash_keys_stringifier_spec.rb +1 -1
  48. data/spec/{util → unit/util}/headers_spec.rb +1 -1
  49. data/spec/{util → unit/util}/json_spec.rb +1 -1
  50. data/spec/{util → unit/util}/uri_spec.rb +1 -1
  51. data/spec/{webmock_spec.rb → unit/webmock_spec.rb} +1 -1
  52. data/webmock.gemspec +1 -1
  53. metadata +111 -116
  54. data/spec/httpclient_spec.rb +0 -43
  55. data/spec/vendor/addressable/lib/addressable/uri.rb +0 -8
  56. data/spec/vendor/addressable/lib/uri.rb +0 -1
  57. data/spec/vendor/crack/lib/crack.rb +0 -1
  58. data/spec/vendor/right_http_connection-1.2.4/History.txt +0 -59
  59. data/spec/vendor/right_http_connection-1.2.4/Manifest.txt +0 -7
  60. data/spec/vendor/right_http_connection-1.2.4/README.txt +0 -54
  61. data/spec/vendor/right_http_connection-1.2.4/Rakefile +0 -103
  62. data/spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb +0 -160
  63. data/spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb +0 -435
  64. data/spec/vendor/right_http_connection-1.2.4/setup.rb +0 -1585
  65. data/spec/webmock_shared.rb +0 -1770
@@ -0,0 +1,2 @@
1
+ --rspec-version 2.0.0
2
+ --bundler
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.7.6
4
+
5
+ * Support for the HTTPClient's request_filter feature
6
+
7
+ Thanks to [Roman Shterenzon](https://github.com/romanbsd)
8
+
3
9
  ## 1.7.5
4
10
 
5
11
  * Added support for Patron 0.4.15. This change is not backward compatible so please upgrade Patron to version >= 0.4.15 if you want to use it with WebMock.
data/Gemfile CHANGED
@@ -2,8 +2,8 @@ source 'http://rubygems.org/'
2
2
 
3
3
  gemspec
4
4
  if ENV["EM_HTTP_REQUEST_1_X"]
5
- gem 'em-http-request', '>= 1.0.0.beta.4'
6
- gem 'em-synchrony', '>= 0.3.0.beta.1'
5
+ gem 'em-http-request', '>= 1.0.0'
6
+ gem 'em-synchrony', '>= 1.0.0'
7
7
  end
8
8
 
9
9
 
data/README.md CHANGED
@@ -648,6 +648,7 @@ People who submitted patches and new features or suggested improvements. Many th
648
648
  * Lin Jen-Shin
649
649
  * David Yeu
650
650
  * Andreas Garnæs
651
+ * Roman Shterenzon
651
652
 
652
653
  For a full list of contributors you can visit the
653
654
  [contributors](https://github.com/bblimke/webmock/contributors) page.
data/Rakefile CHANGED
@@ -21,13 +21,13 @@ RSpec::Core::RakeTask.new(:spec) do |t|
21
21
  end
22
22
 
23
23
  RSpec::Core::RakeTask.new(:spec_http_without_webmock) do |t|
24
- t.rspec_opts = ["-c", "-f progress", "-r ./spec/real_net_http_spec.rb"]
25
- t.pattern = 'spec/real_net_http_spec.rb'
24
+ t.rspec_opts = ["-c", "-f progress", "-r ./spec/acceptance/net_http/real_net_http_spec.rb"]
25
+ t.pattern = 'spec/acceptance/net_http/real_net_http_spec.rb'
26
26
  end
27
27
 
28
28
 
29
29
  task :em_http_request_1_x_spec do
30
- sh "EM_HTTP_REQUEST_1_X=true bundle install && bundle exec rspec spec/em_http_request_spec.rb" if RUBY_VERSION >= "1.9.2"
30
+ sh "EM_HTTP_REQUEST_1_X=true bundle install && bundle exec rspec spec/acceptance/em_http_request/em_http_request_spec.rb" if RUBY_VERSION >= "1.9.2"
31
31
  end
32
32
 
33
33
  require 'rake/testtask'
@@ -45,6 +45,9 @@ if defined?(::HTTPClient)
45
45
  if WebMock::StubRegistry.instance.registered_request?(request_signature)
46
46
  webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
47
47
  response = build_httpclient_response(webmock_response, stream, &block)
48
+ @request_filter.each do |filter|
49
+ filter.filter_response(req, response)
50
+ end
48
51
  res = conn.push(response)
49
52
  WebMock::CallbackRegistry.invoke_callbacks(
50
53
  {:lib => :httpclient}, request_signature, webmock_response)
@@ -130,10 +133,14 @@ if defined?(::HTTPClient)
130
133
  auth = www_auth.basic_auth
131
134
  auth.challenge(req.header.request_uri, nil)
132
135
 
133
- headers = req.header.all.inject({}) do |headers, header|
134
- headers[header[0]] ||= [];
135
- headers[header[0]] << header[1]
136
- headers
136
+ @request_filter.each do |filter|
137
+ filter.filter_request(req)
138
+ end
139
+
140
+ headers = req.header.all.inject({}) do |hdrs, header|
141
+ hdrs[header[0]] ||= []
142
+ hdrs[header[0]] << header[1]
143
+ hdrs
137
144
  end
138
145
 
139
146
  if (auth_cred = auth.get(req)) && auth.scheme == 'Basic'
@@ -1,3 +1,3 @@
1
1
  module WebMock
2
- VERSION = '1.7.5' unless defined?(::WebMock::VERSION)
2
+ VERSION = '1.7.6' unless defined?(::WebMock::VERSION)
3
3
  end
@@ -1,17 +1,17 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_shared'
1
+ require 'spec_helper'
2
+ require 'acceptance/webmock_shared'
3
3
 
4
4
  unless RUBY_PLATFORM =~ /java/
5
- require 'curb_spec_helper'
5
+ require 'acceptance/curb/curb_spec_helper'
6
6
 
7
7
  shared_examples_for "Curb" do
8
8
  include CurbSpecHelper
9
9
 
10
- it_should_behave_like "WebMock"
10
+ include_examples "with WebMock"
11
11
 
12
12
  describe "when doing PUTs" do
13
13
  it "should stub them" do
14
- stub_http_request(:put, "www.example.com").with(:body => "01234")
14
+ stub_request(:put, "www.example.com").with(:body => "01234")
15
15
  http_request(:put, "http://www.example.com", :body => "01234").
16
16
  status.should == "200"
17
17
  end
@@ -273,7 +273,7 @@ unless RUBY_PLATFORM =~ /java/
273
273
  include CurbSpecHelper::NamedHttp
274
274
 
275
275
  it "should work with blank arguments for post" do
276
- stub_http_request(:post, "www.example.com").with(:body => "01234")
276
+ stub_request(:post, "www.example.com").with(:body => "01234")
277
277
  c = Curl::Easy.new
278
278
  c.url = "http://www.example.com"
279
279
  c.post_body = "01234"
@@ -282,13 +282,13 @@ unless RUBY_PLATFORM =~ /java/
282
282
  end
283
283
 
284
284
  it "should work with several body arguments for post using the class method" do
285
- stub_http_request(:post, "www.example.com").with(:user => {:first_name=>'Bartosz', :last_name=>'Blimke'})
285
+ stub_request(:post, "www.example.com").with(:user => {:first_name=>'Bartosz', :last_name=>'Blimke'})
286
286
  c = Curl::Easy.http_post "http://www.example.com", 'user[first_name]=Bartosz', 'user[last_name]=Blimke'
287
287
  c.response_code.should == 200
288
288
  end
289
289
 
290
290
  it "should work with blank arguments for put" do
291
- stub_http_request(:put, "www.example.com").with(:body => "01234")
291
+ stub_request(:put, "www.example.com").with(:body => "01234")
292
292
  c = Curl::Easy.new
293
293
  c.url = "http://www.example.com"
294
294
  c.put_data = "01234"
@@ -299,7 +299,7 @@ unless RUBY_PLATFORM =~ /java/
299
299
  it "should work with multiple arguments for post" do
300
300
  data = { :name => "john", :address => "111 example ave" }
301
301
 
302
- stub_http_request(:post, "www.example.com").with(:body => data)
302
+ stub_request(:post, "www.example.com").with(:body => data)
303
303
  c = Curl::Easy.new
304
304
  c.url = "http://www.example.com"
305
305
  c.http_post Curl::PostField.content('name', data[:name]), Curl::PostField.content('address', data[:address])
@@ -1,21 +1,21 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_shared'
1
+ require 'spec_helper'
2
+ require 'acceptance/webmock_shared'
3
3
  require 'ostruct'
4
4
 
5
5
  unless RUBY_PLATFORM =~ /java/
6
- require 'em_http_request_spec_helper'
6
+ require 'acceptance/em_http_request/em_http_request_spec_helper'
7
7
 
8
- describe "Webmock with EM::HttpRequest" do
8
+ describe "EM::HttpRequest" do
9
9
  include EMHttpRequestSpecHelper
10
10
 
11
- it_should_behave_like "WebMock"
11
+ include_examples "with WebMock"
12
12
 
13
13
  #functionality only supported for em-http-request 1.x
14
14
  if defined?(EventMachine::HttpConnection)
15
15
  describe "with middleware" do
16
16
 
17
17
  it "should work with request middleware" do
18
- stub_http_request(:get, "www.example.com").with(:body => 'bar')
18
+ stub_request(:get, "www.example.com").with(:body => 'bar')
19
19
 
20
20
  middleware = Class.new do
21
21
  def request(client, head, body)
@@ -38,7 +38,7 @@ unless RUBY_PLATFORM =~ /java/
38
38
  end
39
39
 
40
40
  it "should work with response middleware" do
41
- stub_http_request(:get, "www.example.com").to_return(:body => 'foo')
41
+ stub_request(:get, "www.example.com").to_return(:body => 'foo')
42
42
 
43
43
  middleware = Class.new do
44
44
  def response(resp)
@@ -102,7 +102,7 @@ unless RUBY_PLATFORM =~ /java/
102
102
  end
103
103
 
104
104
  it "should work with streaming" do
105
- stub_http_request(:get, "www.example.com").to_return(:body => "abc")
105
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
106
106
  response = ""
107
107
  EM.run {
108
108
  http = EventMachine::HttpRequest.new('http://www.example.com/').get
@@ -112,28 +112,28 @@ unless RUBY_PLATFORM =~ /java/
112
112
  end
113
113
 
114
114
  it "should work with responses that use chunked transfer encoding" do
115
- stub_http_request(:get, "www.example.com").to_return(:body => "abc", :headers => { 'Transfer-Encoding' => 'chunked' })
115
+ stub_request(:get, "www.example.com").to_return(:body => "abc", :headers => { 'Transfer-Encoding' => 'chunked' })
116
116
  http_request(:get, "http://www.example.com").body.should == "abc"
117
117
  end
118
118
 
119
119
  it "should work with optional query params" do
120
- stub_http_request(:get, "www.example.com/?x=3&a[]=b&a[]=c").to_return(:body => "abc")
120
+ stub_request(:get, "www.example.com/?x=3&a[]=b&a[]=c").to_return(:body => "abc")
121
121
  http_request(:get, "http://www.example.com/?x=3", :query => {"a" => ["b", "c"]}).body.should == "abc"
122
122
  end
123
123
 
124
124
  it "should work with optional query params declared as string" do
125
- stub_http_request(:get, "www.example.com/?x=3&a[]=b&a[]=c").to_return(:body => "abc")
125
+ stub_request(:get, "www.example.com/?x=3&a[]=b&a[]=c").to_return(:body => "abc")
126
126
  http_request(:get, "http://www.example.com/?x=3", :query => "a[]=b&a[]=c").body.should == "abc"
127
127
  end
128
128
 
129
129
  it "should work when the body is passed as a Hash" do
130
- stub_http_request(:post, "www.example.com").with(:body => {:a => "1", :b => "2"}).to_return(:body => "ok")
130
+ stub_request(:post, "www.example.com").with(:body => {:a => "1", :b => "2"}).to_return(:body => "ok")
131
131
  http_request(:post, "http://www.example.com", :body => {:a => "1", :b => "2"}).body.should == "ok"
132
132
  end
133
133
 
134
134
  describe "mocking EM::HttpClient API" do
135
135
  before do
136
- stub_http_request(:get, "www.example.com/")
136
+ stub_request(:get, "www.example.com/")
137
137
  WebMock::HttpLibAdapters::EmHttpRequestAdapter.enable!
138
138
  end
139
139
  subject do
@@ -0,0 +1,67 @@
1
+ require 'spec_helper'
2
+ require 'acceptance/webmock_shared'
3
+ require 'ostruct'
4
+
5
+ require 'acceptance/httpclient/httpclient_spec_helper'
6
+
7
+ describe "HTTPClient" do
8
+ include HTTPClientSpecHelper
9
+
10
+ before(:each) do
11
+ HTTPClientSpecHelper.async_mode = false
12
+ end
13
+
14
+ include_examples "with WebMock"
15
+
16
+ it "should yield block on response if block provided" do
17
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
18
+ response_body = ""
19
+ http_request(:get, "http://www.example.com/") do |body|
20
+ response_body = body
21
+ end
22
+ response_body.should == "abc"
23
+ end
24
+
25
+ it "should match requests if headers are the same but in different order" do
26
+ stub_request(:get, "www.example.com").with(:headers => {"a" => ["b", "c"]} )
27
+ http_request(
28
+ :get, "http://www.example.com/",
29
+ :headers => {"a" => ["c", "b"]}).status.should == "200"
30
+ end
31
+
32
+ describe "when using async requests" do
33
+ before(:each) do
34
+ HTTPClientSpecHelper.async_mode = true
35
+ end
36
+
37
+ include_examples "with WebMock"
38
+ end
39
+
40
+ context "Filters" do
41
+ class Filter
42
+ def filter_request(request)
43
+ request.header["Authorization"] = "Bearer 0123456789"
44
+ end
45
+
46
+ def filter_response(request, response)
47
+ response.header.set('X-Powered-By', 'webmock')
48
+ end
49
+ end
50
+
51
+ before do
52
+ @client = HTTPClient.new
53
+ @client.request_filter << Filter.new
54
+ stub_request(:get, 'www.example.com').with(:headers => {'Authorization' => 'Bearer 0123456789'})
55
+ end
56
+
57
+ it "supports request filters" do
58
+ @client.request(:get, 'http://www.example.com/').status.should == 200
59
+ end
60
+
61
+ it "supports response filters" do
62
+ res = @client.request(:get, 'http://www.example.com/')
63
+ res.header['X-Powered-By'].first.should == 'webmock'
64
+ end
65
+ end
66
+
67
+ end
@@ -1,13 +1,13 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_shared'
1
+ require 'spec_helper'
3
2
  require 'ostruct'
4
- require 'net_http_spec_helper'
5
- require 'net_http_shared'
3
+ require 'acceptance/webmock_shared'
4
+ require 'acceptance/net_http/net_http_spec_helper'
5
+ require 'acceptance/net_http/net_http_shared'
6
6
 
7
7
  include NetHTTPSpecHelper
8
8
 
9
- describe "Webmock with Net:HTTP" do
10
- it_should_behave_like "WebMock"
9
+ describe "Net:HTTP" do
10
+ include_examples "with WebMock"
11
11
 
12
12
  let(:port){ WebMockServer.instance.port }
13
13
 
@@ -1,9 +1,9 @@
1
1
  require 'rubygems'
2
2
  require 'rspec'
3
3
  require 'net/http'
4
- require 'net_http_shared'
5
4
  require 'net/https'
6
5
  require 'stringio'
6
+ require 'acceptance/net_http/net_http_shared'
7
7
  require 'support/webmock_server'
8
8
 
9
9
  describe "Real Net:HTTP without webmock", :without_webmock => true do
@@ -1,17 +1,17 @@
1
1
  # encoding: utf-8
2
2
 
3
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
4
- require 'webmock_shared'
3
+ require 'spec_helper'
4
+ require 'acceptance/webmock_shared'
5
5
 
6
6
  unless RUBY_PLATFORM =~ /java/
7
- require 'patron_spec_helper'
7
+ require 'acceptance/patron/patron_spec_helper'
8
8
  require 'tmpdir'
9
9
  require 'fileutils'
10
10
 
11
- describe "Webmock with Patron" do
11
+ describe "Patron" do
12
12
  include PatronSpecHelper
13
13
 
14
- it_should_behave_like "WebMock"
14
+ include_examples "with WebMock"
15
15
 
16
16
  describe "when custom functionality is used" do
17
17
  before(:each) do
@@ -33,13 +33,13 @@ unless RUBY_PLATFORM =~ /java/
33
33
 
34
34
 
35
35
  it "should work with get_file" do
36
- stub_http_request(:get, "www.example.com").to_return(:body => "abc")
36
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
37
37
  @sess.get_file("/", @file_path)
38
38
  File.read(@file_path).should == "abc"
39
39
  end
40
40
 
41
41
  it "should raise same error as Patron if file is not readable for get request" do
42
- stub_http_request(:get, "www.example.com")
42
+ stub_request(:get, "www.example.com")
43
43
  File.open("/tmp/read_only_file", "w") do |tmpfile|
44
44
  tmpfile.chmod(0400)
45
45
  end
@@ -54,18 +54,18 @@ unless RUBY_PLATFORM =~ /java/
54
54
 
55
55
  it "should work with put_file" do
56
56
  File.open(@file_path, "w") {|f| f.write "abc"}
57
- stub_http_request(:put, "www.example.com").with(:body => "abc")
57
+ stub_request(:put, "www.example.com").with(:body => "abc")
58
58
  @sess.put_file("/", @file_path)
59
59
  end
60
60
 
61
61
  it "should work with post_file" do
62
62
  File.open(@file_path, "w") {|f| f.write "abc"}
63
- stub_http_request(:post, "www.example.com").with(:body => "abc")
63
+ stub_request(:post, "www.example.com").with(:body => "abc")
64
64
  @sess.post_file("/", @file_path)
65
65
  end
66
66
 
67
67
  it "should raise same error as Patron if file is not readable for post request" do
68
- stub_http_request(:post, "www.example.com").with(:body => "abc")
68
+ stub_request(:post, "www.example.com").with(:body => "abc")
69
69
  lambda {
70
70
  @sess.post_file("/", "/path/to/non/existing/file")
71
71
  }.should raise_error(ArgumentError, "Unable to open specified file.")
@@ -75,7 +75,7 @@ unless RUBY_PLATFORM =~ /java/
75
75
 
76
76
  describe "handling errors same way as patron" do
77
77
  it "should raise error if put request has neither upload_data nor file_name" do
78
- stub_http_request(:post, "www.example.com")
78
+ stub_request(:post, "www.example.com")
79
79
  lambda {
80
80
  @sess.post("/", nil)
81
81
  }.should raise_error(ArgumentError, "Must provide either data or a filename when doing a PUT or POST")
@@ -83,7 +83,7 @@ unless RUBY_PLATFORM =~ /java/
83
83
  end
84
84
 
85
85
  it "should work with WebDAV copy request" do
86
- stub_http_request(:copy, "www.example.com/abc").with(:headers => {'Destination' => "/def"})
86
+ stub_request(:copy, "www.example.com/abc").with(:headers => {'Destination' => "/def"})
87
87
  @sess.copy("/abc", "/def")
88
88
  end
89
89
 
@@ -0,0 +1,142 @@
1
+ shared_context "allowing and disabling net connect" do
2
+ describe "when net connect" do
3
+ describe "is allowed", :net_connect => true do
4
+ before(:each) do
5
+ WebMock.allow_net_connect!
6
+ end
7
+
8
+ it "should make a real web request if request is not stubbed" do
9
+ http_request(:get, webmock_server_url).status.should == "200"
10
+ end
11
+
12
+ it "should make a real https request if request is not stubbed" do
13
+ unless http_library == :httpclient
14
+ http_request(:get, "https://www.paypal.com/uk/cgi-bin/webscr").
15
+ body.should =~ /.*paypal.*/
16
+ end
17
+ end
18
+
19
+ it "should return stubbed response if request was stubbed" do
20
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
21
+ http_request(:get, "http://www.example.com/").body.should == "abc"
22
+ end
23
+ end
24
+
25
+ describe "is not allowed" do
26
+ before(:each) do
27
+ WebMock.disable_net_connect!
28
+ end
29
+
30
+ it "should return stubbed response if request was stubbed" do
31
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
32
+ http_request(:get, "http://www.example.com/").body.should == "abc"
33
+ end
34
+
35
+ it "should return stubbed response if request with path was stubbed" do
36
+ stub_request(:get, "www.example.com/hello_world").to_return(:body => "abc")
37
+ http_request(:get, "http://www.example.com/hello_world").body.should == "abc"
38
+ end
39
+
40
+ it "should raise exception if request was not stubbed" do
41
+ lambda {
42
+ http_request(:get, "http://www.example.com/")
43
+ }.should raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
44
+ end
45
+ end
46
+
47
+ describe "is not allowed with exception for localhost" do
48
+ before(:each) do
49
+ WebMock.disable_net_connect!(:allow_localhost => true)
50
+ end
51
+
52
+ it "should return stubbed response if request was stubbed" do
53
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
54
+ http_request(:get, "http://www.example.com/").body.should == "abc"
55
+ end
56
+
57
+ it "should raise exception if request was not stubbed" do
58
+ lambda {
59
+ http_request(:get, "http://www.example.com/")
60
+ }.should raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
61
+ end
62
+
63
+ it "should make a real request to localhost" do
64
+ lambda {
65
+ http_request(:get, "http://localhost:12345/")
66
+ }.should raise_error(connection_refused_exception_class)
67
+ end
68
+
69
+ it "should make a real request to 127.0.0.1" do
70
+ lambda {
71
+ http_request(:get, "http://127.0.0.1:12345/")
72
+ }.should raise_error(connection_refused_exception_class)
73
+ end
74
+
75
+ it "should make a real request to 0.0.0.0" do
76
+ lambda {
77
+ http_request(:get, "http://0.0.0.0:12345/")
78
+ }.should raise_error(connection_refused_exception_class)
79
+ end
80
+ end
81
+
82
+ describe "is not allowed with exception for allowed domains" do
83
+ let(:host_with_port){ WebMockServer.instance.host_with_port }
84
+
85
+ before(:each) do
86
+ WebMock.disable_net_connect!(:allow => ["www.example.org", host_with_port])
87
+ end
88
+
89
+ context "when the host is not allowed" do
90
+ it "should return stubbed response if request was stubbed" do
91
+ stub_request(:get, "www.example.com").to_return(:body => "abc")
92
+ http_request(:get, "http://www.example.com/").body.should == "abc"
93
+ end
94
+
95
+ it "should raise exception if request was not stubbed" do
96
+ lambda {
97
+ http_request(:get, "http://www.example.com/")
98
+ }.should raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
99
+ end
100
+ end
101
+
102
+ context "when the host with port is not allowed" do
103
+ it "should return stubbed response if request was stubbed" do
104
+ stub_request(:get, "http://localhost:2345").to_return(:body => "abc")
105
+ http_request(:get, "http://localhost:2345/").body.should == "abc"
106
+ end
107
+
108
+ it "should raise exception if request was not stubbed" do
109
+ lambda {
110
+ http_request(:get, "http://localhost:2345/")
111
+ }.should raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://localhost:2345/))
112
+ end
113
+ end
114
+
115
+ context "when the host is allowed" do
116
+ it "should raise exception if request was not stubbed" do
117
+ lambda {
118
+ http_request(:get, "http://www.example.com/")
119
+ }.should raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
120
+ end
121
+
122
+ it "should make a real request to allowed host", :net_connect => true do
123
+ http_request(:get, "http://www.example.org/").status.should == "302"
124
+ end
125
+ end
126
+
127
+ context "when the host with port is allowed" do
128
+ it "should make a real request to allowed host", :net_connect => true do
129
+ http_request(:get, "http://#{host_with_port}/").status.should == "200"
130
+ end
131
+ end
132
+
133
+ context "when the host is allowed but not port" do
134
+ it "should make a real request to allowed host", :net_connect => true do
135
+ lambda {
136
+ http_request(:get, "http://localhost:123/")
137
+ }.should raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://localhost:123/))
138
+ end
139
+ end
140
+ end
141
+ end
142
+ end