webmock 3.14.0 → 3.19.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +124 -2
  3. data/README.md +46 -18
  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 +8 -1
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +4 -2
  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 +3 -3
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +3 -1
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +6 -1
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +6 -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 +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 +24 -115
  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 +26 -8
  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 +10 -8
  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 +12 -0
  62. data/lib/webmock.rb +2 -0
  63. metadata +51 -183
  64. data/.gemtest +0 -0
  65. data/.github/workflows/CI.yml +0 -37
  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 -499
  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 -153
  88. data/spec/acceptance/net_http/net_http_spec.rb +0 -369
  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 -125
  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 -736
  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 -155
  125. data/spec/unit/request_stub_spec.rb +0 -199
  126. data/spec/unit/response_spec.rb +0 -286
  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 -60
  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,499 +0,0 @@
1
- require 'spec_helper'
2
- require 'acceptance/webmock_shared'
3
-
4
- unless RUBY_PLATFORM =~ /java/
5
- require 'acceptance/curb/curb_spec_helper'
6
-
7
- shared_examples_for "Curb" do
8
- include CurbSpecHelper
9
-
10
- include_examples "with WebMock"
11
-
12
- describe "when doing PUTs" do
13
- it "should stub them" do
14
- stub_request(:put, "www.example.com").with(body: "01234")
15
- expect(http_request(:put, "http://www.example.com", body: "01234").
16
- status).to eq("200")
17
- end
18
- end
19
- end
20
-
21
- describe "Curb features" do
22
- before(:each) do
23
- WebMock.disable_net_connect!
24
- WebMock.reset!
25
- end
26
-
27
- describe "callbacks" do
28
- before(:each) do
29
- @curl = Curl::Easy.new
30
- @curl.url = "http://example.com"
31
- end
32
-
33
- describe 'on_debug' do
34
- it "should call on_debug" do
35
- stub_request(:any, "example.com").
36
- to_return(status: 200, headers: { 'Server' => 'nginx' }, body: { hello: :world }.to_json)
37
-
38
- test = []
39
-
40
- @curl.on_debug do |message, operation|
41
- test << "#{operation} -> #{message}"
42
- end
43
- @curl.headers['Content-Type'] = 'application/json'
44
- @curl.http_post({ hello: :world }.to_json)
45
-
46
- expect(test).to_not be_empty
47
- end
48
- end
49
-
50
- it "should call on_success with 2xx response" do
51
- body = "on_success fired"
52
- stub_request(:any, "example.com").to_return(body: body)
53
-
54
- test = nil
55
- @curl.on_success do |c|
56
- test = c.body_str
57
- end
58
- @curl.http_get
59
- expect(test).to eq(body)
60
- end
61
-
62
- it "should call on_missing with 4xx response" do
63
- response_code = 403
64
- stub_request(:any, "example.com").
65
- to_return(status: [response_code, "None shall pass"])
66
-
67
- test = nil
68
- @curl.on_missing do |c, code|
69
- test = code
70
- end
71
- @curl.http_get
72
- expect(test).to eq(response_code)
73
- end
74
-
75
- it "should call on_failure with 5xx response" do
76
- response_code = 599
77
- stub_request(:any, "example.com").
78
- to_return(status: [response_code, "Server On Fire"])
79
-
80
- test = nil
81
- @curl.on_failure do |c, code|
82
- test = code
83
- end
84
- @curl.http_get
85
- expect(test).to eq(response_code)
86
- end
87
-
88
- it "should call on_body when response body is read" do
89
- body = "on_body fired"
90
- stub_request(:any, "example.com").
91
- to_return(body: body)
92
-
93
- test = nil
94
- @curl.on_body do |data|
95
- test = data
96
- end
97
- @curl.http_get
98
- expect(test).to eq(body)
99
- end
100
-
101
- it "should call on_body for each chunk with chunked response" do
102
- stub_request(:any, "example.com").
103
- to_return(body: ["first_chunk", "second_chunk"],
104
- headers: {"Transfer-Encoding" => "chunked"})
105
-
106
- test = []
107
- @curl.on_body do |data|
108
- test << data
109
- end
110
- @curl.http_get
111
- expect(test).to eq(["first_chunk", "second_chunk"])
112
- end
113
-
114
- it "should call on_header when response headers are read" do
115
- stub_request(:any, "example.com").
116
- to_return(headers: {one: 1})
117
-
118
- test = []
119
- @curl.on_header do |data|
120
- test << data
121
- end
122
- @curl.http_get
123
- expect(test).to eq([
124
- "HTTP/1.1 200 \r\n",
125
- 'One: 1'
126
- ])
127
- end
128
-
129
- it "should call on_complete when request is complete" do
130
- body = "on_complete fired"
131
- stub_request(:any, "example.com").to_return(body: body)
132
-
133
- test = nil
134
- @curl.on_complete do |curl|
135
- test = curl.body_str
136
- end
137
- @curl.http_get
138
- expect(test).to eq(body)
139
- end
140
-
141
- it "should call on_progress when portion of response body is read" do
142
- stub_request(:any, "example.com").to_return(body: "01234")
143
-
144
- test = nil
145
- @curl.on_progress do |*args|
146
- expect(args.length).to eq(4)
147
- args.each {|arg| expect(arg.is_a?(Float)).to eq(true) }
148
- test = true
149
- end
150
- @curl.http_get
151
- expect(test).to eq(true)
152
- end
153
-
154
- it "should call callbacks in correct order on successful request" do
155
- stub_request(:any, "example.com")
156
- order = []
157
- @curl.on_success {|*args| order << :on_success }
158
- @curl.on_missing {|*args| order << :on_missing }
159
- @curl.on_failure {|*args| order << :on_failure }
160
- @curl.on_header {|*args| order << :on_header }
161
- @curl.on_body {|*args| order << :on_body }
162
- @curl.on_complete {|*args| order << :on_complete }
163
- @curl.on_progress {|*args| order << :on_progress }
164
- @curl.http_get
165
-
166
- expect(order).to eq([:on_progress,:on_header,:on_body,:on_complete,:on_success])
167
- end
168
-
169
- it "should call callbacks in correct order on failed request" do
170
- stub_request(:any, "example.com").to_return(status: [500, ""])
171
- order = []
172
- @curl.on_success {|*args| order << :on_success }
173
- @curl.on_missing {|*args| order << :on_missing }
174
- @curl.on_failure {|*args| order << :on_failure }
175
- @curl.on_header {|*args| order << :on_header }
176
- @curl.on_body {|*args| order << :on_body }
177
- @curl.on_complete {|*args| order << :on_complete }
178
- @curl.on_progress {|*args| order << :on_progress }
179
- @curl.http_get
180
-
181
- expect(order).to eq([:on_progress,:on_header,:on_body,:on_complete,:on_failure])
182
- end
183
-
184
- it "should call callbacks in correct order on missing request" do
185
- stub_request(:any, "example.com").to_return(status: [403, ""])
186
- order = []
187
- @curl.on_success {|*args| order << :on_success }
188
- @curl.on_missing {|*args| order << :on_missing }
189
- @curl.on_failure {|*args| order << :on_failure }
190
- @curl.on_header {|*args| order << :on_header }
191
- @curl.on_body {|*args| order << :on_body }
192
- @curl.on_complete {|*args| order << :on_complete }
193
- @curl.on_progress {|*args| order << :on_progress }
194
- @curl.http_get
195
-
196
- expect(order).to eq([:on_progress,:on_header,:on_body,:on_complete,:on_missing])
197
- end
198
- end
199
-
200
- describe '#last_effective_url' do
201
- before(:each) do
202
- @curl = Curl::Easy.new
203
- @curl.url = "http://example.com"
204
- end
205
-
206
- context 'when not following redirects' do
207
- before { @curl.follow_location = false }
208
-
209
- it 'should be the same as #url even with a location header' do
210
- stub_request(:any, 'example.com').
211
- to_return(body: "abc",
212
- status: 302,
213
- headers: { 'Location' => 'http://www.example.com' })
214
-
215
- @curl.http_get
216
- expect(@curl.last_effective_url).to eq('http://example.com')
217
- end
218
- end
219
-
220
- context 'when following redirects' do
221
- before { @curl.follow_location = true }
222
-
223
- it 'should be the same as #url when no location header is present' do
224
- stub_request(:any, "example.com")
225
- @curl.http_get
226
- expect(@curl.last_effective_url).to eq('http://example.com')
227
- end
228
-
229
- it 'should be the value of the location header when present' do
230
- stub_request(:any, 'example.com').
231
- to_return(headers: { 'Location' => 'http://www.example.com' })
232
- stub_request(:any, 'www.example.com')
233
-
234
- @curl.http_get
235
- expect(@curl.last_effective_url).to eq('http://www.example.com')
236
- end
237
-
238
- it 'should work with more than one redirect' do
239
- stub_request(:any, 'example.com').
240
- to_return(headers: { 'Location' => 'http://www.example.com' })
241
- stub_request(:any, 'www.example.com').
242
- to_return(headers: { 'Location' => 'http://blog.example.com' })
243
- stub_request(:any, 'blog.example.com')
244
-
245
- @curl.http_get
246
- expect(@curl.last_effective_url).to eq('http://blog.example.com')
247
- end
248
-
249
- it 'should maintain the original url' do
250
- stub_request(:any, 'example.com').
251
- to_return(headers: { 'Location' => 'http://www.example.com' })
252
- stub_request(:any, 'www.example.com')
253
-
254
- @curl.http_get
255
- expect(@curl.url).to eq('http://example.com')
256
- end
257
-
258
- it 'should have the redirected-to attrs (body, response code)' do
259
- stub_request(:any, 'example.com').
260
- to_return(body: 'request A',
261
- status: 302,
262
- headers: { 'Location' => 'http://www.example.com' })
263
- stub_request(:any, 'www.example.com').to_return(body: 'request B')
264
-
265
- @curl.http_get
266
- expect(@curl.body_str).to eq('request B')
267
- expect(@curl.response_code).to eq(200)
268
- end
269
-
270
- it 'should follow more than one redirect' do
271
- stub_request(:any, 'example.com').
272
- to_return(headers: { 'Location' => 'http://www.example.com' })
273
- stub_request(:any, 'www.example.com').
274
- to_return(headers: { 'Location' => 'http://blog.example.com' })
275
- stub_request(:any, 'blog.example.com').to_return(body: 'blog post')
276
-
277
- @curl.http_get
278
- expect(@curl.url).to eq('http://example.com')
279
- expect(@curl.body_str).to eq('blog post')
280
- end
281
- end
282
- end
283
-
284
- describe "#content_type" do
285
- before(:each) do
286
- @curl = Curl::Easy.new
287
- @curl.url = "http://example.com"
288
- end
289
-
290
- context "when response includes Content-Type header" do
291
- it "returns correct content_type" do
292
- content_type = "application/json"
293
-
294
- stub_request(:any, 'example.com').
295
- to_return(body: "abc",
296
- status: 200,
297
- headers: { 'Content-Type' => content_type })
298
-
299
- @curl.http_get
300
- expect(@curl.content_type).to eq(content_type)
301
- end
302
- end
303
-
304
- context "when response does not include Content-Type header" do
305
- it "returns nil for content_type" do
306
-
307
- stub_request(:any, 'example.com').
308
- to_return(body: "abc",
309
- status: 200 )
310
-
311
- @curl.http_get
312
- expect(@curl.content_type).to be_nil
313
- end
314
- end
315
- end
316
-
317
- describe "#chunked_response?" do
318
- before(:each) do
319
- @curl = Curl::Easy.new
320
- @curl.url = "http://example.com"
321
- end
322
-
323
- it "is true when Transfer-Encoding is 'chunked' and body responds to each" do
324
- stub_request(:any, 'example.com').
325
- to_return(body: ["abc", "def"],
326
- status: 200,
327
- headers: { 'Transfer-Encoding' => 'chunked' })
328
-
329
- @curl.http_get
330
- expect(@curl).to be_chunked_response
331
- end
332
-
333
- it "is false when Transfer-Encoding is not 'chunked'" do
334
- stub_request(:any, 'example.com').
335
- to_return(body: ["abc", "def"],
336
- status: 200)
337
-
338
- @curl.http_get
339
- expect(@curl).not_to be_chunked_response
340
- end
341
-
342
- it "is false when Transfer-Encoding is 'chunked' but body does not respond to each" do
343
- stub_request(:any, 'example.com').
344
- to_return(body: "abc",
345
- status: 200)
346
-
347
- @curl.http_get
348
- expect(@curl).not_to be_chunked_response
349
- end
350
- end
351
- end
352
-
353
- describe "Webmock with Curb" do
354
- describe "using #http for requests" do
355
- it_should_behave_like "Curb"
356
- include CurbSpecHelper::DynamicHttp
357
-
358
- it "should work with uppercase arguments" do
359
- stub_request(:get, "www.example.com").to_return(body: "abc")
360
-
361
- c = Curl::Easy.new
362
- c.url = "http://www.example.com"
363
- c.http(:GET)
364
- expect(c.body_str).to eq("abc")
365
- end
366
-
367
- it "should alias body to body_str" do
368
- stub_request(:get, "www.example.com").to_return(body: "abc")
369
-
370
- c = Curl::Easy.new
371
- c.url = "http://www.example.com"
372
- c.http(:GET)
373
- expect(c.body).to eq("abc")
374
- end
375
-
376
- it "supports array headers passed to Curl::Easy" do
377
- stub_request(:get, "www.example.com").with(headers: {'X-One' => '1'}).to_return(body: "abc")
378
-
379
- c = Curl::Easy.new
380
- c.url = "http://www.example.com"
381
- c.headers = ["X-One: 1"]
382
- c.http(:GET)
383
- expect(c.body).to eq("abc")
384
- end
385
-
386
- describe 'match request body' do
387
- it 'for post' do
388
- stub_request(:post, "www.example.com").with(body: 'foo=nhe').to_return(body: "abc")
389
-
390
- response = Curl.post("http://www.example.com", {foo: :nhe})
391
- expect(response.body_str).to eq("abc")
392
- end
393
-
394
- it 'for patch' do
395
- stub_request(:patch, "www.example.com").with(body: 'foo=nhe').to_return(body: "abc")
396
-
397
- response = Curl.patch("http://www.example.com", {foo: :nhe})
398
- expect(response.body_str).to eq("abc")
399
- end
400
-
401
- it 'for put' do
402
- stub_request(:put, "www.example.com").with(body: 'foo=nhe').to_return(body: "abc")
403
-
404
- response = Curl.put("http://www.example.com", {foo: :nhe})
405
- expect(response.body_str).to eq("abc")
406
- end
407
- end
408
- end
409
-
410
- describe "using #http_* methods for requests" do
411
- it_should_behave_like "Curb"
412
- include CurbSpecHelper::NamedHttp
413
-
414
- it "should reset @webmock_method after each call" do
415
- stub_request(:post, "www.example.com").with(body: "01234")
416
- c = Curl::Easy.new
417
- c.url = "http://www.example.com"
418
- c.post_body = "01234"
419
- c.http_post
420
- expect {
421
- c.perform
422
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com))
423
- end
424
-
425
- it "should work with blank arguments for post" do
426
- stub_request(:post, "www.example.com").with(body: "01234")
427
- c = Curl::Easy.new
428
- c.url = "http://www.example.com"
429
- c.post_body = "01234"
430
- c.http_post
431
- expect(c.response_code).to eq(200)
432
- end
433
-
434
- it "should work with several body arguments for post using the class method" do
435
- stub_request(:post, "www.example.com").with(body: {user: {first_name: 'Bartosz', last_name: 'Blimke'}})
436
- c = Curl::Easy.http_post "http://www.example.com", 'user[first_name]=Bartosz', 'user[last_name]=Blimke'
437
- expect(c.response_code).to eq(200)
438
- end
439
-
440
- it "should work with blank arguments for put" do
441
- stub_request(:put, "www.example.com").with(body: "01234")
442
- c = Curl::Easy.new
443
- c.url = "http://www.example.com"
444
- c.put_data = "01234"
445
- c.http_put
446
- expect(c.response_code).to eq(200)
447
- end
448
-
449
- it "should work with multiple arguments for post" do
450
- data = { name: "john", address: "111 example ave" }
451
-
452
- stub_request(:post, "www.example.com").with(body: data)
453
- c = Curl::Easy.new
454
- c.url = "http://www.example.com"
455
- c.http_post Curl::PostField.content('name', data[:name]), Curl::PostField.content('address', data[:address])
456
-
457
- expect(c.response_code).to eq(200)
458
- end
459
-
460
- end
461
-
462
- describe "using #perform for requests" do
463
- it_should_behave_like "Curb"
464
- include CurbSpecHelper::Perform
465
- end
466
-
467
- describe "using .http_* methods for requests" do
468
- it_should_behave_like "Curb"
469
- include CurbSpecHelper::ClassNamedHttp
470
- end
471
-
472
- describe "using .perform for requests" do
473
- it_should_behave_like "Curb"
474
- include CurbSpecHelper::ClassPerform
475
- end
476
-
477
- describe "using #reset" do
478
- before do
479
- @curl = Curl::Easy.new
480
- @curl.url = "http://example.com"
481
- stub_request(:any, "example.com").
482
- to_return(body: "abc",
483
- headers: { "Content-Type" => "application/json" })
484
- @curl.http_get
485
- end
486
-
487
- it "should clear all memoized response fields" do
488
- @curl.reset
489
- expect(@curl).to have_attributes(
490
- body_str: nil,
491
- content_type: nil,
492
- header_str: nil,
493
- last_effective_url: nil,
494
- response_code: 0,
495
- )
496
- end
497
- end
498
- end
499
- end
@@ -1,147 +0,0 @@
1
- require 'ostruct'
2
-
3
- module CurbSpecHelper
4
- def http_request(method, uri, options = {}, &block)
5
- uri = Addressable::URI.heuristic_parse(uri)
6
- body = options[:body]
7
-
8
- curl = curb_http_request(uri, method, body, options)
9
-
10
- status, response_headers =
11
- WebMock::HttpLibAdapters::CurbAdapter.parse_header_string(curl.header_str)
12
-
13
- # Deal with the fact that the HTTP spec allows multi-values headers
14
- # to either be a single entry with a comma-separated listed of
15
- # values, or multiple separate entries
16
- response_headers.keys.each do |k|
17
- v = response_headers[k]
18
- if v.is_a?(Array)
19
- response_headers[k] = v.join(', ')
20
- end
21
- end
22
-
23
- OpenStruct.new(
24
- body: curl.body_str,
25
- headers: WebMock::Util::Headers.normalize_headers(response_headers),
26
- status: curl.response_code.to_s,
27
- message: status
28
- )
29
- end
30
-
31
- def setup_request(uri, curl, options={})
32
- curl ||= Curl::Easy.new
33
- curl.url = uri.to_s
34
- if options[:basic_auth]
35
- curl.http_auth_types = :basic
36
- curl.username = options[:basic_auth][0]
37
- curl.password = options[:basic_auth][1]
38
- end
39
- curl.timeout = 30
40
- curl.connect_timeout = 30
41
-
42
- if headers = options[:headers]
43
- headers.each {|k,v| curl.headers[k] = v }
44
- end
45
-
46
- curl
47
- end
48
-
49
- def client_timeout_exception_class
50
- Curl::Err::TimeoutError
51
- end
52
-
53
- def connection_refused_exception_class
54
- Curl::Err::ConnectionFailedError
55
- end
56
-
57
- def http_library
58
- :curb
59
- end
60
-
61
- module DynamicHttp
62
- def curb_http_request(uri, method, body, options)
63
- curl = setup_request(uri, nil, options)
64
-
65
- case method
66
- when :post
67
- curl.post_body = body
68
- when :put
69
- curl.put_data = body
70
- end
71
-
72
- curl.http(method.to_s.upcase)
73
- curl
74
- end
75
- end
76
-
77
- module NamedHttp
78
- def curb_http_request(uri, method, body, options)
79
- curl = setup_request(uri, nil, options)
80
-
81
- case method
82
- when :put, :post
83
- curl.send( "http_#{method}", body )
84
- else
85
- curl.send( "http_#{method}" )
86
- end
87
- curl
88
- end
89
- end
90
-
91
- module Perform
92
- def curb_http_request(uri, method, body, options)
93
- curl = setup_request(uri, nil, options)
94
-
95
- case method
96
- when :post
97
- curl.post_body = body
98
- when :put
99
- curl.put_data = body
100
- when :head
101
- curl.head = true
102
- when :delete
103
- curl.delete = true
104
- end
105
-
106
- curl.perform
107
- curl
108
- end
109
- end
110
-
111
- module ClassNamedHttp
112
- def curb_http_request(uri, method, body, options)
113
- args = ["http_#{method}", uri]
114
- args << body if method == :post || method == :put
115
-
116
- c = Curl::Easy.send(*args) do |curl|
117
- setup_request(uri, curl, options)
118
- end
119
-
120
- c
121
- end
122
- end
123
-
124
- module ClassPerform
125
- def curb_http_request(uri, method, body, options)
126
- args = ["http_#{method}", uri]
127
- args << body if method == :post || method == :put
128
-
129
- c = Curl::Easy.send(*args) do |curl|
130
- setup_request(uri, curl, options)
131
-
132
- case method
133
- when :post
134
- curl.post_body = body
135
- when :put
136
- curl.put_data = body
137
- when :head
138
- curl.head = true
139
- when :delete
140
- curl.delete = true
141
- end
142
- end
143
-
144
- c
145
- end
146
- end
147
- end