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.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +476 -2
  3. data/README.md +166 -42
  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 +228 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +14 -3
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +22 -9
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +5 -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 +4 -1
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +49 -5
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +11 -3
  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 +25 -7
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +35 -15
  25. data/lib/webmock/http_lib_adapters/net_http.rb +59 -112
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +3 -1
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +4 -2
  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 +3 -1
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +118 -61
  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 +22 -14
  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 +4 -1
  48. data/lib/webmock/stub_registry.rb +28 -11
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +3 -3
  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 +6 -2
  59. data/lib/webmock/util/uri.rb +11 -9
  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 +22 -3
  64. data/lib/webmock.rb +5 -2
  65. metadata +99 -175
  66. data/.gemtest +0 -0
  67. data/.gitignore +0 -34
  68. data/.rspec-tm +0 -2
  69. data/.travis.yml +0 -21
  70. data/Gemfile +0 -9
  71. data/Rakefile +0 -30
  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/curb/curb_spec.rb +0 -481
  77. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  78. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -406
  79. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  80. data/spec/acceptance/excon/excon_spec.rb +0 -77
  81. data/spec/acceptance/excon/excon_spec_helper.rb +0 -50
  82. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -82
  83. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  84. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  85. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  86. data/spec/acceptance/manticore/manticore_spec.rb +0 -56
  87. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  88. data/spec/acceptance/net_http/net_http_shared.rb +0 -153
  89. data/spec/acceptance/net_http/net_http_spec.rb +0 -331
  90. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  91. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  92. data/spec/acceptance/patron/patron_spec.rb +0 -125
  93. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  94. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  95. data/spec/acceptance/shared/callbacks.rb +0 -147
  96. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  97. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  98. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  99. data/spec/acceptance/shared/request_expectations.rb +0 -923
  100. data/spec/acceptance/shared/returning_declared_responses.rb +0 -388
  101. data/spec/acceptance/shared/stubbing_requests.rb +0 -638
  102. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  103. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  104. data/spec/acceptance/webmock_shared.rb +0 -41
  105. data/spec/fixtures/test.txt +0 -1
  106. data/spec/quality_spec.rb +0 -84
  107. data/spec/spec_helper.rb +0 -48
  108. data/spec/support/example_curl_output.txt +0 -22
  109. data/spec/support/failures.rb +0 -9
  110. data/spec/support/my_rack_app.rb +0 -53
  111. data/spec/support/network_connection.rb +0 -19
  112. data/spec/support/webmock_server.rb +0 -69
  113. data/spec/unit/api_spec.rb +0 -175
  114. data/spec/unit/errors_spec.rb +0 -129
  115. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  116. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  117. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  118. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  119. data/spec/unit/rack_response_spec.rb +0 -112
  120. data/spec/unit/request_body_diff_spec.rb +0 -90
  121. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  122. data/spec/unit/request_pattern_spec.rb +0 -596
  123. data/spec/unit/request_registry_spec.rb +0 -95
  124. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  125. data/spec/unit/request_signature_spec.rb +0 -155
  126. data/spec/unit/request_stub_spec.rb +0 -199
  127. data/spec/unit/response_spec.rb +0 -282
  128. data/spec/unit/stub_registry_spec.rb +0 -103
  129. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  130. data/spec/unit/util/hash_counter_spec.rb +0 -39
  131. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  132. data/spec/unit/util/headers_spec.rb +0 -28
  133. data/spec/unit/util/json_spec.rb +0 -33
  134. data/spec/unit/util/query_mapper_spec.rb +0 -150
  135. data/spec/unit/util/uri_spec.rb +0 -299
  136. data/spec/unit/util/version_checker_spec.rb +0 -65
  137. data/spec/unit/webmock_spec.rb +0 -11
  138. data/test/http_request.rb +0 -24
  139. data/test/shared_test.rb +0 -108
  140. data/test/test_helper.rb +0 -23
  141. data/test/test_webmock.rb +0 -6
  142. data/webmock.gemspec +0 -46
@@ -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
@@ -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