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