webmock 1.3.4 → 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,22 @@
1
1
  #Changelog
2
2
 
3
+ ## 1.3.5
4
+
5
+ * External requests can be disabled while allowing selected hosts. Thanks to Charles Li and Ryan Bigg
6
+
7
+ This feature was available before only for localhost with `:allow_localhost => true`
8
+
9
+ WebMock.disable_net_connect!(:allow => "www.example.org")
10
+
11
+ Net::HTTP.get('www.something.com', '/') # ===> Failure
12
+
13
+ Net::HTTP.get('www.example.org', '/') # ===> Allowed.
14
+
15
+ * Fixed Net::HTTP adapter so that it preserves the original behavior of Net::HTTP.
16
+
17
+ When making a request with a block that calls #read_body on the request,
18
+ Net::HTTP causes the body to be set to a Net::ReadAdapter, but WebMock was causing the body to be set to a string.
19
+
3
20
  ## 1.3.4
4
21
 
5
22
  * Fixed Net::HTTP adapter to handle cases where a block with `read_body` call is passed to `request`.
data/README.md CHANGED
@@ -301,6 +301,14 @@ You can also use WebMock outside a test framework:
301
301
 
302
302
  Net::HTTP.get('localhost:9887', '/') # ===> Allowed. Perhaps to Selenium?
303
303
 
304
+ ### External requests can be disabled while allowing any hostname
305
+
306
+ WebMock.disable_net_connect!(:allow => "www.example.org")
307
+
308
+ Net::HTTP.get('www.something.com', '/') # ===> Failure
309
+
310
+ Net::HTTP.get('www.example.org', '/') # ===> Allowed.
311
+
304
312
  ## Setting Expectations
305
313
 
306
314
  ### Setting expectations in Test::Unit
@@ -525,6 +533,8 @@ People who submitted patches and new features or suggested improvements. Many th
525
533
  * Nathaniel Bibler
526
534
  * Martyn Loughran
527
535
  * Muness Alrubaie
536
+ * Charles Li
537
+ * Ryan Bigg
528
538
 
529
539
  ## Background
530
540
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.4
1
+ 1.3.5
@@ -4,5 +4,6 @@ module WebMock
4
4
 
5
5
  attr_accessor :allow_net_connect
6
6
  attr_accessor :allow_localhost
7
+ attr_accessor :allow
7
8
  end
8
9
  end
@@ -17,13 +17,6 @@ class StubSocket #:nodoc:
17
17
 
18
18
  end
19
19
 
20
- module StubResponse
21
- def read_body(*args, &block)
22
- yield @body if block_given?
23
- @body
24
- end
25
- end
26
-
27
20
  module Net #:nodoc: all
28
21
 
29
22
  class BufferedIO
@@ -105,7 +98,7 @@ module Net #:nodoc: all
105
98
 
106
99
  response.instance_variable_set(:@read, true)
107
100
 
108
- response.extend StubResponse
101
+ response.extend WebMock::Net::HTTPResponse
109
102
 
110
103
  raise Timeout::Error, "execution expired" if webmock_response.should_timeout
111
104
 
@@ -37,14 +37,16 @@ module WebMock
37
37
  def disable_net_connect!(options = {})
38
38
  Config.instance.allow_net_connect = false
39
39
  Config.instance.allow_localhost = options[:allow_localhost]
40
+ Config.instance.allow = options[:allow]
40
41
  end
41
42
 
42
43
  def net_connect_allowed?(uri = nil)
43
44
  if uri.is_a?(String)
44
45
  uri = WebMock::Util::URI.normalize_uri(uri)
45
46
  end
46
- Config.instance.allow_net_connect ||
47
- (Config.instance.allow_localhost && uri.is_a?(Addressable::URI) && (uri.host == 'localhost' || uri.host == '127.0.0.1'))
47
+ Config.instance.allow_net_connect ||
48
+ (Config.instance.allow_localhost && uri.is_a?(Addressable::URI) && (uri.host == 'localhost' || uri.host == '127.0.0.1')) ||
49
+ Config.instance.allow && Config.instance.allow.include?(uri.host)
48
50
  end
49
51
 
50
52
  def registered_request?(request_signature)
@@ -74,6 +74,18 @@ describe "Webmock with Net:HTTP" do
74
74
  body.should =~ /Example Web Page/
75
75
  end
76
76
 
77
+ it "should return a Net::ReadAdapter from response.body when a stubbed request is made with a block and #read_body" do
78
+ WebMock.stub_request(:get, 'http://example.com/').to_return(:body => "the body")
79
+ response = Net::HTTP.new('example.com', 80).request_get('/') { |r| r.read_body { } }
80
+ response.body.should be_a(Net::ReadAdapter)
81
+ end
82
+
83
+ it "should return a Net::ReadAdapter from response.body when a real request is made with a block and #read_body" do
84
+ WebMock.allow_net_connect!
85
+ response = Net::HTTP.new('example.com', 80).request_get('/') { |r| r.read_body { } }
86
+ response.body.should be_a(Net::ReadAdapter)
87
+ end
88
+
77
89
  describe 'after_request callback support' do
78
90
  let(:expected_body_regex) { /You have reached this web page by typing.*example\.com/ }
79
91
 
@@ -99,6 +99,27 @@ describe "WebMock", :shared => true do
99
99
  }.should raise_error(connection_refused_exception_class)
100
100
  end
101
101
  end
102
+
103
+ describe "is not allowed with exception for allowed domains" do
104
+ before(:each) do
105
+ WebMock.disable_net_connect!(:allow => ["www.example.org"])
106
+ end
107
+
108
+ it "should return stubbed response if request was stubbed" do
109
+ stub_http_request(:get, "www.example.com").to_return(:body => "abc")
110
+ http_request(:get, "http://www.example.com/").body.should == "abc"
111
+ end
112
+
113
+ it "should raise exception if request was not stubbed" do
114
+ lambda {
115
+ http_request(:get, "http://www.example.com/")
116
+ }.should raise_error(WebMock::NetConnectNotAllowedError, client_specific_request_string("Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/"))
117
+ end
118
+
119
+ it "should allow a real request to cms.local" do
120
+ http_request(:get, "http://www.example.org/").status.should == "200"
121
+ end
122
+ end
102
123
  end
103
124
 
104
125
  describe "when matching requests" do
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{webmock}
8
- s.version = "1.3.4"
8
+ s.version = "1.3.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bartosz Blimke"]
12
- s.date = %q{2010-08-10}
12
+ s.date = %q{2010-09-06}
13
13
  s.description = %q{WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.}
14
14
  s.email = %q{bartosz.blimke@gmail.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webmock
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 3
9
- - 4
10
- version: 1.3.4
9
+ - 5
10
+ version: 1.3.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bartosz Blimke
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-10 00:00:00 +01:00
18
+ date: 2010-09-06 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency