webmock 0.8.0 → 0.8.1
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 +8 -0
- data/VERSION +1 -1
- data/lib/webmock/adapters/rspec.rb +0 -1
- data/lib/webmock/adapters/test_unit.rb +2 -2
- data/lib/webmock/http_lib_adapters/httpclient.rb +3 -3
- data/lib/webmock/http_lib_adapters/net_http.rb +17 -3
- data/lib/webmock/response.rb +9 -6
- data/lib/webmock/util/uri.rb +1 -1
- data/lib/webmock/webmock.rb +0 -2
- data/spec/httpclient_spec_helper.rb +1 -1
- data/spec/net_http_spec.rb +18 -1
- data/spec/net_http_spec_helper.rb +4 -3
- data/spec/other_net_http_libs_spec.rb +1 -1
- data/spec/response_spec.rb +6 -0
- data/spec/webmock_spec.rb +22 -2
- data/test/test_helper.rb +1 -1
- data/webmock.gemspec +2 -2
- metadata +2 -2
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
== 0.8.1
|
|
2
|
+
* Fixed HTTPClient adapter compatibility with Ruby 1.8.6 (reported by Piotr Usewicz)
|
|
3
|
+
* Net:HTTP adapter now handles request body assigned as Net::HTTP::Post#body attribute (fixed by Mack Earnhardt)
|
|
4
|
+
* Fixed issue where requests were not matching stubs with Accept header set.(reported by Piotr Usewicz)
|
|
5
|
+
* Fixed compatibility with Ruby 1.9.1, 1.9.2 and JRuby 1.3.1 (reported by Diego E. “Flameeyes” Pettenò)
|
|
6
|
+
* Fixed issue with response body declared as IO object and multiple requests (reported by Niels Meersschaert)
|
|
7
|
+
* Fixed "undefined method `assertion_failure'" error (reported by Nick Plante)
|
|
8
|
+
|
|
1
9
|
== 0.8.0
|
|
2
10
|
|
|
3
11
|
* Support for HTTPClient (sync and async requests)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.8.
|
|
1
|
+
0.8.1
|
|
@@ -16,9 +16,9 @@ class Test::Unit::TestCase
|
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
module WebMock
|
|
19
|
-
|
|
19
|
+
AssertionFailedError = Test::Unit::AssertionFailedError rescue MiniTest::Assertion # ruby1.9 compat
|
|
20
20
|
def assertion_failure(message)
|
|
21
|
-
raise
|
|
21
|
+
raise AssertionFailedError.new(message)
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
|
|
@@ -27,7 +27,7 @@ if defined?(HTTPClient)
|
|
|
27
27
|
end
|
|
28
28
|
else
|
|
29
29
|
message = "Real HTTP connections are disabled. Unregistered request: #{request_signature}"
|
|
30
|
-
assertion_failure(message)
|
|
30
|
+
WebMock.assertion_failure(message)
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
|
|
@@ -39,7 +39,7 @@ if defined?(HTTPClient)
|
|
|
39
39
|
do_request_async_without_webmock(method, uri, query, body, extheader)
|
|
40
40
|
else
|
|
41
41
|
message = "Real HTTP connections are disabled. Unregistered request: #{request_signature}"
|
|
42
|
-
assertion_failure(message)
|
|
42
|
+
WebMock.assertion_failure(message)
|
|
43
43
|
end
|
|
44
44
|
end
|
|
45
45
|
|
|
@@ -76,7 +76,7 @@ if defined?(HTTPClient)
|
|
|
76
76
|
auth = www_auth.basic_auth
|
|
77
77
|
auth.challenge(req.header.request_uri, nil)
|
|
78
78
|
|
|
79
|
-
headers = Hash[req.header.all]
|
|
79
|
+
headers = Hash[*req.header.all.flatten]
|
|
80
80
|
|
|
81
81
|
if (auth_cred = auth.get(req)) && auth.scheme == 'Basic'
|
|
82
82
|
userinfo = WebMock::Util::Headers.decode_userinfo_from_header(auth_cred)
|
|
@@ -69,10 +69,14 @@ module Net #:nodoc: all
|
|
|
69
69
|
method = request.method.downcase.to_sym
|
|
70
70
|
|
|
71
71
|
headers = Hash[*request.to_hash.map {|k,v| [k, v.flatten]}.flatten]
|
|
72
|
-
|
|
72
|
+
|
|
73
|
+
remove_default_net_http_headers!(headers)
|
|
74
|
+
|
|
73
75
|
headers.reject! {|k,v| k =~ /[Aa]uthorization/ && v =~ /^Basic / } #we added it to url userinfo
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
request.set_body_internal body
|
|
78
|
+
|
|
79
|
+
request_signature = WebMock::RequestSignature.new(method, uri, :body => request.body, :headers => headers)
|
|
76
80
|
|
|
77
81
|
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
|
78
82
|
|
|
@@ -85,7 +89,7 @@ module Net #:nodoc: all
|
|
|
85
89
|
request_without_webmock(request, body, &block)
|
|
86
90
|
else
|
|
87
91
|
message = "Real HTTP connections are disabled. Unregistered request: #{request_signature}"
|
|
88
|
-
assertion_failure(message)
|
|
92
|
+
WebMock.assertion_failure(message)
|
|
89
93
|
end
|
|
90
94
|
end
|
|
91
95
|
alias_method :request_without_webmock, :request
|
|
@@ -117,6 +121,16 @@ module Net #:nodoc: all
|
|
|
117
121
|
|
|
118
122
|
response
|
|
119
123
|
end
|
|
124
|
+
|
|
125
|
+
def remove_default_net_http_headers!(headers)
|
|
126
|
+
default_request = Net::HTTPGenericRequest.new('','','','/')
|
|
127
|
+
default_net_http_headers = Hash[*default_request.to_hash.map {|k,v|
|
|
128
|
+
[k, v.flatten]
|
|
129
|
+
}.flatten]
|
|
130
|
+
headers.reject! {|k,v| default_request[k] == v}
|
|
131
|
+
headers
|
|
132
|
+
end
|
|
133
|
+
|
|
120
134
|
end
|
|
121
135
|
|
|
122
136
|
end
|
data/lib/webmock/response.rb
CHANGED
|
@@ -13,12 +13,8 @@ module WebMock
|
|
|
13
13
|
|
|
14
14
|
def body
|
|
15
15
|
return '' unless @options.has_key?(:body)
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@options[:body].read
|
|
19
|
-
when String
|
|
20
|
-
@options[:body]
|
|
21
|
-
end
|
|
16
|
+
stringify_body!
|
|
17
|
+
@options[:body]
|
|
22
18
|
end
|
|
23
19
|
|
|
24
20
|
def status
|
|
@@ -30,6 +26,7 @@ module WebMock
|
|
|
30
26
|
end
|
|
31
27
|
|
|
32
28
|
def dup
|
|
29
|
+
stringify_body!
|
|
33
30
|
dup_response = super
|
|
34
31
|
dup_response.options = options.dup
|
|
35
32
|
dup_response
|
|
@@ -39,5 +36,11 @@ module WebMock
|
|
|
39
36
|
options == other.options
|
|
40
37
|
end
|
|
41
38
|
|
|
39
|
+
def stringify_body!
|
|
40
|
+
if @options[:body].is_a?(IO)
|
|
41
|
+
@options[:body] = @options[:body].read
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
42
45
|
end
|
|
43
46
|
end
|
data/lib/webmock/util/uri.rb
CHANGED
|
@@ -16,7 +16,7 @@ module WebMock
|
|
|
16
16
|
return uri if uri.is_a?(Regexp)
|
|
17
17
|
uri = 'http://' + uri unless uri.match('^https?://') if uri.is_a?(String)
|
|
18
18
|
normalized_uri = Addressable::URI.heuristic_parse(uri)
|
|
19
|
-
normalized_uri.query_values = normalized_uri.query_values if normalized_uri.query_values
|
|
19
|
+
normalized_uri.query_values = Hash[*normalized_uri.query_values.sort.flatten] if normalized_uri.query_values
|
|
20
20
|
normalized_uri.normalize!
|
|
21
21
|
normalized_uri.port = normalized_uri.inferred_port unless normalized_uri.port
|
|
22
22
|
normalized_uri
|
data/lib/webmock/webmock.rb
CHANGED
|
@@ -19,7 +19,7 @@ module HTTPClientSpecHelper
|
|
|
19
19
|
end
|
|
20
20
|
OpenStruct.new({
|
|
21
21
|
:body => HTTPClientSpecHelper.async_mode ? response.content.read : response.content,
|
|
22
|
-
:headers => Hash[response.header.all],
|
|
22
|
+
:headers => Hash[*response.header.all.flatten],
|
|
23
23
|
:status => response.code.to_s })
|
|
24
24
|
end
|
|
25
25
|
|
data/spec/net_http_spec.rb
CHANGED
|
@@ -13,7 +13,7 @@ describe "Webmock with Net:HTTP" do
|
|
|
13
13
|
stub_http_request(:get, "www.example.com").to_return(:body => "abc"*100000)
|
|
14
14
|
Net::HTTP.start("www.example.com") { |query| query.get("/") }.body.should == "abc"*100000
|
|
15
15
|
end
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
it "should yield block on response" do
|
|
18
18
|
stub_http_request(:get, "www.example.com").to_return(:body => "abc")
|
|
19
19
|
response_body = ""
|
|
@@ -22,4 +22,21 @@ describe "Webmock with Net:HTTP" do
|
|
|
22
22
|
end
|
|
23
23
|
response_body.should == "abc"
|
|
24
24
|
end
|
|
25
|
+
|
|
26
|
+
it "should handle Net::HTTP::Post#body" do
|
|
27
|
+
stub_http_request(:post, "www.example.com").with(:body => "my_params").to_return(:body => "abc")
|
|
28
|
+
req = Net::HTTP::Post.new("/")
|
|
29
|
+
req.body = "my_params"
|
|
30
|
+
Net::HTTP.start("www.example.com") { |http| http.request(req)}.body.should == "abc"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should behave like Net::HTTP and raise error if both request body and body argument are set" do
|
|
34
|
+
stub_http_request(:post, "www.example.com").with(:body => "my_params").to_return(:body => "abc")
|
|
35
|
+
req = Net::HTTP::Post.new("/")
|
|
36
|
+
req.body = "my_params"
|
|
37
|
+
lambda {
|
|
38
|
+
Net::HTTP.start("www.example.com") { |http| http.request(req, "my_params")}
|
|
39
|
+
}.should raise_error("both of body argument and HTTPRequest#body set")
|
|
40
|
+
end
|
|
41
|
+
|
|
25
42
|
end
|
|
@@ -46,8 +46,9 @@ module NetHTTPSpecHelper
|
|
|
46
46
|
# Request/response handling
|
|
47
47
|
request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
|
|
48
48
|
socket.should_receive(:write).with(/#{request_parts[0]}.*#{request_parts[1]}.*/m).and_return(100)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
socket.should_receive(
|
|
49
|
+
|
|
50
|
+
read_method = RUBY_VERSION >= "1.9.2" ? :read_nonblock : :sysread
|
|
51
|
+
socket.should_receive(read_method).once.and_return("HTTP/1.1 #{options[:response_code]} #{options[:response_message]}\nContent-Length: #{options[:response_body].length}\n\n#{options[:response_body]}")
|
|
52
|
+
socket.should_receive(read_method).any_number_of_times.and_raise(EOFError)
|
|
52
53
|
end
|
|
53
54
|
end
|
|
@@ -11,7 +11,7 @@ describe "loading other Net::HTTP based libraries" do
|
|
|
11
11
|
load_path_opts = vendor_dirs.unshift(webmock_dir).map { |dir| "-I#{dir}" }.join(" ")
|
|
12
12
|
|
|
13
13
|
# TODO: use the same Ruby executable that this test was invoked with
|
|
14
|
-
`ruby #{load_path_opts} -e "#{requires}; #{additional_code}" 2>&1`
|
|
14
|
+
`ruby #{load_path_opts} -e "#{requires}; #{additional_code}" 2>&1 | cat`
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
it "should requiring samuel before webmock prints warning" do
|
data/spec/response_spec.rb
CHANGED
|
@@ -60,6 +60,12 @@ describe Response do
|
|
|
60
60
|
@response.body.should == File.new(__FILE__).read
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
+
it "should report many times content of a IO object if provided" do
|
|
64
|
+
@response = Response.new(:body => File.new(__FILE__))
|
|
65
|
+
@response.body.should == File.new(__FILE__).read
|
|
66
|
+
@response.body.should == File.new(__FILE__).read
|
|
67
|
+
end
|
|
68
|
+
|
|
63
69
|
end
|
|
64
70
|
|
|
65
71
|
end
|
data/spec/webmock_spec.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
|
3
3
|
unless defined? SAMPLE_HEADERS
|
|
4
|
-
SAMPLE_HEADERS = { "Content-Length" => "8888" }
|
|
4
|
+
SAMPLE_HEADERS = { "Content-Length" => "8888", "Accept" => "application/json" }
|
|
5
5
|
ESCAPED_PARAMS = "x=ab%2Bc&z=%27Stop%21%27%20said%20Fred"
|
|
6
6
|
NOT_ESCAPED_PARAMS = "z='Stop!' said Fred&x=ab c"
|
|
7
7
|
end
|
|
@@ -136,7 +136,6 @@ describe "WebMock", :shared => true do
|
|
|
136
136
|
:headers => SAMPLE_HEADERS).status.should == "200"
|
|
137
137
|
end
|
|
138
138
|
|
|
139
|
-
|
|
140
139
|
it "should not match requests if headers are different" do
|
|
141
140
|
stub_http_request(:get, "www.example.com").with(:headers => SAMPLE_HEADERS)
|
|
142
141
|
|
|
@@ -146,6 +145,16 @@ describe "WebMock", :shared => true do
|
|
|
146
145
|
:headers => { 'Content-Length' => '9999'})
|
|
147
146
|
}.should fail_with(%q(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/ with headers {'Content-Length'=>'9999'}))
|
|
148
147
|
end
|
|
148
|
+
|
|
149
|
+
it "should not match if accept header is different" do
|
|
150
|
+
stub_http_request(:get, "www.example.com").
|
|
151
|
+
with(:headers => { 'Accept' => 'application/json'})
|
|
152
|
+
lambda {
|
|
153
|
+
http_request(
|
|
154
|
+
:get, "http://www.example.com/",
|
|
155
|
+
:headers => { 'Accept' => 'application/xml'})
|
|
156
|
+
}.should fail_with(%q(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/ with headers {'Accept'=>'application/xml'}))
|
|
157
|
+
end
|
|
149
158
|
end
|
|
150
159
|
|
|
151
160
|
describe "with basic authentication" do
|
|
@@ -211,6 +220,17 @@ describe "WebMock", :shared => true do
|
|
|
211
220
|
http_request(:get, "http://www.example.com/").status.should == "500"
|
|
212
221
|
end
|
|
213
222
|
|
|
223
|
+
it "should return body declared as IO" do
|
|
224
|
+
stub_http_request(:get, "www.example.com").to_return(:body => File.new(__FILE__))
|
|
225
|
+
http_request(:get, "http://www.example.com/").body.should == File.new(__FILE__).read
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
it "should return body declared as IO if requested many times" do
|
|
229
|
+
stub_http_request(:get, "www.example.com").to_return(:body => File.new(__FILE__))
|
|
230
|
+
2.times do
|
|
231
|
+
http_request(:get, "http://www.example.com/").body.should == File.new(__FILE__).read
|
|
232
|
+
end
|
|
233
|
+
end
|
|
214
234
|
|
|
215
235
|
describe "dynamic responses" do
|
|
216
236
|
|
data/test/test_helper.rb
CHANGED
data/webmock.gemspec
CHANGED
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{webmock}
|
|
8
|
-
s.version = "0.8.
|
|
8
|
+
s.version = "0.8.1"
|
|
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{
|
|
12
|
+
s.date = %q{2010-01-14}
|
|
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,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: webmock
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.8.
|
|
4
|
+
version: 0.8.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Bartosz Blimke
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date:
|
|
12
|
+
date: 2010-01-14 00:00:00 +00:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|