webmock 3.18.1 → 3.19.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.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +34 -15
  4. data/lib/webmock/api.rb +2 -0
  5. data/lib/webmock/assertion_failure.rb +2 -0
  6. data/lib/webmock/callback_registry.rb +2 -0
  7. data/lib/webmock/config.rb +2 -0
  8. data/lib/webmock/cucumber.rb +2 -0
  9. data/lib/webmock/deprecation.rb +2 -0
  10. data/lib/webmock/errors.rb +2 -0
  11. data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +2 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +2 -0
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +14 -6
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
  15. data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
  16. data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
  17. data/lib/webmock/http_lib_adapters/http_rb/client.rb +2 -0
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +3 -1
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +2 -0
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +2 -0
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +2 -0
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +2 -0
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +2 -0
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
  25. data/lib/webmock/http_lib_adapters/net_http.rb +2 -0
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +2 -0
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +2 -0
  29. data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +2 -0
  35. data/lib/webmock/request_body_diff.rb +2 -0
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +3 -1
  38. data/lib/webmock/request_registry.rb +2 -0
  39. data/lib/webmock/request_signature.rb +2 -0
  40. data/lib/webmock/request_signature_snippet.rb +2 -0
  41. data/lib/webmock/request_stub.rb +7 -1
  42. data/lib/webmock/response.rb +2 -0
  43. data/lib/webmock/responses_sequence.rb +2 -0
  44. data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
  45. data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
  46. data/lib/webmock/rspec/matchers.rb +2 -0
  47. data/lib/webmock/rspec.rb +2 -0
  48. data/lib/webmock/stub_registry.rb +2 -0
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +2 -0
  51. data/lib/webmock/util/hash_counter.rb +12 -6
  52. data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
  53. data/lib/webmock/util/hash_validator.rb +2 -0
  54. data/lib/webmock/util/headers.rb +22 -8
  55. data/lib/webmock/util/json.rb +2 -0
  56. data/lib/webmock/util/query_mapper.rb +2 -0
  57. data/lib/webmock/util/uri.rb +3 -1
  58. data/lib/webmock/util/values_stringifier.rb +2 -0
  59. data/lib/webmock/util/version_checker.rb +7 -5
  60. data/lib/webmock/version.rb +3 -1
  61. data/lib/webmock/webmock.rb +2 -0
  62. data/lib/webmock.rb +2 -0
  63. metadata +36 -168
  64. data/.gemtest +0 -0
  65. data/.github/workflows/CI.yml +0 -38
  66. data/.gitignore +0 -34
  67. data/.rspec-tm +0 -2
  68. data/Gemfile +0 -9
  69. data/Rakefile +0 -38
  70. data/minitest/test_helper.rb +0 -34
  71. data/minitest/test_webmock.rb +0 -9
  72. data/minitest/webmock_spec.rb +0 -60
  73. data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
  74. data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
  75. data/spec/acceptance/curb/curb_spec.rb +0 -510
  76. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  77. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
  78. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  79. data/spec/acceptance/excon/excon_spec.rb +0 -77
  80. data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
  81. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
  82. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  83. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  84. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  85. data/spec/acceptance/manticore/manticore_spec.rb +0 -107
  86. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  87. data/spec/acceptance/net_http/net_http_shared.rb +0 -190
  88. data/spec/acceptance/net_http/net_http_spec.rb +0 -395
  89. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  90. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  91. data/spec/acceptance/patron/patron_spec.rb +0 -123
  92. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  93. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  94. data/spec/acceptance/shared/callbacks.rb +0 -148
  95. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  96. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  97. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  98. data/spec/acceptance/shared/request_expectations.rb +0 -930
  99. data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
  100. data/spec/acceptance/shared/stubbing_requests.rb +0 -678
  101. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  102. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  103. data/spec/acceptance/webmock_shared.rb +0 -41
  104. data/spec/fixtures/test.txt +0 -1
  105. data/spec/quality_spec.rb +0 -84
  106. data/spec/spec_helper.rb +0 -48
  107. data/spec/support/example_curl_output.txt +0 -22
  108. data/spec/support/failures.rb +0 -9
  109. data/spec/support/my_rack_app.rb +0 -53
  110. data/spec/support/network_connection.rb +0 -19
  111. data/spec/support/webmock_server.rb +0 -70
  112. data/spec/unit/api_spec.rb +0 -175
  113. data/spec/unit/errors_spec.rb +0 -129
  114. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  115. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  116. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  117. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  118. data/spec/unit/rack_response_spec.rb +0 -112
  119. data/spec/unit/request_body_diff_spec.rb +0 -90
  120. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  121. data/spec/unit/request_pattern_spec.rb +0 -748
  122. data/spec/unit/request_registry_spec.rb +0 -95
  123. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  124. data/spec/unit/request_signature_spec.rb +0 -175
  125. data/spec/unit/request_stub_spec.rb +0 -234
  126. data/spec/unit/response_spec.rb +0 -314
  127. data/spec/unit/stub_registry_spec.rb +0 -103
  128. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  129. data/spec/unit/util/hash_counter_spec.rb +0 -39
  130. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  131. data/spec/unit/util/headers_spec.rb +0 -28
  132. data/spec/unit/util/json_spec.rb +0 -33
  133. data/spec/unit/util/query_mapper_spec.rb +0 -157
  134. data/spec/unit/util/uri_spec.rb +0 -371
  135. data/spec/unit/util/version_checker_spec.rb +0 -65
  136. data/spec/unit/webmock_spec.rb +0 -114
  137. data/test/http_request.rb +0 -24
  138. data/test/shared_test.rb +0 -108
  139. data/test/test_helper.rb +0 -23
  140. data/test/test_webmock.rb +0 -12
  141. data/webmock.gemspec +0 -54
