webmock 2.0.3 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Gemfile +2 -7
- data/README.md +54 -53
- data/Rakefile +1 -1
- data/lib/webmock/callback_registry.rb +1 -1
- data/lib/webmock/http_lib_adapters/curb_adapter.rb +68 -6
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +4 -4
- data/lib/webmock/http_lib_adapters/excon_adapter.rb +9 -9
- data/lib/webmock/http_lib_adapters/http_rb/request.rb +2 -2
- data/lib/webmock/http_lib_adapters/http_rb/response.rb +5 -5
- data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +3 -3
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +5 -5
- data/lib/webmock/http_lib_adapters/manticore_adapter.rb +7 -7
- data/lib/webmock/http_lib_adapters/net_http.rb +3 -3
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +4 -4
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +14 -14
- data/lib/webmock/matchers/hash_including_matcher.rb +1 -1
- data/lib/webmock/rack_response.rb +3 -3
- data/lib/webmock/request_pattern.rb +8 -8
- data/lib/webmock/request_stub.rb +5 -5
- data/lib/webmock/util/uri.rb +2 -2
- data/lib/webmock/version.rb +1 -1
- data/minitest/webmock_spec.rb +3 -3
- data/spec/acceptance/curb/curb_spec.rb +64 -47
- data/spec/acceptance/curb/curb_spec_helper.rb +4 -4
- data/spec/acceptance/em_http_request/em_http_request_spec.rb +32 -32
- data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +9 -9
- data/spec/acceptance/excon/excon_spec.rb +14 -14
- data/spec/acceptance/excon/excon_spec_helper.rb +6 -6
- data/spec/acceptance/http_rb/http_rb_spec.rb +1 -1
- data/spec/acceptance/http_rb/http_rb_spec_helper.rb +7 -7
- data/spec/acceptance/httpclient/httpclient_spec.rb +20 -20
- data/spec/acceptance/httpclient/httpclient_spec_helper.rb +5 -5
- data/spec/acceptance/manticore/manticore_spec.rb +11 -11
- data/spec/acceptance/manticore/manticore_spec_helper.rb +3 -3
- data/spec/acceptance/net_http/net_http_shared.rb +4 -4
- data/spec/acceptance/net_http/net_http_spec.rb +25 -25
- data/spec/acceptance/net_http/net_http_spec_helper.rb +4 -4
- data/spec/acceptance/net_http/real_net_http_spec.rb +1 -1
- data/spec/acceptance/patron/patron_spec.rb +10 -10
- data/spec/acceptance/patron/patron_spec_helper.rb +5 -5
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +36 -36
- data/spec/acceptance/shared/callbacks.rb +11 -11
- data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +5 -5
- data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +4 -4
- data/spec/acceptance/shared/precedence_of_stubs.rb +4 -4
- data/spec/acceptance/shared/request_expectations.rb +90 -90
- data/spec/acceptance/shared/returning_declared_responses.rb +49 -49
- data/spec/acceptance/shared/stubbing_requests.rb +78 -78
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +11 -11
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +8 -8
- data/spec/spec_helper.rb +6 -3
- data/spec/support/webmock_server.rb +1 -1
- data/spec/unit/api_spec.rb +2 -2
- data/spec/unit/errors_spec.rb +3 -3
- data/spec/unit/matchers/hash_including_matcher_spec.rb +16 -16
- data/spec/unit/rack_response_spec.rb +2 -2
- data/spec/unit/request_body_diff_spec.rb +1 -1
- data/spec/unit/request_execution_verifier_spec.rb +1 -1
- data/spec/unit/request_pattern_spec.rb +115 -115
- data/spec/unit/request_signature_snippet_spec.rb +2 -2
- data/spec/unit/request_signature_spec.rb +16 -16
- data/spec/unit/request_stub_spec.rb +20 -20
- data/spec/unit/response_spec.rb +28 -28
- data/spec/unit/stub_registry_spec.rb +10 -10
- data/spec/unit/stub_request_snippet_spec.rb +6 -6
- data/spec/unit/util/hash_keys_stringifier_spec.rb +4 -4
- data/spec/unit/util/query_mapper_spec.rb +2 -2
- data/spec/unit/util/uri_spec.rb +1 -1
- data/test/http_request.rb +3 -3
- data/test/shared_test.rb +6 -6
- data/webmock.gemspec +4 -2
- metadata +32 -4
@@ -103,7 +103,7 @@ if defined?(EventMachine::HttpClient)
|
|
103
103
|
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
104
104
|
|
105
105
|
if stubbed_webmock_response
|
106
|
-
WebMock::CallbackRegistry.invoke_callbacks({:
|
106
|
+
WebMock::CallbackRegistry.invoke_callbacks({lib: :em_http_request}, request_signature, stubbed_webmock_response)
|
107
107
|
@uri ||= nil
|
108
108
|
EM.next_tick {
|
109
109
|
setup(make_raw_response(stubbed_webmock_response), @uri,
|
@@ -121,7 +121,7 @@ if defined?(EventMachine::HttpClient)
|
|
121
121
|
if !stubbed_webmock_response && WebMock::CallbackRegistry.any_callbacks?
|
122
122
|
webmock_response = build_webmock_response
|
123
123
|
WebMock::CallbackRegistry.invoke_callbacks(
|
124
|
-
{:
|
124
|
+
{lib: :em_http_request, real_request: true},
|
125
125
|
request_signature,
|
126
126
|
webmock_response)
|
127
127
|
end
|
@@ -187,8 +187,8 @@ if defined?(EventMachine::HttpClient)
|
|
187
187
|
WebMock::RequestSignature.new(
|
188
188
|
method.downcase.to_sym,
|
189
189
|
uri.to_s,
|
190
|
-
:
|
191
|
-
:
|
190
|
+
body: body || (@req.file && File.read(@req.file)),
|
191
|
+
headers: headers
|
192
192
|
)
|
193
193
|
end
|
194
194
|
|
@@ -54,14 +54,14 @@ if defined?(Excon)
|
|
54
54
|
WebMock::RequestRegistry.instance.requested_signatures.put(mock_request)
|
55
55
|
|
56
56
|
if mock_response = WebMock::StubRegistry.instance.response_for_request(mock_request)
|
57
|
-
self.perform_callbacks(mock_request, mock_response, :
|
57
|
+
self.perform_callbacks(mock_request, mock_response, real_request: false)
|
58
58
|
response = self.real_response(mock_response)
|
59
59
|
response
|
60
60
|
elsif WebMock.net_connect_allowed?(mock_request.uri)
|
61
61
|
conn = new_excon_connection(params)
|
62
|
-
real_response = conn.request(request_params_from(params.merge(:
|
62
|
+
real_response = conn.request(request_params_from(params.merge(mock: false)))
|
63
63
|
|
64
|
-
ExconAdapter.perform_callbacks(mock_request, ExconAdapter.mock_response(real_response), :
|
64
|
+
ExconAdapter.perform_callbacks(mock_request, ExconAdapter.mock_response(real_response), real_request: true)
|
65
65
|
|
66
66
|
real_response.data
|
67
67
|
else
|
@@ -73,7 +73,7 @@ if defined?(Excon)
|
|
73
73
|
# Ensure the connection is constructed with the exact same args
|
74
74
|
# that the orginal connection was constructed with.
|
75
75
|
args = params.fetch(:__construction_args)
|
76
|
-
::Excon::Connection.new(connection_params_from args.merge(:
|
76
|
+
::Excon::Connection.new(connection_params_from args.merge(mock: false))
|
77
77
|
end
|
78
78
|
|
79
79
|
def self.connection_params_from(hash)
|
@@ -112,7 +112,7 @@ if defined?(Excon)
|
|
112
112
|
method = (params.delete(:method) || :get).to_s.downcase.to_sym
|
113
113
|
params[:query] = to_query(params[:query]) if params[:query].is_a?(Hash)
|
114
114
|
uri = Addressable::URI.new(params).to_s
|
115
|
-
WebMock::RequestSignature.new method, uri, :
|
115
|
+
WebMock::RequestSignature.new method, uri, body: body_from(params), headers: params[:headers]
|
116
116
|
end
|
117
117
|
|
118
118
|
def self.body_from(params)
|
@@ -128,9 +128,9 @@ if defined?(Excon)
|
|
128
128
|
raise Excon::Errors::Timeout if mock.should_timeout
|
129
129
|
mock.raise_error_if_any
|
130
130
|
{
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
131
|
+
body: mock.body,
|
132
|
+
status: mock.status[0].to_i,
|
133
|
+
headers: mock.headers || {}
|
134
134
|
}
|
135
135
|
end
|
136
136
|
|
@@ -144,7 +144,7 @@ if defined?(Excon)
|
|
144
144
|
|
145
145
|
def self.perform_callbacks(request, response, options = {})
|
146
146
|
return unless WebMock::CallbackRegistry.any_callbacks?
|
147
|
-
WebMock::CallbackRegistry.invoke_callbacks(options.merge(:
|
147
|
+
WebMock::CallbackRegistry.invoke_callbacks(options.merge(lib: :excon), request, response)
|
148
148
|
end
|
149
149
|
end
|
150
150
|
end
|
@@ -20,11 +20,11 @@ module HTTP
|
|
20
20
|
return new(status, "1.1", headers, body, uri) if HTTP::VERSION < "1.0.0"
|
21
21
|
|
22
22
|
new({
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
23
|
+
status: status,
|
24
|
+
version: "1.1",
|
25
|
+
headers: headers,
|
26
|
+
body: body,
|
27
|
+
uri: uri
|
28
28
|
})
|
29
29
|
end
|
30
30
|
|
@@ -37,7 +37,7 @@ module HTTP
|
|
37
37
|
raise_timeout_error if webmock_response.should_timeout
|
38
38
|
webmock_response.raise_error_if_any
|
39
39
|
|
40
|
-
invoke_callbacks(webmock_response, :
|
40
|
+
invoke_callbacks(webmock_response, real_request: false)
|
41
41
|
::HTTP::Response.from_webmock webmock_response, request_signature
|
42
42
|
end
|
43
43
|
|
@@ -49,7 +49,7 @@ module HTTP
|
|
49
49
|
def perform
|
50
50
|
return unless ::WebMock.net_connect_allowed?(request_signature.uri)
|
51
51
|
response = @perform.call
|
52
|
-
invoke_callbacks(response.to_webmock, :
|
52
|
+
invoke_callbacks(response.to_webmock, real_request: true)
|
53
53
|
response
|
54
54
|
end
|
55
55
|
|
@@ -59,7 +59,7 @@ module HTTP
|
|
59
59
|
|
60
60
|
def invoke_callbacks(webmock_response, options = {})
|
61
61
|
::WebMock::CallbackRegistry.invoke_callbacks(
|
62
|
-
options.merge({ :
|
62
|
+
options.merge({ lib: :http_rb }),
|
63
63
|
request_signature,
|
64
64
|
webmock_response
|
65
65
|
)
|
@@ -64,7 +64,7 @@ if defined?(::HTTPClient)
|
|
64
64
|
end
|
65
65
|
res = conn.push(response)
|
66
66
|
WebMock::CallbackRegistry.invoke_callbacks(
|
67
|
-
{:
|
67
|
+
{lib: :httpclient}, request_signature, webmock_response)
|
68
68
|
res
|
69
69
|
elsif WebMock.net_connect_allowed?(request_signature.uri)
|
70
70
|
# in case there is a nil entry in the hash...
|
@@ -86,7 +86,7 @@ if defined?(::HTTPClient)
|
|
86
86
|
if WebMock::CallbackRegistry.any_callbacks?
|
87
87
|
webmock_response = build_webmock_response(res, body)
|
88
88
|
WebMock::CallbackRegistry.invoke_callbacks(
|
89
|
-
{:
|
89
|
+
{lib: :httpclient, real_request: true}, request_signature,
|
90
90
|
webmock_response)
|
91
91
|
end
|
92
92
|
res
|
@@ -168,7 +168,7 @@ if defined?(::HTTPClient)
|
|
168
168
|
|
169
169
|
def build_request_signature(req, reuse_existing = false)
|
170
170
|
uri = WebMock::Util::URI.heuristic_parse(req.header.request_uri.to_s)
|
171
|
-
uri.query = WebMock::Util::QueryMapper.values_to_query(req.header.request_query, :
|
171
|
+
uri.query = WebMock::Util::QueryMapper.values_to_query(req.header.request_query, notation: WebMock::Config.instance.query_values_notation) if req.header.request_query
|
172
172
|
uri.port = req.header.request_uri.port
|
173
173
|
|
174
174
|
@request_filter.each do |filter|
|
@@ -185,8 +185,8 @@ if defined?(::HTTPClient)
|
|
185
185
|
signature = WebMock::RequestSignature.new(
|
186
186
|
req.header.request_method.downcase.to_sym,
|
187
187
|
uri.to_s,
|
188
|
-
:
|
189
|
-
:
|
188
|
+
body: req.http_body.dump,
|
189
|
+
headers: headers
|
190
190
|
)
|
191
191
|
|
192
192
|
# reuse a previous identical signature object if we stored one for later use
|
@@ -34,7 +34,7 @@ if defined?(Manticore)
|
|
34
34
|
def format_options(options)
|
35
35
|
return options unless headers = options[:headers]
|
36
36
|
|
37
|
-
options.merge(:
|
37
|
+
options.merge(headers: join_array_values(headers))
|
38
38
|
end
|
39
39
|
|
40
40
|
def join_array_values(headers)
|
@@ -62,7 +62,7 @@ if defined?(Manticore)
|
|
62
62
|
raise WebMock::NetConnectNotAllowedError.new(request_signature)
|
63
63
|
end
|
64
64
|
|
65
|
-
WebMock::CallbackRegistry.invoke_callbacks({:
|
65
|
+
WebMock::CallbackRegistry.invoke_callbacks({lib: :manticore, real_request: real_request}, request_signature, webmock_response)
|
66
66
|
manticore_response
|
67
67
|
end
|
68
68
|
|
@@ -84,7 +84,7 @@ if defined?(Manticore)
|
|
84
84
|
headers['Authorization'] = WebMock::Util::Headers.basic_auth_header(credentials.get_user_name,credentials.get_password)
|
85
85
|
end
|
86
86
|
|
87
|
-
WebMock::RequestSignature.new(method, uri, {:
|
87
|
+
WebMock::RequestSignature.new(method, uri, {body: body, headers: headers})
|
88
88
|
end
|
89
89
|
|
90
90
|
def read_body(request)
|
@@ -106,10 +106,10 @@ if defined?(Manticore)
|
|
106
106
|
raise Manticore::ConnectTimeout if webmock_response.should_timeout
|
107
107
|
|
108
108
|
Manticore::StubbedResponse.stub(
|
109
|
-
:
|
110
|
-
:
|
111
|
-
:
|
112
|
-
:
|
109
|
+
code: webmock_response.status[0],
|
110
|
+
body: webmock_response.body,
|
111
|
+
headers: webmock_response.headers,
|
112
|
+
cookies: {}
|
113
113
|
)
|
114
114
|
end
|
115
115
|
|
@@ -79,7 +79,7 @@ module WebMock
|
|
79
79
|
if webmock_response = WebMock::StubRegistry.instance.response_for_request(request_signature)
|
80
80
|
@socket = Net::HTTP.socket_type.new
|
81
81
|
WebMock::CallbackRegistry.invoke_callbacks(
|
82
|
-
{:
|
82
|
+
{lib: :net_http}, request_signature, webmock_response)
|
83
83
|
build_net_http_response(webmock_response, &block)
|
84
84
|
elsif WebMock.net_connect_allowed?(request_signature.uri)
|
85
85
|
check_right_http_connection
|
@@ -87,7 +87,7 @@ module WebMock
|
|
87
87
|
if WebMock::CallbackRegistry.any_callbacks?
|
88
88
|
webmock_response = build_webmock_response(response)
|
89
89
|
WebMock::CallbackRegistry.invoke_callbacks(
|
90
|
-
{:
|
90
|
+
{lib: :net_http, real_request: true}, request_signature, webmock_response)
|
91
91
|
end
|
92
92
|
response.extend Net::WebMockHTTPResponse
|
93
93
|
block.call response if block
|
@@ -292,7 +292,7 @@ module WebMock
|
|
292
292
|
request.set_body_internal body
|
293
293
|
end
|
294
294
|
|
295
|
-
WebMock::RequestSignature.new(method, uri, :
|
295
|
+
WebMock::RequestSignature.new(method, uri, body: request.body, headers: headers)
|
296
296
|
end
|
297
297
|
|
298
298
|
def self.validate_headers(headers)
|
@@ -25,7 +25,7 @@ if defined?(::Patron)
|
|
25
25
|
res = WebMock::HttpLibAdapters::PatronAdapter.
|
26
26
|
build_patron_response(webmock_response, default_response_charset)
|
27
27
|
WebMock::CallbackRegistry.invoke_callbacks(
|
28
|
-
{:
|
28
|
+
{lib: :patron}, request_signature, webmock_response)
|
29
29
|
res
|
30
30
|
elsif WebMock.net_connect_allowed?(request_signature.uri)
|
31
31
|
res = super
|
@@ -33,7 +33,7 @@ if defined?(::Patron)
|
|
33
33
|
webmock_response = WebMock::HttpLibAdapters::PatronAdapter.
|
34
34
|
build_webmock_response(res)
|
35
35
|
WebMock::CallbackRegistry.invoke_callbacks(
|
36
|
-
{:
|
36
|
+
{lib: :patron, real_request: true}, request_signature,
|
37
37
|
webmock_response)
|
38
38
|
end
|
39
39
|
res
|
@@ -91,8 +91,8 @@ if defined?(::Patron)
|
|
91
91
|
request_signature = WebMock::RequestSignature.new(
|
92
92
|
req.action,
|
93
93
|
uri.to_s,
|
94
|
-
:
|
95
|
-
:
|
94
|
+
body: request_body,
|
95
|
+
headers: headers
|
96
96
|
)
|
97
97
|
request_signature
|
98
98
|
end
|
@@ -69,8 +69,8 @@ if defined?(Typhoeus)
|
|
69
69
|
request_signature = WebMock::RequestSignature.new(
|
70
70
|
req.options[:method] || :get,
|
71
71
|
uri.to_s,
|
72
|
-
:
|
73
|
-
:
|
72
|
+
body: body,
|
73
|
+
headers: headers
|
74
74
|
)
|
75
75
|
|
76
76
|
req.instance_variable_set(:@__webmock_request_signature, request_signature)
|
@@ -90,19 +90,19 @@ if defined?(Typhoeus)
|
|
90
90
|
def self.generate_typhoeus_response(request_signature, webmock_response)
|
91
91
|
response = if webmock_response.should_timeout
|
92
92
|
::Typhoeus::Response.new(
|
93
|
-
:
|
94
|
-
:
|
95
|
-
:
|
96
|
-
:
|
97
|
-
:
|
93
|
+
code: 0,
|
94
|
+
status_message: "",
|
95
|
+
body: "",
|
96
|
+
headers: {},
|
97
|
+
return_code: :operation_timedout
|
98
98
|
)
|
99
99
|
else
|
100
100
|
::Typhoeus::Response.new(
|
101
|
-
:
|
102
|
-
:
|
103
|
-
:
|
104
|
-
:
|
105
|
-
:
|
101
|
+
code: webmock_response.status[0],
|
102
|
+
status_message: webmock_response.status[1],
|
103
|
+
body: webmock_response.body,
|
104
|
+
headers: webmock_response.headers,
|
105
|
+
effective_url: request_signature.uri
|
106
106
|
)
|
107
107
|
end
|
108
108
|
response.mock = :webmock
|
@@ -126,13 +126,13 @@ if defined?(Typhoeus)
|
|
126
126
|
build_webmock_response(response)
|
127
127
|
if response.mock
|
128
128
|
WebMock::CallbackRegistry.invoke_callbacks(
|
129
|
-
{:
|
129
|
+
{lib: :typhoeus},
|
130
130
|
request_signature,
|
131
131
|
webmock_response
|
132
132
|
)
|
133
133
|
else
|
134
134
|
WebMock::CallbackRegistry.invoke_callbacks(
|
135
|
-
{:
|
135
|
+
{lib: :typhoeus, real_request: true},
|
136
136
|
request_signature,
|
137
137
|
webmock_response
|
138
138
|
)
|
@@ -4,7 +4,7 @@ module WebMock
|
|
4
4
|
#https://github.com/rspec/rspec-mocks/blob/master/lib/rspec/mocks/argument_matchers.rb
|
5
5
|
class HashIncludingMatcher
|
6
6
|
def initialize(expected)
|
7
|
-
@expected = Hash[WebMock::Util::HashKeysStringifier.stringify_keys!(expected, :
|
7
|
+
@expected = Hash[WebMock::Util::HashKeysStringifier.stringify_keys!(expected, deep: true).sort]
|
8
8
|
end
|
9
9
|
|
10
10
|
def ==(actual)
|
@@ -10,9 +10,9 @@ module WebMock
|
|
10
10
|
status, headers, response = @app.call(env)
|
11
11
|
|
12
12
|
Response.new(
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
13
|
+
body: body_from_rack_response(response),
|
14
|
+
headers: headers,
|
15
|
+
status: status
|
16
16
|
)
|
17
17
|
end
|
18
18
|
|
@@ -49,7 +49,7 @@ module WebMock
|
|
49
49
|
|
50
50
|
|
51
51
|
def assign_options(options)
|
52
|
-
options = WebMock::Util::HashKeysStringifier.stringify_keys!(options, :
|
52
|
+
options = WebMock::Util::HashKeysStringifier.stringify_keys!(options, deep: true)
|
53
53
|
HashValidator.new(options).validate_keys('body', 'headers', 'query', 'basic_auth')
|
54
54
|
set_basic_auth_as_headers!(options)
|
55
55
|
@body_pattern = BodyPattern.new(options['body']) if options.has_key?('body')
|
@@ -120,7 +120,7 @@ module WebMock
|
|
120
120
|
elsif rSpecHashIncludingMatcher?(query_params)
|
121
121
|
WebMock::Matchers::HashIncludingMatcher.from_rspec_matcher(query_params)
|
122
122
|
else
|
123
|
-
WebMock::Util::QueryMapper.query_to_values(query_params, :
|
123
|
+
WebMock::Util::QueryMapper.query_to_values(query_params, notation: Config.instance.query_values_notation)
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
@@ -134,7 +134,7 @@ module WebMock
|
|
134
134
|
class URIRegexpPattern < URIPattern
|
135
135
|
def matches?(uri)
|
136
136
|
WebMock::Util::URI.variations_of_uri_as_strings(uri).any? { |u| u.match(@pattern) } &&
|
137
|
-
(@query_params.nil? || @query_params == WebMock::Util::QueryMapper.query_to_values(uri.query, :
|
137
|
+
(@query_params.nil? || @query_params == WebMock::Util::QueryMapper.query_to_values(uri.query, notation: Config.instance.query_values_notation))
|
138
138
|
end
|
139
139
|
|
140
140
|
def to_s
|
@@ -173,7 +173,7 @@ module WebMock
|
|
173
173
|
if @pattern.is_a?(Addressable::URI)
|
174
174
|
if @query_params
|
175
175
|
uri.omit(:query) === @pattern &&
|
176
|
-
(@query_params.nil? || @query_params == WebMock::Util::QueryMapper.query_to_values(uri.query, :
|
176
|
+
(@query_params.nil? || @query_params == WebMock::Util::QueryMapper.query_to_values(uri.query, notation: Config.instance.query_values_notation))
|
177
177
|
else
|
178
178
|
uri === @pattern
|
179
179
|
end
|
@@ -185,8 +185,8 @@ module WebMock
|
|
185
185
|
def add_query_params(query_params)
|
186
186
|
super
|
187
187
|
if @query_params.is_a?(Hash) || @query_params.is_a?(String)
|
188
|
-
query_hash = (WebMock::Util::QueryMapper.query_to_values(@pattern.query, :
|
189
|
-
@pattern.query = WebMock::Util::QueryMapper.values_to_query(query_hash, :
|
188
|
+
query_hash = (WebMock::Util::QueryMapper.query_to_values(@pattern.query, notation: Config.instance.query_values_notation) || {}).merge(@query_params)
|
189
|
+
@pattern.query = WebMock::Util::QueryMapper.values_to_query(query_hash, notation: WebMock::Config.instance.query_values_notation)
|
190
190
|
@query_params = nil
|
191
191
|
end
|
192
192
|
end
|
@@ -254,7 +254,7 @@ module WebMock
|
|
254
254
|
when :xml then
|
255
255
|
Crack::XML.parse(body)
|
256
256
|
else
|
257
|
-
WebMock::Util::QueryMapper.query_to_values(body, :
|
257
|
+
WebMock::Util::QueryMapper.query_to_values(body, notation: Config.instance.query_values_notation)
|
258
258
|
end
|
259
259
|
end
|
260
260
|
|
@@ -307,7 +307,7 @@ module WebMock
|
|
307
307
|
end
|
308
308
|
|
309
309
|
def normalize_hash(hash)
|
310
|
-
Hash[WebMock::Util::HashKeysStringifier.stringify_keys!(hash, :
|
310
|
+
Hash[WebMock::Util::HashKeysStringifier.stringify_keys!(hash, deep: true).sort]
|
311
311
|
end
|
312
312
|
|
313
313
|
end
|
data/lib/webmock/request_stub.rb
CHANGED
@@ -30,14 +30,14 @@ module WebMock
|
|
30
30
|
|
31
31
|
def to_raise(*exceptions)
|
32
32
|
@responses_sequences << ResponsesSequence.new([*exceptions].flatten.map {|e|
|
33
|
-
ResponseFactory.response_for(:
|
33
|
+
ResponseFactory.response_for(exception: e)
|
34
34
|
})
|
35
35
|
self
|
36
36
|
end
|
37
37
|
alias_method :and_raise, :to_raise
|
38
38
|
|
39
39
|
def to_timeout
|
40
|
-
@responses_sequences << ResponsesSequence.new([ResponseFactory.response_for(:
|
40
|
+
@responses_sequences << ResponsesSequence.new([ResponseFactory.response_for(should_timeout: true)])
|
41
41
|
self
|
42
42
|
end
|
43
43
|
alias_method :and_timeout, :to_timeout
|
@@ -84,15 +84,15 @@ module WebMock
|
|
84
84
|
|
85
85
|
if signature.body.to_s != ''
|
86
86
|
body = if signature.url_encoded?
|
87
|
-
WebMock::Util::QueryMapper.query_to_values(signature.body, :
|
87
|
+
WebMock::Util::QueryMapper.query_to_values(signature.body, notation: Config.instance.query_values_notation)
|
88
88
|
else
|
89
89
|
signature.body
|
90
90
|
end
|
91
|
-
stub.with(:
|
91
|
+
stub.with(body: body)
|
92
92
|
end
|
93
93
|
|
94
94
|
if (signature.headers && !signature.headers.empty?)
|
95
|
-
stub.with(:
|
95
|
+
stub.with(headers: signature.headers)
|
96
96
|
end
|
97
97
|
stub
|
98
98
|
end
|