webmock 3.8.3 → 3.9.0
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.
- 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: []
|