webmock 3.5.0 → 3.25.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/CHANGELOG.md +476 -2
- data/README.md +166 -42
- data/lib/webmock/api.rb +2 -0
- data/lib/webmock/assertion_failure.rb +2 -0
- data/lib/webmock/callback_registry.rb +2 -0
- data/lib/webmock/config.rb +2 -0
- data/lib/webmock/cucumber.rb +2 -0
- data/lib/webmock/deprecation.rb +2 -0
- data/lib/webmock/errors.rb +2 -0
- data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +228 -0
- data/lib/webmock/http_lib_adapters/curb_adapter.rb +14 -3
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +22 -9
- data/lib/webmock/http_lib_adapters/excon_adapter.rb +5 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_rb/client.rb +4 -1
- data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
- data/lib/webmock/http_lib_adapters/http_rb/response.rb +49 -5
- data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +11 -3
- data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
- data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +7 -5
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +25 -7
- data/lib/webmock/http_lib_adapters/manticore_adapter.rb +35 -15
- data/lib/webmock/http_lib_adapters/net_http.rb +59 -112
- data/lib/webmock/http_lib_adapters/net_http_response.rb +3 -1
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +4 -2
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
- data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
- data/lib/webmock/minitest.rb +2 -0
- data/lib/webmock/rack_response.rb +5 -1
- data/lib/webmock/request_body_diff.rb +3 -1
- data/lib/webmock/request_execution_verifier.rb +2 -0
- data/lib/webmock/request_pattern.rb +118 -61
- data/lib/webmock/request_registry.rb +2 -0
- data/lib/webmock/request_signature.rb +4 -2
- data/lib/webmock/request_signature_snippet.rb +2 -0
- data/lib/webmock/request_stub.rb +34 -0
- data/lib/webmock/response.rb +22 -14
- data/lib/webmock/responses_sequence.rb +2 -0
- data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers.rb +2 -0
- data/lib/webmock/rspec.rb +4 -1
- data/lib/webmock/stub_registry.rb +28 -11
- data/lib/webmock/stub_request_snippet.rb +2 -0
- data/lib/webmock/test_unit.rb +3 -3
- data/lib/webmock/util/hash_counter.rb +12 -6
- data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
- data/lib/webmock/util/hash_validator.rb +2 -0
- data/lib/webmock/util/headers.rb +23 -10
- data/lib/webmock/util/parsers/json.rb +72 -0
- data/lib/webmock/util/parsers/parse_error.rb +7 -0
- data/lib/webmock/util/parsers/xml.rb +16 -0
- data/lib/webmock/util/query_mapper.rb +6 -2
- data/lib/webmock/util/uri.rb +11 -9
- data/lib/webmock/util/values_stringifier.rb +2 -0
- data/lib/webmock/util/version_checker.rb +7 -5
- data/lib/webmock/version.rb +3 -1
- data/lib/webmock/webmock.rb +22 -3
- data/lib/webmock.rb +5 -2
- metadata +99 -175
- data/.gemtest +0 -0
- data/.gitignore +0 -34
- data/.rspec-tm +0 -2
- data/.travis.yml +0 -21
- data/Gemfile +0 -9
- data/Rakefile +0 -30
- data/lib/webmock/util/json.rb +0 -67
- data/minitest/test_helper.rb +0 -34
- data/minitest/test_webmock.rb +0 -9
- data/minitest/webmock_spec.rb +0 -60
- data/spec/acceptance/curb/curb_spec.rb +0 -481
- data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
- data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -406
- data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
- data/spec/acceptance/excon/excon_spec.rb +0 -77
- data/spec/acceptance/excon/excon_spec_helper.rb +0 -50
- data/spec/acceptance/http_rb/http_rb_spec.rb +0 -82
- data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
- data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
- data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
- data/spec/acceptance/manticore/manticore_spec.rb +0 -56
- data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
- data/spec/acceptance/net_http/net_http_shared.rb +0 -153
- data/spec/acceptance/net_http/net_http_spec.rb +0 -331
- data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
- data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
- data/spec/acceptance/patron/patron_spec.rb +0 -125
- data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
- data/spec/acceptance/shared/callbacks.rb +0 -147
- data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
- data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
- data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
- data/spec/acceptance/shared/request_expectations.rb +0 -923
- data/spec/acceptance/shared/returning_declared_responses.rb +0 -388
- data/spec/acceptance/shared/stubbing_requests.rb +0 -638
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
- data/spec/acceptance/webmock_shared.rb +0 -41
- data/spec/fixtures/test.txt +0 -1
- data/spec/quality_spec.rb +0 -84
- data/spec/spec_helper.rb +0 -48
- data/spec/support/example_curl_output.txt +0 -22
- data/spec/support/failures.rb +0 -9
- data/spec/support/my_rack_app.rb +0 -53
- data/spec/support/network_connection.rb +0 -19
- data/spec/support/webmock_server.rb +0 -69
- data/spec/unit/api_spec.rb +0 -175
- data/spec/unit/errors_spec.rb +0 -129
- data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
- data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
- data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
- data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
- data/spec/unit/rack_response_spec.rb +0 -112
- data/spec/unit/request_body_diff_spec.rb +0 -90
- data/spec/unit/request_execution_verifier_spec.rb +0 -208
- data/spec/unit/request_pattern_spec.rb +0 -596
- data/spec/unit/request_registry_spec.rb +0 -95
- data/spec/unit/request_signature_snippet_spec.rb +0 -89
- data/spec/unit/request_signature_spec.rb +0 -155
- data/spec/unit/request_stub_spec.rb +0 -199
- data/spec/unit/response_spec.rb +0 -282
- data/spec/unit/stub_registry_spec.rb +0 -103
- data/spec/unit/stub_request_snippet_spec.rb +0 -115
- data/spec/unit/util/hash_counter_spec.rb +0 -39
- data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
- data/spec/unit/util/headers_spec.rb +0 -28
- data/spec/unit/util/json_spec.rb +0 -33
- data/spec/unit/util/query_mapper_spec.rb +0 -150
- data/spec/unit/util/uri_spec.rb +0 -299
- data/spec/unit/util/version_checker_spec.rb +0 -65
- data/spec/unit/webmock_spec.rb +0 -11
- data/test/http_request.rb +0 -24
- data/test/shared_test.rb +0 -108
- data/test/test_helper.rb +0 -23
- data/test/test_webmock.rb +0 -6
- data/webmock.gemspec +0 -46
data/spec/unit/response_spec.rb
DELETED
@@ -1,282 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::ResponseFactory do
|
4
|
-
|
5
|
-
describe "response_for" do
|
6
|
-
|
7
|
-
it "should create response with options passed as arguments" do
|
8
|
-
options = {body: "abc", headers: {a: :b}}
|
9
|
-
expect(WebMock::Response).to receive(:new).with(options).and_return(@response = double(WebMock::Response))
|
10
|
-
expect(WebMock::ResponseFactory.response_for(options)).to eq(@response)
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
it "should create dynamic response for argument responding to call" do
|
15
|
-
callable = double(call: {body: "abc"})
|
16
|
-
expect(WebMock::DynamicResponse).to receive(:new).with(callable).and_return(@response = double(WebMock::Response))
|
17
|
-
expect(WebMock::ResponseFactory.response_for(callable)).to eq(@response)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
24
|
-
describe WebMock::Response do
|
25
|
-
before(:each) do
|
26
|
-
@response = WebMock::Response.new(headers: {'A' => 'a'})
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should raise an error when initialized with unknown option" do
|
30
|
-
expect { WebMock::Response.new(foo: "bar") }.to raise_error('Unknown key: "foo". Valid keys are: "headers", "status", "body", "exception", "should_timeout"')
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should report normalized headers" do
|
34
|
-
expect(WebMock::Util::Headers).to receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
|
35
|
-
@response = WebMock::Response.new(headers: {'A' => 'a'})
|
36
|
-
expect(@response.headers).to eq({'B' => 'b'})
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "status" do
|
40
|
-
it "should have 200 code and empty message by default" do
|
41
|
-
expect(@response.status).to eq([200, ""])
|
42
|
-
end
|
43
|
-
|
44
|
-
it "should return assigned status" do
|
45
|
-
@response = WebMock::Response.new(status: 500)
|
46
|
-
expect(@response.status).to eq([500, ""])
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should return assigned message" do
|
50
|
-
@response = WebMock::Response.new(status: [500, "Internal Server Error"])
|
51
|
-
expect(@response.status).to eq([500, "Internal Server Error"])
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "raising error" do
|
56
|
-
|
57
|
-
it "should raise error if any assigned" do
|
58
|
-
@response = WebMock::Response.new(exception: ArgumentError)
|
59
|
-
expect {
|
60
|
-
@response.raise_error_if_any
|
61
|
-
}.to raise_error(ArgumentError, "Exception from WebMock")
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should raise error if any assigned as instance" do
|
65
|
-
@response = WebMock::Response.new(exception: ArgumentError.new("hello world"))
|
66
|
-
expect {
|
67
|
-
@response.raise_error_if_any
|
68
|
-
}.to raise_error(ArgumentError, "hello world")
|
69
|
-
end
|
70
|
-
|
71
|
-
it "should raise error if any assigned as string" do
|
72
|
-
@response = WebMock::Response.new(exception: "hello world")
|
73
|
-
expect {
|
74
|
-
@response.raise_error_if_any
|
75
|
-
}.to raise_error("hello world")
|
76
|
-
end
|
77
|
-
|
78
|
-
it "should not raise error if no error assigned" do
|
79
|
-
@response.raise_error_if_any
|
80
|
-
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
describe "timeout" do
|
85
|
-
|
86
|
-
it "should know if it should timeout" do
|
87
|
-
@response = WebMock::Response.new(should_timeout: true)
|
88
|
-
expect(@response.should_timeout).to be_truthy
|
89
|
-
end
|
90
|
-
|
91
|
-
it "should not timeout by default" do
|
92
|
-
@response = WebMock::Response.new
|
93
|
-
expect(@response.should_timeout).to be_falsey
|
94
|
-
end
|
95
|
-
|
96
|
-
end
|
97
|
-
|
98
|
-
describe "body" do
|
99
|
-
|
100
|
-
it "should return empty body by default" do
|
101
|
-
expect(@response.body).to eq('')
|
102
|
-
end
|
103
|
-
|
104
|
-
it "should report body if assigned" do
|
105
|
-
@response = WebMock::Response.new(body: "abc")
|
106
|
-
expect(@response.body).to eq("abc")
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should report string even if existing file path was provided" do
|
110
|
-
@response = WebMock::Response.new(body: __FILE__)
|
111
|
-
expect(@response.body).to eq(__FILE__)
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should report content of a IO object if provided" do
|
115
|
-
@response = WebMock::Response.new(body: File.new(__FILE__))
|
116
|
-
expect(@response.body).to eq(File.read(__FILE__))
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should report many times content of a IO object if provided" do
|
120
|
-
@response = WebMock::Response.new(body: File.new(__FILE__))
|
121
|
-
expect(@response.body).to eq(File.read(__FILE__))
|
122
|
-
expect(@response.body).to eq(File.read(__FILE__))
|
123
|
-
end
|
124
|
-
|
125
|
-
it "should work with Pathnames" do
|
126
|
-
@response = WebMock::Response.new(body: Pathname.new(__FILE__))
|
127
|
-
expect(@response.body).to eq(File.read(__FILE__))
|
128
|
-
end
|
129
|
-
|
130
|
-
# Users of webmock commonly make the mistake of stubbing the response
|
131
|
-
# body to return a hash, to prevent this:
|
132
|
-
#
|
133
|
-
it "should error if not given one of the allowed types" do
|
134
|
-
expect { WebMock::Response.new(body: Hash.new) }.to \
|
135
|
-
raise_error(WebMock::Response::InvalidBody)
|
136
|
-
end
|
137
|
-
|
138
|
-
end
|
139
|
-
|
140
|
-
describe "from raw response" do
|
141
|
-
|
142
|
-
describe "when input is IO" do
|
143
|
-
before(:each) do
|
144
|
-
@file = File.new(CURL_EXAMPLE_OUTPUT_PATH)
|
145
|
-
@response = WebMock::Response.new(@file)
|
146
|
-
end
|
147
|
-
|
148
|
-
|
149
|
-
it "should read status" do
|
150
|
-
expect(@response.status).to eq([202, "OK"])
|
151
|
-
end
|
152
|
-
|
153
|
-
it "should read headers" do
|
154
|
-
expect(@response.headers).to eq({
|
155
|
-
"Date"=>"Sat, 23 Jan 2010 01:01:05 GMT",
|
156
|
-
"Content-Type"=>"text/html; charset=UTF-8",
|
157
|
-
"Content-Length"=>"419",
|
158
|
-
"Connection"=>"Keep-Alive",
|
159
|
-
"Accept"=>"image/jpeg, image/png"
|
160
|
-
})
|
161
|
-
end
|
162
|
-
|
163
|
-
it "should read body" do
|
164
|
-
expect(@response.body.size).to eq(419)
|
165
|
-
end
|
166
|
-
|
167
|
-
it "should close IO" do
|
168
|
-
expect(@file).to be_closed
|
169
|
-
end
|
170
|
-
|
171
|
-
end
|
172
|
-
|
173
|
-
describe "when input is String" do
|
174
|
-
before(:each) do
|
175
|
-
@input = File.read(CURL_EXAMPLE_OUTPUT_PATH)
|
176
|
-
@response = WebMock::Response.new(@input)
|
177
|
-
end
|
178
|
-
|
179
|
-
it "should read status" do
|
180
|
-
expect(@response.status).to eq([202, "OK"])
|
181
|
-
end
|
182
|
-
|
183
|
-
it "should read headers" do
|
184
|
-
expect(@response.headers).to eq({
|
185
|
-
"Date"=>"Sat, 23 Jan 2010 01:01:05 GMT",
|
186
|
-
"Content-Type"=>"text/html; charset=UTF-8",
|
187
|
-
"Content-Length"=>"419",
|
188
|
-
"Connection"=>"Keep-Alive",
|
189
|
-
"Accept"=>"image/jpeg, image/png"
|
190
|
-
})
|
191
|
-
end
|
192
|
-
|
193
|
-
it "should read body" do
|
194
|
-
expect(@response.body.size).to eq(419)
|
195
|
-
end
|
196
|
-
|
197
|
-
it "should work with transfer-encoding set to chunked" do
|
198
|
-
@input.gsub!("Content-Length: 419", "Transfer-Encoding: chunked")
|
199
|
-
@response = WebMock::Response.new(@input)
|
200
|
-
expect(@response.body.size).to eq(419)
|
201
|
-
end
|
202
|
-
|
203
|
-
end
|
204
|
-
|
205
|
-
describe "with dynamically evaluated options" do
|
206
|
-
|
207
|
-
before(:each) do
|
208
|
-
@request_signature = WebMock::RequestSignature.new(:post, "www.example.com", body: "abc", headers: {'A' => 'a'})
|
209
|
-
end
|
210
|
-
|
211
|
-
it "should have evaluated body" do
|
212
|
-
@response = WebMock::Response.new(body: lambda {|request| request.body})
|
213
|
-
expect(@response.evaluate(@request_signature).body).to eq("abc")
|
214
|
-
end
|
215
|
-
|
216
|
-
it "should have evaluated headers" do
|
217
|
-
@response = WebMock::Response.new(headers: lambda {|request| request.headers})
|
218
|
-
expect(@response.evaluate(@request_signature).headers).to eq({'A' => 'a'})
|
219
|
-
end
|
220
|
-
|
221
|
-
it "should have evaluated status" do
|
222
|
-
@response = WebMock::Response.new(status: lambda {|request| 302})
|
223
|
-
expect(@response.evaluate(@request_signature).status).to eq([302, ""])
|
224
|
-
end
|
225
|
-
|
226
|
-
end
|
227
|
-
|
228
|
-
end
|
229
|
-
|
230
|
-
describe WebMock::DynamicResponse do
|
231
|
-
|
232
|
-
describe "evaluating response options" do
|
233
|
-
|
234
|
-
it "should evaluate new response with evaluated options" do
|
235
|
-
request_signature = WebMock::RequestSignature.new(:post, "www.example.com", body: "abc", headers: {'A' => 'a'})
|
236
|
-
response = WebMock::DynamicResponse.new(lambda {|request|
|
237
|
-
{
|
238
|
-
body: request.body,
|
239
|
-
headers: request.headers,
|
240
|
-
status: 302
|
241
|
-
}
|
242
|
-
})
|
243
|
-
evaluated_response = response.evaluate(request_signature)
|
244
|
-
expect(evaluated_response.body).to eq("abc")
|
245
|
-
expect(evaluated_response.headers).to eq({'A' => 'a'})
|
246
|
-
expect(evaluated_response.status).to eq([302, ""])
|
247
|
-
end
|
248
|
-
|
249
|
-
it "should be equal to static response after evaluation" do
|
250
|
-
request_signature = WebMock::RequestSignature.new(:post, "www.example.com", body: "abc")
|
251
|
-
response = WebMock::DynamicResponse.new(lambda {|request| {body: request.body}})
|
252
|
-
evaluated_response = response.evaluate(request_signature)
|
253
|
-
expect(evaluated_response).to eq(WebMock::Response.new(body: "abc"))
|
254
|
-
end
|
255
|
-
|
256
|
-
describe "when raw response is evaluated" do
|
257
|
-
before(:each) do
|
258
|
-
@files = {
|
259
|
-
"www.example.com" => File.new(CURL_EXAMPLE_OUTPUT_PATH)
|
260
|
-
}
|
261
|
-
@request_signature = WebMock::RequestSignature.new(:get, "www.example.com")
|
262
|
-
end
|
263
|
-
|
264
|
-
describe "as a file" do
|
265
|
-
it "should return response" do
|
266
|
-
response = WebMock::DynamicResponse.new(lambda {|request| @files[request.uri.host.to_s] })
|
267
|
-
expect(response.evaluate(@request_signature).body.size).to eq(419)
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
describe "as a string" do
|
272
|
-
it "should return response" do
|
273
|
-
response = WebMock::DynamicResponse.new(lambda {|request| @files[request.uri.host.to_s].read })
|
274
|
-
expect(response.evaluate(@request_signature).body.size).to eq(419)
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
end
|
281
|
-
|
282
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::StubRegistry do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
WebMock::StubRegistry.instance.reset!
|
7
|
-
@request_pattern = WebMock::RequestPattern.new(:get, "www.example.com")
|
8
|
-
@request_signature = WebMock::RequestSignature.new(:get, "www.example.com")
|
9
|
-
@request_stub = WebMock::RequestStub.new(:get, "www.example.com")
|
10
|
-
end
|
11
|
-
|
12
|
-
describe "remove_request_stub" do
|
13
|
-
it "should remove stub from registry" do
|
14
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub)
|
15
|
-
expect(WebMock::StubRegistry.instance.registered_request?(@request_signature)).to eq(@request_stub)
|
16
|
-
WebMock::StubRegistry.instance.remove_request_stub(@request_stub)
|
17
|
-
expect(WebMock::StubRegistry.instance.registered_request?(@request_signature)).to eq(nil)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
describe "reset!" do
|
22
|
-
before(:each) do
|
23
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should clean request stubs" do
|
27
|
-
expect(WebMock::StubRegistry.instance.registered_request?(@request_signature)).to eq(@request_stub)
|
28
|
-
WebMock::StubRegistry.instance.reset!
|
29
|
-
expect(WebMock::StubRegistry.instance.registered_request?(@request_signature)).to eq(nil)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "registering and reporting registered requests" do
|
34
|
-
|
35
|
-
it "should return registered stub" do
|
36
|
-
expect(WebMock::StubRegistry.instance.register_request_stub(@request_stub)).to eq(@request_stub)
|
37
|
-
end
|
38
|
-
|
39
|
-
it "should report if request stub is not registered" do
|
40
|
-
expect(WebMock::StubRegistry.instance.registered_request?(@request_signature)).to eq(nil)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should register and report registered stub" do
|
44
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub)
|
45
|
-
expect(WebMock::StubRegistry.instance.registered_request?(@request_signature)).to eq(@request_stub)
|
46
|
-
end
|
47
|
-
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
describe "response for request" do
|
52
|
-
|
53
|
-
it "should report registered evaluated response for request pattern" do
|
54
|
-
@request_stub.to_return(body: "abc")
|
55
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub)
|
56
|
-
expect(WebMock::StubRegistry.instance.response_for_request(@request_signature)).
|
57
|
-
to eq(WebMock::Response.new(body: "abc"))
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should report evaluated response" do
|
61
|
-
@request_stub.to_return {|request| {body: request.method.to_s} }
|
62
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub)
|
63
|
-
response1 = WebMock::StubRegistry.instance.response_for_request(@request_signature)
|
64
|
-
expect(response1).to eq(WebMock::Response.new(body: "get"))
|
65
|
-
end
|
66
|
-
|
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
|
-
expect(response1).not_to be(response2)
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should report clone of the dynamic response" do
|
76
|
-
@request_stub.to_return {|request| {body: request.method.to_s} }
|
77
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub)
|
78
|
-
response1 = WebMock::StubRegistry.instance.response_for_request(@request_signature)
|
79
|
-
response2 = WebMock::StubRegistry.instance.response_for_request(@request_signature)
|
80
|
-
expect(response1).not_to be(response2)
|
81
|
-
end
|
82
|
-
|
83
|
-
it "should report nothing if no response for request is registered" do
|
84
|
-
expect(WebMock::StubRegistry.instance.response_for_request(@request_signature)).to eq(nil)
|
85
|
-
end
|
86
|
-
|
87
|
-
it "should always return last registered matching response" do
|
88
|
-
@request_stub1 = WebMock::RequestStub.new(:get, "www.example.com")
|
89
|
-
@request_stub1.to_return(body: "abc")
|
90
|
-
@request_stub2 = WebMock::RequestStub.new(:get, "www.example.com")
|
91
|
-
@request_stub2.to_return(body: "def")
|
92
|
-
@request_stub3 = WebMock::RequestStub.new(:get, "www.example.org")
|
93
|
-
@request_stub3.to_return(body: "ghj")
|
94
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub1)
|
95
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub2)
|
96
|
-
WebMock::StubRegistry.instance.register_request_stub(@request_stub3)
|
97
|
-
expect(WebMock::StubRegistry.instance.response_for_request(@request_signature)).
|
98
|
-
to eq(WebMock::Response.new(body: "def"))
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
@@ -1,115 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::StubRequestSnippet do
|
4
|
-
describe "to_s" do
|
5
|
-
describe "GET" do
|
6
|
-
before(:each) do
|
7
|
-
@request_signature = WebMock::RequestSignature.new(:get, "www.example.com/?a=b&c=d", headers: {})
|
8
|
-
end
|
9
|
-
|
10
|
-
it "should print stub request snippet with url with params and method and empty successful response" do
|
11
|
-
expected = %Q(stub_request(:get, "http://www.example.com/?a=b&c=d").\n to_return(status: 200, body: "", headers: {}))
|
12
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
13
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should print stub request snippet with body if available" do
|
17
|
-
@request_signature.body = "abcdef"
|
18
|
-
expected = %Q(stub_request(:get, "http://www.example.com/?a=b&c=d").)+
|
19
|
-
"\n with(\n body: \"abcdef\")." +
|
20
|
-
"\n to_return(status: 200, body: \"\", headers: {})"
|
21
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
22
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should print stub request snippet with multiline body" do
|
26
|
-
@request_signature.body = "abc\ndef"
|
27
|
-
expected = %Q(stub_request(:get, "http://www.example.com/?a=b&c=d").)+
|
28
|
-
"\n with(\n body: \"abc\\ndef\")." +
|
29
|
-
"\n to_return(status: 200, body: \"\", headers: {})"
|
30
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
31
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should print stub request snippet with headers if any" do
|
35
|
-
@request_signature.headers = {'B' => 'b', 'A' => 'a'}
|
36
|
-
expected = 'stub_request(:get, "http://www.example.com/?a=b&c=d").'+
|
37
|
-
"\n with(\n headers: {\n\t\ 'A\'=>\'a\',\n\t \'B\'=>\'b\'\n })." +
|
38
|
-
"\n to_return(status: 200, body: \"\", headers: {})"
|
39
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
40
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should print stub request snippet with body and headers" do
|
44
|
-
@request_signature.body = "abcdef"
|
45
|
-
@request_signature.headers = {'B' => 'b', 'A' => 'a'}
|
46
|
-
expected = 'stub_request(:get, "http://www.example.com/?a=b&c=d").'+
|
47
|
-
"\n with(\n body: \"abcdef\",\n headers: {\n\t \'A\'=>\'a\',\n\t \'B\'=>\'b\'\n })." +
|
48
|
-
"\n to_return(status: 200, body: \"\", headers: {})"
|
49
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
50
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected)
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should not print to_return part if not wanted" do
|
54
|
-
expected = 'stub_request(:get, "http://www.example.com/").'+
|
55
|
-
"\n with(\n body: \"abcdef\")"
|
56
|
-
stub = WebMock::RequestStub.new(:get, "www.example.com").with(body: "abcdef").to_return(body: "hello")
|
57
|
-
expect(WebMock::StubRequestSnippet.new(stub).to_s(false)).to eq(expected)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
describe "POST" do
|
62
|
-
let(:form_body) { 'user%5bfirst_name%5d=Bartosz' }
|
63
|
-
let(:multipart_form_body) { 'complicated stuff--ABC123--goes here' }
|
64
|
-
it "should print stub request snippet with body as a hash using rails conventions on form posts" do
|
65
|
-
@request_signature = WebMock::RequestSignature.new(:post, "www.example.com",
|
66
|
-
headers: {'Content-Type' => 'application/x-www-form-urlencoded'},
|
67
|
-
body: form_body)
|
68
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
69
|
-
expected = <<-STUB
|
70
|
-
stub_request(:post, "http://www.example.com/").
|
71
|
-
with(
|
72
|
-
body: {"user"=>{"first_name"=>"Bartosz"}},
|
73
|
-
headers: {
|
74
|
-
\t 'Content-Type'=>'application/x-www-form-urlencoded'
|
75
|
-
}).
|
76
|
-
to_return(status: 200, body: \"\", headers: {})
|
77
|
-
STUB
|
78
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected.strip)
|
79
|
-
end
|
80
|
-
|
81
|
-
it "should print stub request snippet leaving body as string when not a urlencoded form" do
|
82
|
-
@request_signature = WebMock::RequestSignature.new(:post, "www.example.com",
|
83
|
-
headers: {'Content-Type' => 'multipart/form-data; boundary=ABC123'},
|
84
|
-
body: multipart_form_body)
|
85
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
86
|
-
expected = <<-STUB
|
87
|
-
stub_request(:post, "http://www.example.com/").
|
88
|
-
with(
|
89
|
-
body: "#{multipart_form_body}",
|
90
|
-
headers: {
|
91
|
-
\t 'Content-Type'=>'multipart/form-data; boundary=ABC123'
|
92
|
-
}).
|
93
|
-
to_return(status: 200, body: \"\", headers: {})
|
94
|
-
STUB
|
95
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected.strip)
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should print stub request snippet with valid JSON body when request header contains 'Accept'=>'application/json' " do
|
99
|
-
@request_signature = WebMock::RequestSignature.new(:post, "www.example.com",
|
100
|
-
headers: {'Accept' => 'application/json'})
|
101
|
-
@request_stub = WebMock::RequestStub.from_request_signature(@request_signature)
|
102
|
-
expected = <<-STUB
|
103
|
-
stub_request(:post, "http://www.example.com/").
|
104
|
-
with(
|
105
|
-
headers: {
|
106
|
-
\t 'Accept'=>'application/json'
|
107
|
-
}).
|
108
|
-
to_return(status: 200, body: \"{}\", headers: {})
|
109
|
-
STUB
|
110
|
-
expect(WebMock::StubRequestSnippet.new(@request_stub).to_s).to eq(expected.strip)
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
end
|
115
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::Util::HashCounter do
|
4
|
-
|
5
|
-
it "should return 0 for non existing key" do
|
6
|
-
expect(WebMock::Util::HashCounter.new.get(:abc)).to eq(0)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should increase the returned value on every put with the same key" do
|
10
|
-
counter = WebMock::Util::HashCounter.new
|
11
|
-
counter.put(:abc)
|
12
|
-
expect(counter.get(:abc)).to eq(1)
|
13
|
-
counter.put(:abc)
|
14
|
-
expect(counter.get(:abc)).to eq(2)
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should only increase value for given key provided to put" do
|
18
|
-
counter = WebMock::Util::HashCounter.new
|
19
|
-
counter.put(:abc)
|
20
|
-
expect(counter.get(:abc)).to eq(1)
|
21
|
-
expect(counter.get(:def)).to eq(0)
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "each" do
|
25
|
-
it "should provide elements in order of the last modified" do
|
26
|
-
counter = WebMock::Util::HashCounter.new
|
27
|
-
counter.put(:a)
|
28
|
-
counter.put(:b)
|
29
|
-
counter.put(:c)
|
30
|
-
counter.put(:b)
|
31
|
-
counter.put(:a)
|
32
|
-
counter.put(:d)
|
33
|
-
|
34
|
-
elements = []
|
35
|
-
counter.each {|k,v| elements << [k,v]}
|
36
|
-
expect(elements).to eq([[:c, 1], [:b, 2], [:a, 2], [:d, 1]])
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::Util::HashKeysStringifier do
|
4
|
-
|
5
|
-
it "should recursively stringify all symbol keys" do
|
6
|
-
hash = {
|
7
|
-
a: {
|
8
|
-
b: [
|
9
|
-
{
|
10
|
-
c: [{d: "1"}]
|
11
|
-
}
|
12
|
-
]
|
13
|
-
}
|
14
|
-
}
|
15
|
-
stringified = {
|
16
|
-
'a' => {
|
17
|
-
'b' => [
|
18
|
-
{
|
19
|
-
'c' => [{'d' => "1"}]
|
20
|
-
}
|
21
|
-
]
|
22
|
-
}
|
23
|
-
}
|
24
|
-
expect(WebMock::Util::HashKeysStringifier.stringify_keys!(hash, deep: true)).to eq(stringified)
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::Util::Headers do
|
4
|
-
|
5
|
-
it "should decode_userinfo_from_header handles basic auth" do
|
6
|
-
authorization_header = "Basic dXNlcm5hbWU6c2VjcmV0"
|
7
|
-
userinfo = WebMock::Util::Headers.decode_userinfo_from_header(authorization_header)
|
8
|
-
expect(userinfo).to eq("username:secret")
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "sorted_headers_string" do
|
12
|
-
|
13
|
-
it "should return nice string for hash with string values" do
|
14
|
-
expect(WebMock::Util::Headers.sorted_headers_string({"a" => "b"})).to eq("{'A'=>'b'}")
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should return nice string for hash with array values" do
|
18
|
-
expect(WebMock::Util::Headers.sorted_headers_string({"a" => ["b", "c"]})).to eq("{'A'=>['b', 'c']}")
|
19
|
-
end
|
20
|
-
|
21
|
-
it "should return nice string for hash with array values and string values" do
|
22
|
-
expect(WebMock::Util::Headers.sorted_headers_string({"a" => ["b", "c"], "d" => "e"})).to eq("{'A'=>['b', 'c'], 'D'=>'e'}")
|
23
|
-
end
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
data/spec/unit/util/json_spec.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe WebMock::Util::JSON do
|
5
|
-
describe ".parse" do
|
6
|
-
it "should parse json without parsing dates" do
|
7
|
-
expect(WebMock::Util::JSON.parse("\"a\":\"2011-01-01\"")).to eq(
|
8
|
-
{"a" => "2011-01-01"}
|
9
|
-
)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "can parse json with multibyte characters" do
|
13
|
-
expect(WebMock::Util::JSON.parse(
|
14
|
-
"{\"name\":\"山田太郎\"\,\"job\":\"会社員\"}"
|
15
|
-
)).to eq({"name" => "山田太郎", "job" => "会社員"})
|
16
|
-
end
|
17
|
-
|
18
|
-
it "rescues ArgumentError's from YAML.load" do
|
19
|
-
allow(YAML).to receive(:load).and_raise(ArgumentError)
|
20
|
-
expect {
|
21
|
-
WebMock::Util::JSON.parse("Bad JSON")
|
22
|
-
}.to raise_error WebMock::Util::JSON::ParseError
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe ".convert_json_to_yaml" do
|
27
|
-
it "parses multibyte characters" do
|
28
|
-
expect(WebMock::Util::JSON.convert_json_to_yaml(
|
29
|
-
"{\"name\":\"山田太郎\"\,\"job\":\"会社員\"}"
|
30
|
-
)).to eq "{\"name\": \"山田太郎\", \"job\": \"会社員\"}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|