webmock 3.8.3 → 3.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +11 -6
- data/CHANGELOG.md +36 -0
- data/README.md +18 -3
- data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +2 -2
- data/lib/webmock/http_lib_adapters/net_http.rb +7 -0
- data/lib/webmock/request_pattern.rb +68 -45
- data/lib/webmock/rspec.rb +2 -1
- data/lib/webmock/stub_registry.rb +1 -1
- data/lib/webmock/version.rb +1 -1
- data/lib/webmock/webmock.rb +3 -1
- data/spec/acceptance/async_http_client/async_http_client_spec.rb +5 -1
- data/spec/acceptance/net_http/net_http_spec.rb +12 -0
- data/spec/acceptance/shared/stubbing_requests.rb +18 -0
- data/spec/unit/request_pattern_spec.rb +58 -0
- data/spec/unit/webmock_spec.rb +52 -11
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 603d6344674ad0d4b41e3b9fb2523d0d629f781873e0b5ac6dc72331ce30139a
|
4
|
+
data.tar.gz: 034c21429d7b11336d59485f198abb0b61f3dce89ec59c2298bb81d1f8cd987e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4a36fc1d613f0187c361d4d1fed3a3c2f082496839b1af649a752916fa9e1285a8261aec34fe25a236a35d930782a5b6cd62de919481e99198390b65407577d
|
7
|
+
data.tar.gz: c3b93eaaa8f3a513e54d90f179ced6b48f08805232060ebd2cf41407bdd2f000d5cd8a01e584237bb634ad0ca5a00607d000ec7c257b51ebdbe96790937cc7ae
|
data/.travis.yml
CHANGED
@@ -1,19 +1,24 @@
|
|
1
1
|
before_install:
|
2
2
|
- gem update --system -N
|
3
3
|
rvm:
|
4
|
-
- 2.3.8
|
5
|
-
- 2.4.6
|
6
4
|
- 2.5.5
|
7
5
|
- 2.6.3
|
8
6
|
- 2.7.0
|
9
7
|
- rbx-2
|
10
8
|
- ruby-head
|
11
|
-
- jruby-9.1.17.0
|
12
|
-
- jruby-9.2.7.0
|
13
|
-
- jruby-head
|
14
|
-
jdk: openjdk8
|
15
9
|
matrix:
|
10
|
+
include:
|
11
|
+
- rvm: jruby-9.1.17.0
|
12
|
+
jdk: openjdk8
|
13
|
+
- rvm: jruby-9.2.11.1
|
14
|
+
jdk: openjdk11
|
15
|
+
- rvm: jruby-head
|
16
|
+
jdk: openjdk11
|
16
17
|
allow_failures:
|
17
18
|
- rvm: jruby-head
|
18
19
|
- rvm: ruby-head
|
19
20
|
- rvm: rbx-2
|
21
|
+
env:
|
22
|
+
global:
|
23
|
+
JRUBY_OPTS: "--debug"
|
24
|
+
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,41 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 3.9.0
|
4
|
+
|
5
|
+
* Allow using a "callable" (like a proc) as URI pattern
|
6
|
+
|
7
|
+
stub_request(:any, ->(uri) { true })
|
8
|
+
|
9
|
+
Thanks to [John Hawthorn](https://github.com/jhawthorn)
|
10
|
+
|
11
|
+
* Added stubbed IO on stubbed socket in Net::HTTP adapter.
|
12
|
+
|
13
|
+
Thanks to [Thilo Rusche](https://github.com/trusche)
|
14
|
+
|
15
|
+
* When 'webmock/rspec' is required, reset WebMock after all after(:each/example) hooks
|
16
|
+
|
17
|
+
Thanks to [Andrew Stuntz](https://github.com/drews256)
|
18
|
+
|
19
|
+
* Fixed `net_connect_allowed?` when invoked with no arguments, when there were any allowed URIs passed to `disable_net_connect?`.
|
20
|
+
|
21
|
+
Thanks to [Lucas Uyezu](https://github.com/lucasuyezu)
|
22
|
+
|
23
|
+
* Fixed async-http adapter which caused Async::HTTP::Client or Async::HTTP::Internet to hang and never return a response.
|
24
|
+
|
25
|
+
Thanks to (Bruno Sutic)[https://github.com/bruno-] and [Samuel Williams](https://github.com/ioquatix)
|
26
|
+
|
27
|
+
* Fixed warning when using async-http adapter
|
28
|
+
|
29
|
+
Thanks to (Bruno Sutic)[https://github.com/bruno-]
|
30
|
+
|
31
|
+
* Dropped support for Ruby 2.3 - EOL date: 2019-03-31
|
32
|
+
|
33
|
+
* Dropped support for Ruby 2.4 - EOL date: 2020-03-31
|
34
|
+
|
35
|
+
* Handling matching of Addressable::Template patterns that have an ip address without port and patterns that have ip address and don’t have schema and path.
|
36
|
+
|
37
|
+
Thanks to (Rafael França)[https://github.com/rafaelfranca] and (guppy0356)[https://github.com/guppy0356]
|
38
|
+
|
3
39
|
## 3.8.3
|
4
40
|
|
5
41
|
* Fixed problem introduced in version 3.4.2, which caused matching against Addressable::Template representing host part of the URI to raise an error.
|
data/README.md
CHANGED
@@ -38,9 +38,6 @@ Supported HTTP libraries
|
|
38
38
|
Supported Ruby Interpreters
|
39
39
|
---------------------------
|
40
40
|
|
41
|
-
* MRI 2.2
|
42
|
-
* MRI 2.3
|
43
|
-
* MRI 2.4
|
44
41
|
* MRI 2.5
|
45
42
|
* MRI 2.6
|
46
43
|
* MRI 2.7
|
@@ -243,6 +240,12 @@ stub_request(:any, /example/)
|
|
243
240
|
Net::HTTP.get('www.example.com', '/') # ===> Success
|
244
241
|
```
|
245
242
|
|
243
|
+
### Matching uris using lambda
|
244
|
+
|
245
|
+
```ruby
|
246
|
+
stub_request(:any, ->(uri) { true })
|
247
|
+
```
|
248
|
+
|
246
249
|
### Matching uris using RFC 6570 - Basic Example
|
247
250
|
|
248
251
|
```ruby
|
@@ -300,6 +303,12 @@ stub_request(:any, "www.example.com").
|
|
300
303
|
Net::HTTP.get("www.example.com", '/') # ===> "abc"
|
301
304
|
```
|
302
305
|
|
306
|
+
Set appropriate Content-Type for HTTParty's `parsed_response`.
|
307
|
+
|
308
|
+
```ruby
|
309
|
+
stub_request(:any, "www.example.com").to_return body: '{}', headers: {content_type: 'application/json'}
|
310
|
+
```
|
311
|
+
|
303
312
|
### Response with body specified as IO object
|
304
313
|
|
305
314
|
```ruby
|
@@ -1121,6 +1130,12 @@ People who submitted patches and new features or suggested improvements. Many th
|
|
1121
1130
|
* Patrik Ragnarsson
|
1122
1131
|
* Alex Coomans
|
1123
1132
|
* Vesa Laakso
|
1133
|
+
* John Hawthorn
|
1134
|
+
* guppy0356
|
1135
|
+
* Thilo Rusche
|
1136
|
+
* Andrew Stuntz
|
1137
|
+
* Lucas Uyezu
|
1138
|
+
* Bruno Sutic
|
1124
1139
|
|
1125
1140
|
For a full list of contributors you can visit the
|
1126
1141
|
[contributors](https://github.com/bblimke/webmock/contributors) page.
|
@@ -136,7 +136,7 @@ if defined?(Async::HTTP)
|
|
136
136
|
|
137
137
|
def connect
|
138
138
|
server_socket, client_socket = create_connected_sockets
|
139
|
-
Async do
|
139
|
+
Async(transient: true) do
|
140
140
|
accept_socket(server_socket)
|
141
141
|
end
|
142
142
|
client_socket
|
@@ -151,7 +151,7 @@ if defined?(Async::HTTP)
|
|
151
151
|
def create_connected_sockets
|
152
152
|
Async::IO::Socket.pair(Socket::AF_UNIX, Socket::SOCK_STREAM).tap do |sockets|
|
153
153
|
sockets.each do |socket|
|
154
|
-
socket.instance_variable_set :@alpn_protocol,
|
154
|
+
socket.instance_variable_set :@alpn_protocol, nil
|
155
155
|
socket.instance_eval do
|
156
156
|
def alpn_protocol
|
157
157
|
nil # means HTTP11 will be used for HTTPS
|
@@ -80,6 +80,8 @@ module WebMock
|
|
80
80
|
URIRegexpPattern.new(uri)
|
81
81
|
elsif uri.is_a?(Addressable::Template)
|
82
82
|
URIAddressablePattern.new(uri)
|
83
|
+
elsif uri.respond_to?(:call)
|
84
|
+
URICallablePattern.new(uri)
|
83
85
|
else
|
84
86
|
URIStringPattern.new(uri)
|
85
87
|
end
|
@@ -108,10 +110,10 @@ module WebMock
|
|
108
110
|
|
109
111
|
def initialize(pattern)
|
110
112
|
@pattern = case pattern
|
111
|
-
when
|
112
|
-
pattern
|
113
|
+
when String
|
114
|
+
WebMock::Util::URI.normalize_uri(pattern)
|
113
115
|
else
|
114
|
-
|
116
|
+
pattern
|
115
117
|
end
|
116
118
|
@query_params = nil
|
117
119
|
end
|
@@ -131,38 +133,44 @@ module WebMock
|
|
131
133
|
end
|
132
134
|
end
|
133
135
|
|
136
|
+
def matches?(uri)
|
137
|
+
pattern_matches?(uri) && query_params_matches?(uri)
|
138
|
+
end
|
139
|
+
|
134
140
|
def to_s
|
135
|
-
str =
|
141
|
+
str = pattern_inspect
|
136
142
|
str += " with query params #{@query_params.inspect}" if @query_params
|
137
143
|
str
|
138
144
|
end
|
139
|
-
end
|
140
145
|
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
146
|
+
private
|
147
|
+
|
148
|
+
def pattern_inspect
|
149
|
+
@pattern.inspect
|
145
150
|
end
|
146
151
|
|
147
|
-
def
|
148
|
-
|
149
|
-
str += " with query params #{@query_params.inspect}" if @query_params
|
150
|
-
str
|
152
|
+
def query_params_matches?(uri)
|
153
|
+
@query_params.nil? || @query_params == WebMock::Util::QueryMapper.query_to_values(uri.query, notation: Config.instance.query_values_notation)
|
151
154
|
end
|
152
155
|
end
|
153
156
|
|
154
|
-
class
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
else
|
160
|
-
# WebMock checks the query, Addressable checks everything else
|
161
|
-
matches_with_variations?(uri.omit(:query)) &&
|
162
|
-
@query_params == WebMock::Util::QueryMapper.query_to_values(uri.query)
|
163
|
-
end
|
157
|
+
class URICallablePattern < URIPattern
|
158
|
+
private
|
159
|
+
|
160
|
+
def pattern_matches?(uri)
|
161
|
+
@pattern.call(uri)
|
164
162
|
end
|
163
|
+
end
|
165
164
|
|
165
|
+
class URIRegexpPattern < URIPattern
|
166
|
+
private
|
167
|
+
|
168
|
+
def pattern_matches?(uri)
|
169
|
+
WebMock::Util::URI.variations_of_uri_as_strings(uri).any? { |u| u.match(@pattern) }
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
class URIAddressablePattern < URIPattern
|
166
174
|
def add_query_params(query_params)
|
167
175
|
@@add_query_params_warned ||= false
|
168
176
|
if not @@add_query_params_warned
|
@@ -172,13 +180,21 @@ module WebMock
|
|
172
180
|
super(query_params)
|
173
181
|
end
|
174
182
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
183
|
+
private
|
184
|
+
|
185
|
+
def pattern_matches?(uri)
|
186
|
+
if @query_params.nil?
|
187
|
+
# Let Addressable check the whole URI
|
188
|
+
matches_with_variations?(uri)
|
189
|
+
else
|
190
|
+
# WebMock checks the query, Addressable checks everything else
|
191
|
+
matches_with_variations?(uri.omit(:query))
|
192
|
+
end
|
179
193
|
end
|
180
194
|
|
181
|
-
|
195
|
+
def pattern_inspect
|
196
|
+
@pattern.pattern.inspect
|
197
|
+
end
|
182
198
|
|
183
199
|
def matches_with_variations?(uri)
|
184
200
|
template =
|
@@ -187,16 +203,34 @@ module WebMock
|
|
187
203
|
rescue Addressable::URI::InvalidURIError
|
188
204
|
Addressable::Template.new(@pattern.pattern)
|
189
205
|
end
|
190
|
-
WebMock::Util::URI.variations_of_uri_as_strings(uri).any? { |u|
|
206
|
+
WebMock::Util::URI.variations_of_uri_as_strings(uri).any? { |u|
|
207
|
+
template_matches_uri?(template, u)
|
208
|
+
}
|
209
|
+
end
|
210
|
+
|
211
|
+
def template_matches_uri?(template, uri)
|
212
|
+
template.match(uri)
|
213
|
+
rescue Addressable::URI::InvalidURIError
|
214
|
+
false
|
191
215
|
end
|
192
216
|
end
|
193
217
|
|
194
218
|
class URIStringPattern < URIPattern
|
195
|
-
def
|
219
|
+
def add_query_params(query_params)
|
220
|
+
super
|
221
|
+
if @query_params.is_a?(Hash) || @query_params.is_a?(String)
|
222
|
+
query_hash = (WebMock::Util::QueryMapper.query_to_values(@pattern.query, notation: Config.instance.query_values_notation) || {}).merge(@query_params)
|
223
|
+
@pattern.query = WebMock::Util::QueryMapper.values_to_query(query_hash, notation: WebMock::Config.instance.query_values_notation)
|
224
|
+
@query_params = nil
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
private
|
229
|
+
|
230
|
+
def pattern_matches?(uri)
|
196
231
|
if @pattern.is_a?(Addressable::URI)
|
197
232
|
if @query_params
|
198
|
-
uri.omit(:query) === @pattern
|
199
|
-
(@query_params.nil? || @query_params == WebMock::Util::QueryMapper.query_to_values(uri.query, notation: Config.instance.query_values_notation))
|
233
|
+
uri.omit(:query) === @pattern
|
200
234
|
else
|
201
235
|
uri === @pattern
|
202
236
|
end
|
@@ -205,19 +239,8 @@ module WebMock
|
|
205
239
|
end
|
206
240
|
end
|
207
241
|
|
208
|
-
def
|
209
|
-
|
210
|
-
if @query_params.is_a?(Hash) || @query_params.is_a?(String)
|
211
|
-
query_hash = (WebMock::Util::QueryMapper.query_to_values(@pattern.query, notation: Config.instance.query_values_notation) || {}).merge(@query_params)
|
212
|
-
@pattern.query = WebMock::Util::QueryMapper.values_to_query(query_hash, notation: WebMock::Config.instance.query_values_notation)
|
213
|
-
@query_params = nil
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
def to_s
|
218
|
-
str = WebMock::Util::URI.strip_default_port_from_uri_string(@pattern.to_s)
|
219
|
-
str += " with query params #{@query_params.inspect}" if @query_params
|
220
|
-
str
|
242
|
+
def pattern_inspect
|
243
|
+
WebMock::Util::URI.strip_default_port_from_uri_string(@pattern.to_s)
|
221
244
|
end
|
222
245
|
end
|
223
246
|
|
data/lib/webmock/rspec.rb
CHANGED
@@ -24,7 +24,7 @@ module WebMock
|
|
24
24
|
# doesn't run immediately after stub.with.
|
25
25
|
responses = {}
|
26
26
|
|
27
|
-
stub = ::WebMock::RequestStub.new(:any,
|
27
|
+
stub = ::WebMock::RequestStub.new(:any, ->(uri) { true }).with { |request|
|
28
28
|
responses[request.object_id] = yield(request)
|
29
29
|
}.to_return(lambda { |request| responses.delete(request.object_id) })
|
30
30
|
|
data/lib/webmock/version.rb
CHANGED
data/lib/webmock/webmock.rb
CHANGED
@@ -59,11 +59,13 @@ module WebMock
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def self.net_connect_allowed?(uri = nil)
|
62
|
+
return !!Config.instance.allow_net_connect if uri.nil?
|
63
|
+
|
62
64
|
if uri.is_a?(String)
|
63
65
|
uri = WebMock::Util::URI.normalize_uri(uri)
|
64
66
|
end
|
65
67
|
|
66
|
-
Config.instance.allow_net_connect ||
|
68
|
+
!!Config.instance.allow_net_connect ||
|
67
69
|
( Config.instance.allow_localhost && WebMock::Util::URI.is_uri_localhost?(uri) ||
|
68
70
|
Config.instance.allow && net_connect_explicit_allowed?(Config.instance.allow, uri) )
|
69
71
|
end
|
@@ -136,6 +136,8 @@ unless RUBY_PLATFORM =~ /java/
|
|
136
136
|
end
|
137
137
|
|
138
138
|
context 'scheme and protocol' do
|
139
|
+
let(:default_response_headers) { {} }
|
140
|
+
|
139
141
|
before do
|
140
142
|
stub_request(
|
141
143
|
:get, "#{scheme}://www.example.com"
|
@@ -152,7 +154,7 @@ unless RUBY_PLATFORM =~ /java/
|
|
152
154
|
specify do
|
153
155
|
expect(subject).to eq(
|
154
156
|
status: 200,
|
155
|
-
headers:
|
157
|
+
headers: default_response_headers,
|
156
158
|
body: 'BODY'
|
157
159
|
)
|
158
160
|
end
|
@@ -169,6 +171,7 @@ unless RUBY_PLATFORM =~ /java/
|
|
169
171
|
|
170
172
|
context 'HTTP10 protocol' do
|
171
173
|
let(:protocol) { Async::HTTP::Protocol::HTTP10 }
|
174
|
+
let(:default_response_headers) { {"connection"=>["keep-alive"]} }
|
172
175
|
|
173
176
|
include_examples :common
|
174
177
|
end
|
@@ -197,6 +200,7 @@ unless RUBY_PLATFORM =~ /java/
|
|
197
200
|
|
198
201
|
context 'HTTP10 protocol' do
|
199
202
|
let(:protocol) { Async::HTTP::Protocol::HTTP10 }
|
203
|
+
let(:default_response_headers) { {"connection"=>["keep-alive"]} }
|
200
204
|
|
201
205
|
include_examples :common
|
202
206
|
end
|
@@ -201,6 +201,18 @@ describe "Net:HTTP" do
|
|
201
201
|
expect(Net::HTTP.get_response(Addressable::URI.parse('http://www.example.com/hello?a=1')).body).to eq("abc")
|
202
202
|
end
|
203
203
|
|
204
|
+
it "should support method calls on stubbed socket" do
|
205
|
+
WebMock.allow_net_connect!
|
206
|
+
stub_request(:get, 'www.google.com')#.with(headers: {"My-Header" => 99})
|
207
|
+
req = Net::HTTP::Get.new('/')
|
208
|
+
Net::HTTP.start('www.google.com') do |http|
|
209
|
+
http.request(req, '')
|
210
|
+
socket = http.instance_variable_get(:@socket)
|
211
|
+
expect(socket).to be_a(StubSocket)
|
212
|
+
expect { socket.io.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) }.to_not raise_error
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
204
216
|
describe "connecting on Net::HTTP.start" do
|
205
217
|
before(:each) do
|
206
218
|
@http = Net::HTTP.new('www.google.com', 443)
|
@@ -640,4 +640,22 @@ shared_examples_for "stubbing requests" do |*adapter_info|
|
|
640
640
|
}.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
|
641
641
|
end
|
642
642
|
end
|
643
|
+
|
644
|
+
describe "in Rspec around(:each) hook" do
|
645
|
+
# order goes
|
646
|
+
# around(:each)
|
647
|
+
# before(:each)
|
648
|
+
# after(:each)
|
649
|
+
# anything after example.run in around(:each)
|
650
|
+
around(:each) do |example|
|
651
|
+
example.run
|
652
|
+
expect {
|
653
|
+
http_request(:get, "http://www.example.com/")
|
654
|
+
}.to_not raise_error # WebMock::NetConnectNotAllowedError
|
655
|
+
end
|
656
|
+
|
657
|
+
it "should still allow me to make a mocked request" do
|
658
|
+
stub_request(:get, "www.example.com")
|
659
|
+
end
|
660
|
+
end
|
643
661
|
end
|
@@ -111,6 +111,16 @@ describe WebMock::RequestPattern do
|
|
111
111
|
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
112
112
|
end
|
113
113
|
|
114
|
+
it "should match if uri proc pattern returning true" do
|
115
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { true })).
|
116
|
+
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should not match if uri proc pattern returns false" do
|
120
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { false })).
|
121
|
+
not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
122
|
+
end
|
123
|
+
|
114
124
|
it "should match if uri Addressable::Template pattern matches unescaped form of request uri" do
|
115
125
|
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com/{any_path}"))).
|
116
126
|
to match(WebMock::RequestSignature.new(:get, "www.example.com/my%20path"))
|
@@ -132,6 +142,12 @@ describe WebMock::RequestPattern do
|
|
132
142
|
expect(WebMock::RequestPattern.new(:get, uri)).to match(signature)
|
133
143
|
end
|
134
144
|
|
145
|
+
it "should match if Addressable::Template pattern that has ip address host without port matches request uri" do
|
146
|
+
signature = WebMock::RequestSignature.new(:get, "127.0.0.1/1234")
|
147
|
+
uri = Addressable::Template.new("127.0.0.1/{id}")
|
148
|
+
expect(WebMock::RequestPattern.new(:get, uri)).to match(signature)
|
149
|
+
end
|
150
|
+
|
135
151
|
it "should match if Addressable::Template pattern host matches request uri" do
|
136
152
|
signature = WebMock::RequestSignature.new(:get, "www.example.com")
|
137
153
|
uri = Addressable::Template.new("{subdomain}.example.com")
|
@@ -144,6 +160,12 @@ describe WebMock::RequestPattern do
|
|
144
160
|
expect(WebMock::RequestPattern.new(:get, uri)).not_to match(signature)
|
145
161
|
end
|
146
162
|
|
163
|
+
it "should match if uri Addressable::Template pattern matches request uri without a schema and a path " do
|
164
|
+
signature = WebMock::RequestSignature.new(:get, "127.0.0.1:3000")
|
165
|
+
uri = Addressable::Template.new("127.0.0.1:3000")
|
166
|
+
expect(WebMock::RequestPattern.new(:get, uri)).to match(signature)
|
167
|
+
end
|
168
|
+
|
147
169
|
it "should match for uris with same parameters as pattern" do
|
148
170
|
expect(WebMock::RequestPattern.new(:get, "www.example.com?a=1&b=2")).
|
149
171
|
to match(WebMock::RequestSignature.new(:get, "www.example.com?a=1&b=2"))
|
@@ -241,6 +263,42 @@ describe WebMock::RequestPattern do
|
|
241
263
|
end
|
242
264
|
end
|
243
265
|
|
266
|
+
describe "when uri is described as a proc" do
|
267
|
+
it "should match request query params" do
|
268
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { true }, query: {"a" => ["b", "c"]})).
|
269
|
+
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
270
|
+
end
|
271
|
+
|
272
|
+
it "should match request query params if params don't match" do
|
273
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { true }, query: {"x" => ["b", "c"]})).
|
274
|
+
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
275
|
+
end
|
276
|
+
|
277
|
+
it "should match when query params are declared as HashIncluding matcher matching params" do
|
278
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
279
|
+
query: WebMock::Matchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
280
|
+
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
281
|
+
end
|
282
|
+
|
283
|
+
it "should not match when query params are declared as HashIncluding matcher not matching params" do
|
284
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
285
|
+
query: WebMock::Matchers::HashIncludingMatcher.new({"x" => ["b", "c"]}))).
|
286
|
+
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
287
|
+
end
|
288
|
+
|
289
|
+
it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
|
290
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
291
|
+
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
292
|
+
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
293
|
+
end
|
294
|
+
|
295
|
+
it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
|
296
|
+
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
297
|
+
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "d"]}))).
|
298
|
+
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
244
302
|
describe "when uri is described as Addressable::Template" do
|
245
303
|
it "should raise error if query params are specified" do
|
246
304
|
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"), query: {"a" => ["b", "c"]})).
|
data/spec/unit/webmock_spec.rb
CHANGED
@@ -1,19 +1,60 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "WebMock
|
4
|
-
it "should report version" do
|
5
|
-
expect(WebMock.version).to eq(WebMock::VERSION)
|
6
|
-
end
|
3
|
+
describe "WebMock" do
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
describe ".version" do
|
6
|
+
it "should report version" do
|
7
|
+
expect(WebMock.version).to eq(WebMock::VERSION)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should not require safe_yaml" do
|
11
|
+
expect(defined?SafeYAML).to eq(nil)
|
12
|
+
end
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
+
it "should alias enable_net_connect! to allow_net_connect!" do
|
15
|
+
expect(WebMock.method(:enable_net_connect!)).to eq(WebMock.method(:allow_net_connect!))
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should alias disallow_net_connect! to disable_net_connect!" do
|
19
|
+
expect(WebMock.method(:disallow_net_connect!)).to eq(WebMock.method(:disable_net_connect!))
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
|
-
|
17
|
-
|
23
|
+
describe ".net_connect_allowed?" do
|
24
|
+
context 'enabled globally' do
|
25
|
+
before do
|
26
|
+
WebMock.enable_net_connect!
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'without arguments' do
|
30
|
+
it 'returns WebMock::Config.instance.allow_net_connect' do
|
31
|
+
expect(WebMock.net_connect_allowed?).to eql(true)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'disabled with allowed remote string' do
|
37
|
+
before do
|
38
|
+
WebMock.disable_net_connect!(allow: "http://192.168.64.2:20031")
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'without arguments' do
|
42
|
+
it 'returns WebMock::Config.instance.allow_net_connect' do
|
43
|
+
expect(WebMock.net_connect_allowed?).to eql(false)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context 'disabled globally' do
|
49
|
+
before do
|
50
|
+
WebMock.disable_net_connect!
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'without arguments' do
|
54
|
+
it 'returns WebMock::Config.instance.allow_net_connect' do
|
55
|
+
expect(WebMock.net_connect_allowed?).to eql(false)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
18
59
|
end
|
19
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bartosz Blimke
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -407,9 +407,9 @@ licenses:
|
|
407
407
|
- MIT
|
408
408
|
metadata:
|
409
409
|
bug_tracker_uri: https://github.com/bblimke/webmock/issues
|
410
|
-
changelog_uri: https://github.com/bblimke/webmock/blob/v3.
|
411
|
-
documentation_uri: https://www.rubydoc.info/gems/webmock/3.
|
412
|
-
source_code_uri: https://github.com/bblimke/webmock/tree/v3.
|
410
|
+
changelog_uri: https://github.com/bblimke/webmock/blob/v3.9.0/CHANGELOG.md
|
411
|
+
documentation_uri: https://www.rubydoc.info/gems/webmock/3.9.0
|
412
|
+
source_code_uri: https://github.com/bblimke/webmock/tree/v3.9.0
|
413
413
|
wiki_uri: https://github.com/bblimke/webmock/wiki
|
414
414
|
post_install_message:
|
415
415
|
rdoc_options: []
|