webmock 1.10.0 → 1.10.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.10.1
4
+
5
+ * '+' in request body is still treated as a space. This fixes a bug introduced in previous version.
6
+
7
+ Thanks to [Erik Michaels-Ober](https://github.com/sferik) for reporting this problem.
8
+
9
+ * Fixed issue: response body declared as Proc was not evaluated again on subsequent requests.
10
+
11
+ Thanks to [Rick Fletcher](https://github.com/rfletcher) for reporting this issue.
12
+
3
13
  ## 1.10.0
4
14
 
5
15
  * '+' in query params is not treated as space anymore and is encoded as %2B
@@ -201,7 +201,7 @@ module WebMock
201
201
  when :xml then
202
202
  Crack::XML.parse(body)
203
203
  else
204
- WebMock::Util::QueryMapper.query_to_values(body)
204
+ WebMock::Util::QueryMapper.query_to_values(body, :form_url_encoded => true)
205
205
  end
206
206
  end
207
207
 
@@ -81,7 +81,7 @@ module WebMock
81
81
 
82
82
  if signature.body.to_s != ''
83
83
  body = if signature.url_encoded?
84
- WebMock::Util::QueryMapper.query_to_values(signature.body)
84
+ WebMock::Util::QueryMapper.query_to_values(signature.body, :form_url_encoded => true)
85
85
  else
86
86
  signature.body
87
87
  end
@@ -60,7 +60,7 @@ module WebMock
60
60
  end
61
61
 
62
62
  def evaluate_response_for_request(response, request_signature)
63
- response.evaluate(request_signature)
63
+ response.dup.evaluate(request_signature)
64
64
  end
65
65
 
66
66
  end
@@ -66,6 +66,7 @@ module WebMock::Util
66
66
  value = true if value.nil?
67
67
  key = Addressable::URI.unencode_component(key)
68
68
  if value != true
69
+ value.gsub!(/\+/, " ") if options[:form_url_encoded]
69
70
  value = Addressable::URI.unencode_component(value)
70
71
  end
71
72
  if options[:notation] == :flat
@@ -1,3 +1,3 @@
1
1
  module WebMock
2
- VERSION = '1.10.0' unless defined?(::WebMock::VERSION)
2
+ VERSION = '1.10.1' unless defined?(::WebMock::VERSION)
3
3
  end
@@ -117,6 +117,13 @@ shared_context "declared responses" do |*adapter_info|
117
117
  it "should return evaluated response headers" do
118
118
  stub_request(:post, "www.example.com").to_return(:headers => lambda { |request| request.headers })
119
119
  http_request(:post, "http://www.example.com/", :body => "abc", :headers => {'A' => 'B'}).headers['A'].should == 'B'
120
+ http_request(:post, "http://www.example.com/", :body => "abc", :headers => {'A' => 'C'}).headers['A'].should == 'C'
121
+ end
122
+
123
+ it "should evaluate response body for each request" do
124
+ stub_request(:post, "www.example.com").to_return(:body => lambda { |request| request.body })
125
+ http_request(:post, "http://www.example.com/", :body => "echo").body.should == "echo"
126
+ http_request(:post, "http://www.example.com/", :body => "foxtrot").body.should == "foxtrot"
120
127
  end
121
128
  end
122
129
 
@@ -132,6 +139,7 @@ shared_context "declared responses" do |*adapter_info|
132
139
  {:body => request.body}
133
140
  })
134
141
  http_request(:post, "http://www.example.com/", :body => "echo").body.should == "echo"
142
+ http_request(:post, "http://www.example.com/", :body => "foxtrot").body.should == "foxtrot"
135
143
  end
136
144
 
137
145
  it "should return evaluated response headers" do
@@ -105,20 +105,20 @@ shared_examples_for "stubbing requests" do |*adapter_info|
105
105
  describe "when body is declared as a hash" do
106
106
  before(:each) do
107
107
  stub_request(:post, "www.example.com").
108
- with(:body => {:a => '1', :b => 'five', 'c' => {'d' => ['e', 'f']} })
108
+ with(:body => {:a => '1', :b => 'five x', 'c' => {'d' => ['e', 'f']} })
109
109
  end
110
110
 
111
111
  describe "for request with url encoded body" do
112
112
  it "should match request if hash matches body" do
113
113
  http_request(
114
114
  :post, "http://www.example.com/",
115
- :body => 'a=1&c[d][]=e&c[d][]=f&b=five').status.should == "200"
115
+ :body => 'a=1&c[d][]=e&c[d][]=f&b=five+x').status.should == "200"
116
116
  end
117
117
 
118
118
  it "should match request if hash matches body in different order of params" do
119
119
  http_request(
120
120
  :post, "http://www.example.com/",
121
- :body => 'a=1&c[d][]=e&b=five&c[d][]=f').status.should == "200"
121
+ :body => 'a=1&c[d][]=e&b=five+x&c[d][]=f').status.should == "200"
122
122
  end
123
123
 
124
124
  it "should not match if hash doesn't match url encoded body" do
@@ -152,6 +152,14 @@ shared_examples_for "stubbing requests" do |*adapter_info|
152
152
  :post, "http://www.example.com/", :headers => {'Content-Type' => 'application/json'},
153
153
  :body => "{\"foo\":\"2010-01-01\"}").status.should == "200"
154
154
  end
155
+
156
+ it "should match if any of the strings have spaces" do
157
+ WebMock.reset!
158
+ stub_request(:post, "www.example.com").with(:body => {"foo" => "a b c"})
159
+ http_request(
160
+ :post, "http://www.example.com/", :headers => {'Content-Type' => 'application/json'},
161
+ :body => "{\"foo\":\"a b c\"}").status.should == "200"
162
+ end
155
163
  end
156
164
 
157
165
  describe "for request with xml body and content type is set to xml" do
@@ -64,7 +64,15 @@ describe WebMock::StubRegistry do
64
64
  response1.should == WebMock::Response.new(:body => "get")
65
65
  end
66
66
 
67
- it "should report clone of theresponse" do
67
+ it "should report clone of the response" do
68
+ @request_stub.to_return(:body => lambda{|r| r.method.to_s})
69
+ WebMock::StubRegistry.instance.register_request_stub(@request_stub)
70
+ response1 = WebMock::StubRegistry.instance.response_for_request(@request_signature)
71
+ response2 = WebMock::StubRegistry.instance.response_for_request(@request_signature)
72
+ response1.should_not be(response2)
73
+ end
74
+
75
+ it "should report clone of the dynamic response" do
68
76
  @request_stub.to_return {|request| {:body => request.method.to_s} }
69
77
  WebMock::StubRegistry.instance.register_request_stub(@request_stub)
70
78
  response1 = WebMock::StubRegistry.instance.response_for_request(@request_signature)
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: 63
4
+ hash: 61
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
8
  - 10
9
- - 0
10
- version: 1.10.0
9
+ - 1
10
+ version: 1.10.1
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: 2013-02-28 00:00:00 Z
18
+ date: 2013-03-01 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: addressable