webmock 1.8.9 → 1.8.10

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/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.8.10
4
+
5
+ * em-http-request fix. After request callbacks are correctly invoked for 3xx responses,
6
+ when :redirects option is set.
7
+
8
+ Thanks to [Myron Marston](https://github.com/myronmarston) for reporting that issue.
9
+
10
+ * Fixed compatibility with Net::HTTP::DigestAuth
11
+
12
+ Thanks to [Jonathan Hyman](https://github.com/jonhyman) for reporting that issue.
13
+
14
+ * Fixed problem in em-http-request 0.x appending the query to the client URI twice.
15
+
16
+ Thanks to [Paweł Pierzchała](https://github.com/wrozka)
17
+
3
18
  ## 1.8.9
4
19
 
5
20
  * Fixed problem with caching nil responses when the same HTTPClient instance is used.
data/README.md CHANGED
@@ -713,6 +713,7 @@ People who submitted patches and new features or suggested improvements. Many th
713
713
  * Kevin Glowacz
714
714
  * Hans Hasselberg
715
715
  * Andrew France
716
+ * Jonathan Hyman
716
717
 
717
718
  For a full list of contributors you can visit the
718
719
  [contributors](https://github.com/bblimke/webmock/contributors) page.
data/Rakefile CHANGED
@@ -27,7 +27,7 @@ end
27
27
 
28
28
 
29
29
  task :em_http_request_0_x_spec do
30
- sh "EM_HTTP_REQUEST_0_X=true bundle install && bundle exec rspec spec/acceptance/em_http_request/em_http_request_spec.rb" if RUBY_VERSION <= "1.8.7"
30
+ sh "EM_HTTP_REQUEST_0_X=true bundle install && EM_HTTP_REQUEST_0_X=true bundle exec rspec spec/acceptance/em_http_request/em_http_request_spec.rb" if RUBY_VERSION <= "1.8.7"
31
31
  end
32
32
 
33
33
  require 'rake/testtask'
@@ -90,11 +90,11 @@ if defined?(EventMachine::HttpRequest)
90
90
  if @req
91
91
  options = @req.options
92
92
  method = @req.method
93
- uri = @req.uri
93
+ uri = @req.uri.dup
94
94
  else
95
95
  options = @options
96
96
  method = @method
97
- uri = @uri
97
+ uri = @uri.dup
98
98
  end
99
99
 
100
100
  if options[:authorization] || options['authorization']
@@ -108,14 +108,16 @@ if defined?(EventMachine::HttpClient)
108
108
  end
109
109
  end
110
110
 
111
- def set_deferred_status(status, *args)
112
- if status == :succeeded && !stubbed_webmock_response && WebMock::CallbackRegistry.any_callbacks?
111
+ def unbind(reason = nil)
112
+ if !stubbed_webmock_response && WebMock::CallbackRegistry.any_callbacks?
113
113
  webmock_response = build_webmock_response
114
114
  WebMock::CallbackRegistry.invoke_callbacks(
115
115
  {:lib => :em_http_request, :real_request => true},
116
116
  request_signature,
117
117
  webmock_response)
118
118
  end
119
+ @request_signature = nil
120
+ remove_instance_variable(:@stubbed_webmock_response)
119
121
 
120
122
  super
121
123
  end
@@ -28,6 +28,14 @@ module WebMock
28
28
  Net.send(:const_set, :HTTP, OriginalNetHTTP)
29
29
  Net.send(:const_set, :HTTPSession, OriginalNetHTTP)
30
30
  Net.send(:const_set, :BufferedIO, OriginalNetBufferedIO)
31
+
32
+ #copy all constants from @webMockNetHTTP to original Net::HTTP
33
+ #in case any constants were added to @webMockNetHTTP instead of Net::HTTP
34
+ #after WebMock was enabled.
35
+ #i.e Net::HTTP::DigestAuth
36
+ (@webMockNetHTTP.constants - OriginalNetHTTP.constants).each do |constant|
37
+ OriginalNetHTTP.send(:const_set, constant, @webMockNetHTTP.const_get(constant))
38
+ end
31
39
  end
32
40
 
33
41
  @webMockNetHTTP = Class.new(Net::HTTP) do
@@ -1,3 +1,3 @@
1
1
  module WebMock
2
- VERSION = '1.8.9' unless defined?(::WebMock::VERSION)
2
+ VERSION = '1.8.10' unless defined?(::WebMock::VERSION)
3
3
  end
@@ -13,6 +13,39 @@ unless RUBY_PLATFORM =~ /java/
13
13
 
14
14
  #functionality only supported for em-http-request 1.x
15
15
  if defined?(EventMachine::HttpConnection)
16
+ context 'when a real request is made and redirects are followed' do
17
+ before { WebMock.allow_net_connect! }
18
+
19
+ # This url redirects to the https URL.
20
+ let(:http_url) { "http://raw.github.com:80/gist/fb555cb593f3349d53af/6921dd638337d3f6a51b0e02e7f30e3c414f70d6/vcr_gist" }
21
+ let(:https_url) { http_url.gsub('http', 'https').gsub('80', '443') }
22
+
23
+ def make_request
24
+ EM.run do
25
+ request = EM::HttpRequest.new(http_url).get(:redirects => 1)
26
+ request.callback { EM.stop }
27
+ end
28
+ end
29
+
30
+ it "invokes the globally_stub_request hook with both requests" do
31
+ urls = []
32
+ WebMock.globally_stub_request { |r| urls << r.uri.to_s; nil }
33
+
34
+ make_request
35
+
36
+ urls.should eq([http_url, https_url])
37
+ end
38
+
39
+ it 'invokes the after_request hook with both requests' do
40
+ urls = []
41
+ WebMock.after_request { |req, res| urls << req.uri.to_s }
42
+
43
+ make_request
44
+
45
+ urls.should eq([http_url, https_url])
46
+ end
47
+ end
48
+
16
49
  describe "with middleware" do
17
50
 
18
51
  it "should work with request middleware" do
@@ -38,19 +71,21 @@ unless RUBY_PLATFORM =~ /java/
38
71
  end
39
72
  end
40
73
 
41
- it "should work with response middleware" do
42
- stub_request(:get, "www.example.com").to_return(:body => 'foo')
43
-
44
- middleware = Class.new do
74
+ let(:response_middleware) do
75
+ Class.new do
45
76
  def response(resp)
46
77
  resp.response = 'bar'
47
78
  end
48
79
  end
80
+ end
81
+
82
+ it "should work with response middleware" do
83
+ stub_request(:get, "www.example.com").to_return(:body => 'foo')
49
84
 
50
85
  EM.run do
51
86
  conn = EventMachine::HttpRequest.new('http://www.example.com/')
52
87
 
53
- conn.use middleware
88
+ conn.use response_middleware
54
89
 
55
90
  http = conn.get
56
91
 
@@ -60,6 +95,36 @@ unless RUBY_PLATFORM =~ /java/
60
95
  end
61
96
  end
62
97
  end
98
+
99
+ let(:webmock_server_url) { "http://#{WebMockServer.instance.host_with_port}/" }
100
+
101
+ shared_examples_for "em-http-request middleware/after_request hook integration" do
102
+ it 'yields the original raw body to the after_request hook even if a response middleware modifies the body' do
103
+ yielded_response_body = nil
104
+ ::WebMock.after_request do |request, response|
105
+ yielded_response_body = response.body
106
+ end
107
+
108
+ EM::HttpRequest.use response_middleware
109
+
110
+ EM.run do
111
+ http = EventMachine::HttpRequest.new(webmock_server_url).get
112
+ http.callback { EM.stop }
113
+ end
114
+
115
+ yielded_response_body.should eq("hello world")
116
+ end
117
+ end
118
+
119
+ context 'making a real request' do
120
+ before { WebMock.allow_net_connect! }
121
+ include_examples "em-http-request middleware/after_request hook integration"
122
+ end
123
+
124
+ context 'when the request is stubbed' do
125
+ before { stub_request(:get, webmock_server_url).to_return(:body => 'hello world') }
126
+ include_examples "em-http-request middleware/after_request hook integration"
127
+ end
63
128
  end
64
129
 
65
130
  # not pretty, but it works
@@ -174,7 +239,8 @@ unless RUBY_PLATFORM =~ /java/
174
239
 
175
240
  it "#request_signature doesn't mutate the original uri" do
176
241
  subject.uri.should == Addressable::URI.parse("http://www.example.com/?a=1")
177
- subject.request_signature.uri.should == Addressable::URI.parse(uri)
242
+ signature = WebMock::RequestRegistry.instance.requested_signatures.hash.keys.first
243
+ signature.uri.should == Addressable::URI.parse(uri)
178
244
  end
179
245
  end
180
246
  end
@@ -86,6 +86,19 @@ describe "Net:HTTP" do
86
86
  Object.const_get("Net").const_get("HTTP").constants(false).map(&:to_s).should include("Get")
87
87
  end
88
88
  end
89
+
90
+ describe "after WebMock is disabled" do
91
+ after(:each) do
92
+ WebMock.enable!
93
+ end
94
+ it "Net::HTTP should have the same constants" do
95
+ orig_consts_number = Net::HTTP.constants.size
96
+ Net::HTTP.send(:const_set, "TEST_CONST", 10)
97
+ Net::HTTP.constants.size.should == orig_consts_number + 1
98
+ WebMock.disable!
99
+ Net::HTTP.constants.size.should == orig_consts_number + 1
100
+ end
101
+ end
89
102
  end
90
103
 
91
104
  it "should work with block provided" do
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: 37
4
+ hash: 35
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 8
9
- - 9
10
- version: 1.8.9
9
+ - 10
10
+ version: 1.8.10
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: 2012-08-15 00:00:00 Z
18
+ date: 2012-09-09 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: addressable