@@ -1,314 +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
- allow(WebMock::Util::Headers).to receive(:normalize_headers).with({'A' => 'a'}.freeze).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 given a non-allowed type: a hash" do
134
- expect { WebMock::Response.new(body: Hash.new) }.to \
135
- raise_error(WebMock::Response::InvalidBody)
136
- end
137
-
138
- it "should error if given a non-allowed type: something that is not a hash" do
139
- expect { WebMock::Response.new(body: 123) }.to \
140
- raise_error(WebMock::Response::InvalidBody)
141
- end
142
- end
143
-
144
- describe "from raw response" do
145
- describe "when input is a StringIO" do
146
- before(:each) do
147
- @io = StringIO.new(File.read(CURL_EXAMPLE_OUTPUT_PATH))
148
- @response = WebMock::Response.new(@io)
149
- end
150
-
151
- it "should read status" do
152
- expect(@response.status).to eq([202, "OK"])
153
- end
154
-
155
- it "should read headers" do
156
- expect(@response.headers).to eq(
157
- "Date"=>"Sat, 23 Jan 2010 01:01:05 GMT",
158
- "Content-Type"=>"text/html; charset=UTF-8",
159
- "Content-Length"=>"419",
160
- "Connection"=>"Keep-Alive",
161
- "Accept"=>"image/jpeg, image/png"
162
- )
163
- end
164
-
165
- it "should read body" do
166
- expect(@response.body.size).to eq(419)
167
- end
168
-
169
- it "should close IO" do
170
- expect(@io).to be_closed
171
- end
172
- end
173
-
174
- describe "when input is IO" do
175
- before(:each) do
176
- @file = File.new(CURL_EXAMPLE_OUTPUT_PATH)
177
- @response = WebMock::Response.new(@file)
178
- end
179
-
180
-
181
- it "should read status" do
182
- expect(@response.status).to eq([202, "OK"])
183
- end
184
-
185
- it "should read headers" do
186
- expect(@response.headers).to eq({
187
- "Date"=>"Sat, 23 Jan 2010 01:01:05 GMT",
188
- "Content-Type"=>"text/html; charset=UTF-8",
189
- "Content-Length"=>"419",
190
- "Connection"=>"Keep-Alive",
191
- "Accept"=>"image/jpeg, image/png"
192
- })
193
- end
194
-
195
- it "should read body" do
196
- expect(@response.body.size).to eq(419)
197
- end
198
-
199
- it "should close IO" do
200
- expect(@file).to be_closed
201
- end
202
-
203
- end
204
-
205
- describe "when input is String" do
206
- before(:each) do
207
- @input = File.read(CURL_EXAMPLE_OUTPUT_PATH)
208
- @response = WebMock::Response.new(@input)
209
- end
210
-
211
- it "should read status" do
212
- expect(@response.status).to eq([202, "OK"])
213
- end
214
-
215
- it "should read headers" do
216
- expect(@response.headers).to eq({
217
- "Date"=>"Sat, 23 Jan 2010 01:01:05 GMT",
218
- "Content-Type"=>"text/html; charset=UTF-8",
219
- "Content-Length"=>"419",
220
- "Connection"=>"Keep-Alive",
221
- "Accept"=>"image/jpeg, image/png"
222
- })
223
- end
224
-
225
- it "should read body" do
226
- expect(@response.body.size).to eq(419)
227
- end
228
-
229
- it "should work with transfer-encoding set to chunked" do
230
- @input.gsub!("Content-Length: 419", "Transfer-Encoding: chunked")
231
- @response = WebMock::Response.new(@input)
232
- expect(@response.body.size).to eq(419)
233
- end
234
-
235
- end
236
-
237
- describe "with dynamically evaluated options" do
238
-
239
- before(:each) do
240
- @request_signature = WebMock::RequestSignature.new(:post, "www.example.com", body: "abc", headers: {'A' => 'a'})
241
- end
242
-
243
- it "should have evaluated body" do
244
- @response = WebMock::Response.new(body: lambda {|request| request.body})
245
- expect(@response.evaluate(@request_signature).body).to eq("abc")
246
- end
247
-
248
- it "should have evaluated headers" do
249
- @response = WebMock::Response.new(headers: lambda {|request| request.headers})
250
- expect(@response.evaluate(@request_signature).headers).to eq({'A' => 'a'})
251
- end
252
-
253
- it "should have evaluated status" do
254
- @response = WebMock::Response.new(status: lambda {|request| 302})
255
- expect(@response.evaluate(@request_signature).status).to eq([302, ""])
256
- end
257
-
258
- end
259
-
260
- end
261
-
262
- describe WebMock::DynamicResponse do
263
-
264
- describe "evaluating response options" do
265
-
266
- it "should evaluate new response with evaluated options" do
267
- request_signature = WebMock::RequestSignature.new(:post, "www.example.com", body: "abc", headers: {'A' => 'a'})
268
- response = WebMock::DynamicResponse.new(lambda {|request|
269
- {
270
- body: request.body,
271
- headers: request.headers,
272
- status: 302
273
- }
274
- })
275
- evaluated_response = response.evaluate(request_signature)
276
- expect(evaluated_response.body).to eq("abc")
277
- expect(evaluated_response.headers).to eq({'A' => 'a'})
278
- expect(evaluated_response.status).to eq([302, ""])
279
- end
280
-
281
- it "should be equal to static response after evaluation" do
282
- request_signature = WebMock::RequestSignature.new(:post, "www.example.com", body: "abc")
283
- response = WebMock::DynamicResponse.new(lambda {|request| {body: request.body}})
284
- evaluated_response = response.evaluate(request_signature)
285
- expect(evaluated_response).to eq(WebMock::Response.new(body: "abc"))
286
- end
287
-
288
- describe "when raw response is evaluated" do
289
- before(:each) do
290
- @files = {
291
- "www.example.com" => File.new(CURL_EXAMPLE_OUTPUT_PATH)
292
- }
293
- @request_signature = WebMock::RequestSignature.new(:get, "www.example.com")
294
- end
295
-
296
- describe "as a file" do
297
- it "should return response" do
298
- response = WebMock::DynamicResponse.new(lambda {|request| @files[request.uri.host.to_s] })
299
- expect(response.evaluate(@request_signature).body.size).to eq(419)
300
- end
301
- end
302
-
303
- describe "as a string" do
304
- it "should return response" do
305
- response = WebMock::DynamicResponse.new(lambda {|request| @files[request.uri.host.to_s].read })
306
- expect(response.evaluate(@request_signature).body.size).to eq(419)
307
- end
308
- end
309
- end
310
- end
311
-
312
- end
313
-
314
- 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
@@ -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