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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +213 -3
- data/README.md +66 -20
- data/lib/webmock/api.rb +2 -0
- data/lib/webmock/assertion_failure.rb +2 -0
- data/lib/webmock/callback_registry.rb +2 -0
- data/lib/webmock/config.rb +2 -0
- data/lib/webmock/cucumber.rb +2 -0
- data/lib/webmock/deprecation.rb +2 -0
- data/lib/webmock/errors.rb +2 -0
- data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +16 -4
- data/lib/webmock/http_lib_adapters/curb_adapter.rb +4 -2
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +17 -7
- data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_rb/client.rb +3 -3
- data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
- data/lib/webmock/http_lib_adapters/http_rb/response.rb +32 -9
- data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +10 -2
- data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
- data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +7 -5
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +26 -25
- data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/net_http.rb +46 -121
- data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +3 -1
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
- data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
- data/lib/webmock/minitest.rb +2 -0
- data/lib/webmock/rack_response.rb +5 -1
- data/lib/webmock/request_body_diff.rb +2 -0
- data/lib/webmock/request_execution_verifier.rb +2 -0
- data/lib/webmock/request_pattern.rb +35 -12
- data/lib/webmock/request_registry.rb +2 -0
- data/lib/webmock/request_signature.rb +4 -2
- data/lib/webmock/request_signature_snippet.rb +2 -0
- data/lib/webmock/request_stub.rb +34 -0
- data/lib/webmock/response.rb +15 -13
- data/lib/webmock/responses_sequence.rb +2 -0
- data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers.rb +2 -0
- data/lib/webmock/rspec.rb +2 -0
- data/lib/webmock/stub_registry.rb +2 -0
- data/lib/webmock/stub_request_snippet.rb +2 -0
- data/lib/webmock/test_unit.rb +2 -0
- data/lib/webmock/util/hash_counter.rb +12 -6
- data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
- data/lib/webmock/util/hash_validator.rb +2 -0
- data/lib/webmock/util/headers.rb +23 -10
- data/lib/webmock/util/parsers/json.rb +72 -0
- data/lib/webmock/util/parsers/parse_error.rb +7 -0
- data/lib/webmock/util/parsers/xml.rb +16 -0
- data/lib/webmock/util/query_mapper.rb +2 -0
- data/lib/webmock/util/uri.rb +3 -1
- data/lib/webmock/util/values_stringifier.rb +2 -0
- data/lib/webmock/util/version_checker.rb +7 -5
- data/lib/webmock/version.rb +3 -1
- data/lib/webmock/webmock.rb +12 -0
- data/lib/webmock.rb +4 -2
- metadata +66 -185
- data/.gemtest +0 -0
- data/.github/workflows/CI.yml +0 -37
- data/.gitignore +0 -34
- data/.rspec-tm +0 -2
- data/Gemfile +0 -9
- data/Rakefile +0 -38
- data/lib/webmock/util/json.rb +0 -67
- data/minitest/test_helper.rb +0 -34
- data/minitest/test_webmock.rb +0 -9
- data/minitest/webmock_spec.rb +0 -60
- data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
- data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
- data/spec/acceptance/curb/curb_spec.rb +0 -499
- data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
- data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
- data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
- data/spec/acceptance/excon/excon_spec.rb +0 -77
- data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
- data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
- data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
- data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
- data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
- data/spec/acceptance/manticore/manticore_spec.rb +0 -107
- data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
- data/spec/acceptance/net_http/net_http_shared.rb +0 -153
- data/spec/acceptance/net_http/net_http_spec.rb +0 -369
- data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
- data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
- data/spec/acceptance/patron/patron_spec.rb +0 -125
- data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
- data/spec/acceptance/shared/callbacks.rb +0 -148
- data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
- data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
- data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
- data/spec/acceptance/shared/request_expectations.rb +0 -930
- data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
- data/spec/acceptance/shared/stubbing_requests.rb +0 -678
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
- data/spec/acceptance/webmock_shared.rb +0 -41
- data/spec/fixtures/test.txt +0 -1
- data/spec/quality_spec.rb +0 -84
- data/spec/spec_helper.rb +0 -48
- data/spec/support/example_curl_output.txt +0 -22
- data/spec/support/failures.rb +0 -9
- data/spec/support/my_rack_app.rb +0 -53
- data/spec/support/network_connection.rb +0 -19
- data/spec/support/webmock_server.rb +0 -70
- data/spec/unit/api_spec.rb +0 -175
- data/spec/unit/errors_spec.rb +0 -129
- data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
- data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
- data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
- data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
- data/spec/unit/rack_response_spec.rb +0 -112
- data/spec/unit/request_body_diff_spec.rb +0 -90
- data/spec/unit/request_execution_verifier_spec.rb +0 -208
- data/spec/unit/request_pattern_spec.rb +0 -736
- data/spec/unit/request_registry_spec.rb +0 -95
- data/spec/unit/request_signature_snippet_spec.rb +0 -89
- data/spec/unit/request_signature_spec.rb +0 -155
- data/spec/unit/request_stub_spec.rb +0 -199
- data/spec/unit/response_spec.rb +0 -286
- data/spec/unit/stub_registry_spec.rb +0 -103
- data/spec/unit/stub_request_snippet_spec.rb +0 -115
- data/spec/unit/util/hash_counter_spec.rb +0 -39
- data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
- data/spec/unit/util/headers_spec.rb +0 -28
- data/spec/unit/util/json_spec.rb +0 -33
- data/spec/unit/util/query_mapper_spec.rb +0 -157
- data/spec/unit/util/uri_spec.rb +0 -371
- data/spec/unit/util/version_checker_spec.rb +0 -65
- data/spec/unit/webmock_spec.rb +0 -60
- data/test/http_request.rb +0 -24
- data/test/shared_test.rb +0 -108
- data/test/test_helper.rb +0 -23
- data/test/test_webmock.rb +0 -12
- data/webmock.gemspec +0 -54
@@ -1,736 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::RequestPattern do
|
4
|
-
|
5
|
-
describe "describing itself" do
|
6
|
-
it "should report string describing itself" do
|
7
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com",
|
8
|
-
body: "abc", headers: {'A' => 'a', 'B' => 'b'}).to_s).to eq(
|
9
|
-
"GET http://www.example.com/ with body \"abc\" with headers {'A'=>'a', 'B'=>'b'}"
|
10
|
-
)
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should report string describing itself with block" do
|
14
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com",
|
15
|
-
body: "abc", headers: {'A' => 'a', 'B' => 'b'}).with {|req| true}.to_s).to eq(
|
16
|
-
"GET http://www.example.com/ with body \"abc\" with headers {'A'=>'a', 'B'=>'b'} with given block"
|
17
|
-
)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should report string describing itself with query params" do
|
21
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/, query: {'a' => ['b', 'c']}).to_s).to eq(
|
22
|
-
"GET /.*example.*/ with query params {\"a\"=>[\"b\", \"c\"]}"
|
23
|
-
)
|
24
|
-
end
|
25
|
-
|
26
|
-
it "should report string describing itself with query params as hash including matcher" do
|
27
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/,
|
28
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({'a' => ['b', 'c']})).to_s).to eq(
|
29
|
-
"GET /.*example.*/ with query params hash_including({\"a\"=>[\"b\", \"c\"]})"
|
30
|
-
)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should report string describing itself with body as hash including matcher" do
|
34
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/,
|
35
|
-
body: WebMock::Matchers::HashIncludingMatcher.new({'a' => ['b', 'c']})).to_s).to eq(
|
36
|
-
"GET /.*example.*/ with body hash_including({\"a\"=>[\"b\", \"c\"]})"
|
37
|
-
)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "with" do
|
42
|
-
before(:each) do
|
43
|
-
@request_pattern =WebMock::RequestPattern.new(:get, "www.example.com")
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should have assigned body pattern" do
|
47
|
-
@request_pattern.with(body: "abc")
|
48
|
-
expect(@request_pattern.to_s).to eq(WebMock::RequestPattern.new(:get, "www.example.com", body: "abc").to_s)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should have assigned normalized headers pattern" do
|
52
|
-
@request_pattern.with(headers: {'A' => 'a'})
|
53
|
-
expect(@request_pattern.to_s).to eq(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'A' => 'a'}).to_s)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should raise an error if options passed to `with` are invalid" do
|
57
|
-
expect { @request_pattern.with(foo: "bar") }.to raise_error('Unknown key: "foo". Valid keys are: "body", "headers", "query", "basic_auth"')
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should raise an error if neither options or block is provided" do
|
61
|
-
expect { @request_pattern.with() }.to raise_error('#with method invoked with no arguments. Either options hash or block must be specified. Created a block with do..end? Try creating it with curly braces {} instead.')
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
|
66
|
-
class WebMock::RequestPattern
|
67
|
-
def match(request_signature)
|
68
|
-
self.matches?(request_signature)
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
describe "when matching" do
|
73
|
-
|
74
|
-
it "should match if uri matches and method matches" do
|
75
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com")).
|
76
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should match if uri matches and method pattern is any" do
|
80
|
-
expect(WebMock::RequestPattern.new(:any, "www.example.com")).
|
81
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should not match if request has different method" do
|
85
|
-
expect(WebMock::RequestPattern.new(:post, "www.example.com")).
|
86
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should match if uri matches request uri" do
|
90
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com")).
|
91
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should match if request has unescaped uri" do
|
95
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com/my%20path")).
|
96
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/my path"))
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should match if request has escaped uri" do
|
100
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com/my path")).
|
101
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/my%20path"))
|
102
|
-
end
|
103
|
-
|
104
|
-
it "should match if uri regexp pattern matches unescaped form of request uri" do
|
105
|
-
expect(WebMock::RequestPattern.new(:get, /.*my path.*/)).
|
106
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/my%20path"))
|
107
|
-
end
|
108
|
-
|
109
|
-
it "should match if uri regexp pattern matches request uri" do
|
110
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/)).
|
111
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should match if uri matches requesst uri as URI object" do
|
115
|
-
expect(WebMock::RequestPattern.new(:get, URI.parse("www.example.com"))).
|
116
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
117
|
-
end
|
118
|
-
|
119
|
-
it "should match if uri proc pattern returning true" do
|
120
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { true })).
|
121
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
122
|
-
end
|
123
|
-
|
124
|
-
it "should not match if uri proc pattern returns false" do
|
125
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { false })).
|
126
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
127
|
-
end
|
128
|
-
|
129
|
-
it "should match if uri Addressable::Template pattern matches unescaped form of request uri" do
|
130
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com/{any_path}"))).
|
131
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/my%20path"))
|
132
|
-
end
|
133
|
-
|
134
|
-
it "should match if uri Addressable::Template pattern matches request uri" do
|
135
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"))).
|
136
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
137
|
-
end
|
138
|
-
|
139
|
-
it "should match if uri Addressable::Template pattern matches request uri without TLD" do
|
140
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("localhost"))).
|
141
|
-
to match(WebMock::RequestSignature.new(:get, "localhost"))
|
142
|
-
end
|
143
|
-
|
144
|
-
it "should match if Addressable::Template pattern that has ip address host matches request uri" do
|
145
|
-
signature = WebMock::RequestSignature.new(:get, "127.0.0.1:3000/1234")
|
146
|
-
uri = Addressable::Template.new("127.0.0.1:3000/{id}")
|
147
|
-
expect(WebMock::RequestPattern.new(:get, uri)).to match(signature)
|
148
|
-
end
|
149
|
-
|
150
|
-
it "should match if Addressable::Template pattern that has ip address host without port matches request uri" do
|
151
|
-
signature = WebMock::RequestSignature.new(:get, "127.0.0.1/1234")
|
152
|
-
uri = Addressable::Template.new("127.0.0.1/{id}")
|
153
|
-
expect(WebMock::RequestPattern.new(:get, uri)).to match(signature)
|
154
|
-
end
|
155
|
-
|
156
|
-
it "should match if Addressable::Template pattern host matches request uri" do
|
157
|
-
signature = WebMock::RequestSignature.new(:get, "www.example.com")
|
158
|
-
uri = Addressable::Template.new("{subdomain}.example.com")
|
159
|
-
expect(WebMock::RequestPattern.new(:get, uri)).to match(signature)
|
160
|
-
end
|
161
|
-
|
162
|
-
it "should not match if Addressable::Template pattern host does not match request uri" do
|
163
|
-
signature = WebMock::RequestSignature.new(:get, "www.bad-example.com")
|
164
|
-
uri = Addressable::Template.new("{subdomain}.example.com")
|
165
|
-
expect(WebMock::RequestPattern.new(:get, uri)).not_to match(signature)
|
166
|
-
end
|
167
|
-
|
168
|
-
it "should match if uri Addressable::Template pattern matches request uri without a schema and a path " do
|
169
|
-
signature = WebMock::RequestSignature.new(:get, "127.0.0.1:3000")
|
170
|
-
uri = Addressable::Template.new("127.0.0.1:3000")
|
171
|
-
expect(WebMock::RequestPattern.new(:get, uri)).to match(signature)
|
172
|
-
end
|
173
|
-
|
174
|
-
it "should match for uris with same parameters as pattern" do
|
175
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com?a=1&b=2")).
|
176
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a=1&b=2"))
|
177
|
-
end
|
178
|
-
|
179
|
-
it "should not match for uris with different parameters" do
|
180
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com?a=1&b=2")).
|
181
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a=2&b=1"))
|
182
|
-
end
|
183
|
-
|
184
|
-
it "should match for uri parameters in different order" do
|
185
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com?b=2&a=1")).
|
186
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a=1&b=2"))
|
187
|
-
end
|
188
|
-
|
189
|
-
describe "when parameters are escaped" do
|
190
|
-
|
191
|
-
it "should match if uri pattern has escaped parameters and request has unescaped parameters" do
|
192
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com/?a=a%20b")).
|
193
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a b"))
|
194
|
-
end
|
195
|
-
|
196
|
-
it "should match if uri pattern has unescaped parameters and request has escaped parameters" do
|
197
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com/?a=a b")).
|
198
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a%20b"))
|
199
|
-
end
|
200
|
-
|
201
|
-
it "should match if uri regexp pattern matches uri with unescaped parameters and request has escaped parameters" do
|
202
|
-
expect(WebMock::RequestPattern.new(:get, /.*a=a b.*/)).
|
203
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a%20b"))
|
204
|
-
end
|
205
|
-
|
206
|
-
it "should match if uri regexp pattern matches uri with escaped parameters and request has unescaped parameters" do
|
207
|
-
expect(WebMock::RequestPattern.new(:get, /.*a=a%20b.*/)).
|
208
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a b"))
|
209
|
-
end
|
210
|
-
|
211
|
-
it "should match if uri Addressable::Template pattern matches uri without parameter value and request has escaped parameters" do
|
212
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com/{?a}"))).
|
213
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a%20b"))
|
214
|
-
end
|
215
|
-
|
216
|
-
it "should match if uri Addressable::Template pattern matches uri without parameter value and request has unescaped parameters" do
|
217
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com/{?a}"))).
|
218
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a b"))
|
219
|
-
end
|
220
|
-
|
221
|
-
it "should match if uri Addressable::Template pattern matches uri with unescaped parameter value and request has unescaped parameters" do
|
222
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com/?a=a b"))).
|
223
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a b"))
|
224
|
-
end
|
225
|
-
|
226
|
-
it "should match if uri Addressable::Template pattern matches uri with escaped parameter value and request has escaped parameters" do
|
227
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com/?a=a%20b"))).
|
228
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?a=a%20b"))
|
229
|
-
end
|
230
|
-
|
231
|
-
end
|
232
|
-
|
233
|
-
describe "when matching requests on query params" do
|
234
|
-
|
235
|
-
describe "when uri is described as regexp" do
|
236
|
-
it "should match request query params" do
|
237
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/, query: {"a" => ["b", "c"]})).
|
238
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
239
|
-
end
|
240
|
-
|
241
|
-
it "should not match request query params if params don't match" do
|
242
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/, query: {"x" => ["b", "c"]})).
|
243
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
244
|
-
end
|
245
|
-
|
246
|
-
it "should match when query params are declared as HashIncluding matcher matching params" do
|
247
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/,
|
248
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
249
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
250
|
-
end
|
251
|
-
|
252
|
-
it "should not match when query params are declared as HashIncluding matcher not matching params" do
|
253
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/,
|
254
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"x" => ["b", "c"]}))).
|
255
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
256
|
-
end
|
257
|
-
|
258
|
-
it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
|
259
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/,
|
260
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
261
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
262
|
-
end
|
263
|
-
|
264
|
-
it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
|
265
|
-
expect(WebMock::RequestPattern.new(:get, /.*example.*/,
|
266
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "d"]}))).
|
267
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
268
|
-
end
|
269
|
-
end
|
270
|
-
|
271
|
-
describe "when uri is described as URI" do
|
272
|
-
it "should match request query params" do
|
273
|
-
expect(WebMock::RequestPattern.new(:get, URI.parse("www.example.com"), query: {"a" => ["b", "c"]})).
|
274
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
275
|
-
end
|
276
|
-
|
277
|
-
it "should not match request query params if params don't match" do
|
278
|
-
expect(WebMock::RequestPattern.new(:get, URI.parse("www.example.com"), query: {"x" => ["b", "c"]})).
|
279
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
280
|
-
end
|
281
|
-
|
282
|
-
it "should match when query params are declared as HashIncluding matcher matching params" do
|
283
|
-
expect(WebMock::RequestPattern.new(:get, URI.parse("www.example.com"),
|
284
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
285
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
286
|
-
end
|
287
|
-
|
288
|
-
it "should not match when query params are declared as HashIncluding matcher not matching params" do
|
289
|
-
expect(WebMock::RequestPattern.new(:get, URI.parse("www.example.com"),
|
290
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"x" => ["b", "c"]}))).
|
291
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
292
|
-
end
|
293
|
-
|
294
|
-
it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
|
295
|
-
expect(WebMock::RequestPattern.new(:get, URI.parse("www.example.com"),
|
296
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
297
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
298
|
-
end
|
299
|
-
|
300
|
-
it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
|
301
|
-
expect(WebMock::RequestPattern.new(:get, URI.parse("www.example.com"),
|
302
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "d"]}))).
|
303
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
describe "when uri is described as a proc" do
|
308
|
-
it "should match request query params" do
|
309
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { true }, query: {"a" => ["b", "c"]})).
|
310
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
311
|
-
end
|
312
|
-
|
313
|
-
it "should not match request query params if params don't match" do
|
314
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { true }, query: {"x" => ["b", "c"]})).
|
315
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
316
|
-
end
|
317
|
-
|
318
|
-
it "should match when query params are declared as HashIncluding matcher matching params" do
|
319
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
320
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
321
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
322
|
-
end
|
323
|
-
|
324
|
-
it "should not match when query params are declared as HashIncluding matcher not matching params" do
|
325
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
326
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"x" => ["b", "c"]}))).
|
327
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
328
|
-
end
|
329
|
-
|
330
|
-
it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
|
331
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
332
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
333
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
334
|
-
end
|
335
|
-
|
336
|
-
it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
|
337
|
-
expect(WebMock::RequestPattern.new(:get, ->(uri) { true },
|
338
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "d"]}))).
|
339
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
340
|
-
end
|
341
|
-
end
|
342
|
-
|
343
|
-
describe "when uri is described as Addressable::Template" do
|
344
|
-
it "should raise error if query params are specified" do
|
345
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"), query: {"a" => ["b", "c"]})).
|
346
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
347
|
-
end
|
348
|
-
|
349
|
-
it "should not match request query params if params don't match" do
|
350
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"), query: {"x" => ["b", "c"]})).
|
351
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
352
|
-
end
|
353
|
-
|
354
|
-
it "should match when query params are declared as HashIncluding matcher matching params" do
|
355
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"),
|
356
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
357
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
358
|
-
end
|
359
|
-
|
360
|
-
it "should not match when query params are declared as HashIncluding matcher not matching params" do
|
361
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"),
|
362
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"x" => ["b", "c"]}))).
|
363
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
364
|
-
end
|
365
|
-
|
366
|
-
it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
|
367
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"),
|
368
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
369
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
370
|
-
end
|
371
|
-
|
372
|
-
it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
|
373
|
-
expect(WebMock::RequestPattern.new(:get, Addressable::Template.new("www.example.com"),
|
374
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "d"]}))).
|
375
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
376
|
-
end
|
377
|
-
end
|
378
|
-
|
379
|
-
describe "when uri is described as string" do
|
380
|
-
it "should match when query params are the same as declared in hash" do
|
381
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", query: {"a" => ["b", "c"]})).
|
382
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
383
|
-
end
|
384
|
-
|
385
|
-
it "should not match when query params are different than the declared in hash" do
|
386
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", query: {"a" => ["b", "c"]})).
|
387
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?x[]=b&a[]=c"))
|
388
|
-
end
|
389
|
-
|
390
|
-
it "should match when query params are the same as declared as string" do
|
391
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", query: "a[]=b&a[]=c")).
|
392
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
|
393
|
-
end
|
394
|
-
|
395
|
-
it "should match when query params are the same as declared both in query option or url" do
|
396
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com/?x=3", query: "a[]=b&a[]=c")).
|
397
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com/?x=3&a[]=b&a[]=c"))
|
398
|
-
end
|
399
|
-
|
400
|
-
it "should match when query params are declared as HashIncluding matcher matching params" do
|
401
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com",
|
402
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
403
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
404
|
-
end
|
405
|
-
|
406
|
-
it "should not match when query params are declared as HashIncluding matcher not matching params" do
|
407
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com",
|
408
|
-
query: WebMock::Matchers::HashIncludingMatcher.new({"x" => ["b", "c"]}))).
|
409
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
410
|
-
end
|
411
|
-
|
412
|
-
it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
|
413
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com",
|
414
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "c"]}))).
|
415
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
416
|
-
end
|
417
|
-
|
418
|
-
it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
|
419
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com",
|
420
|
-
query: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({"a" => ["b", "d"]}))).
|
421
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c&b=1"))
|
422
|
-
end
|
423
|
-
|
424
|
-
context "when using query values notation as flat array" do
|
425
|
-
before :all do
|
426
|
-
WebMock::Config.instance.query_values_notation = :flat_array
|
427
|
-
end
|
428
|
-
|
429
|
-
it "should not match when repeated query params are not the same as declared as string" do
|
430
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", query: "a=b&a=c")).
|
431
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com?a=b&a=c"))
|
432
|
-
end
|
433
|
-
|
434
|
-
after :all do
|
435
|
-
WebMock::Config.instance.query_values_notation = nil
|
436
|
-
end
|
437
|
-
end
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
|
-
describe "when matching requests with body" do
|
442
|
-
|
443
|
-
it "should match if request body and body pattern are the same" do
|
444
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", body: "abc")).
|
445
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))
|
446
|
-
end
|
447
|
-
|
448
|
-
it "should match if request body matches regexp" do
|
449
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", body: /^abc$/)).
|
450
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))
|
451
|
-
end
|
452
|
-
|
453
|
-
it "should not match if body pattern is different than request body" do
|
454
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", body: "def")).
|
455
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))
|
456
|
-
end
|
457
|
-
|
458
|
-
it "should not match if request body doesn't match regexp pattern" do
|
459
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", body: /^abc$/)).
|
460
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", body: "xabc"))
|
461
|
-
end
|
462
|
-
|
463
|
-
it "should match if pattern doesn't have specified body" do
|
464
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com")).
|
465
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))
|
466
|
-
end
|
467
|
-
|
468
|
-
it "should not match if pattern has body specified as nil but request body is not empty" do
|
469
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", body: nil)).
|
470
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))
|
471
|
-
end
|
472
|
-
|
473
|
-
it "should not match if pattern has empty body but request body is not empty" do
|
474
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", body: "")).
|
475
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))
|
476
|
-
end
|
477
|
-
|
478
|
-
it "should not match if pattern has body specified but request has no body" do
|
479
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", body: "abc")).
|
480
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
481
|
-
end
|
482
|
-
|
483
|
-
describe "when body in pattern is declared as a hash" do
|
484
|
-
let(:body_hash) { {:a => '1', :b => 'five', 'c' => {'d' => ['e', 'f']}} }
|
485
|
-
|
486
|
-
describe "for request with url encoded body" do
|
487
|
-
it "should match when hash matches body" do
|
488
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
489
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'a=1&c[d][]=e&c[d][]=f&b=five'))
|
490
|
-
end
|
491
|
-
|
492
|
-
it "should match when hash matches body in different order of params" do
|
493
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
494
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'a=1&c[d][]=e&b=five&c[d][]=f'))
|
495
|
-
end
|
496
|
-
|
497
|
-
it "should not match when hash doesn't match url encoded body" do
|
498
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
499
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'c[d][]=f&a=1&c[d][]=e'))
|
500
|
-
end
|
501
|
-
|
502
|
-
it "should not match when body is not url encoded" do
|
503
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
504
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'foo bar'))
|
505
|
-
end
|
506
|
-
|
507
|
-
it "should match when hash contains regex values" do
|
508
|
-
expect(WebMock::RequestPattern.new(:post, "www.example.com", body: {a: /^\w{5}$/, b: {c: /^\d{3}$/}})).
|
509
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'a=abcde&b[c]=123'))
|
510
|
-
end
|
511
|
-
|
512
|
-
it "should not match when hash does not contains regex values" do
|
513
|
-
expect(WebMock::RequestPattern.new(:post, "www.example.com", body: {a: /^\d+$/, b: {c: /^\d{3}$/}})).
|
514
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'a=abcde&b[c]=123'))
|
515
|
-
end
|
516
|
-
|
517
|
-
context 'body is an hash with an array of hashes' do
|
518
|
-
let(:body_hash) { {a: [{'b' => '1'}, {'b' => '2'}]} }
|
519
|
-
|
520
|
-
it "should match when hash matches body" do
|
521
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
522
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'a[][b]=1&a[][b]=2'))
|
523
|
-
end
|
524
|
-
end
|
525
|
-
|
526
|
-
context 'body is an hash with an array of hashes with multiple keys' do
|
527
|
-
let(:body_hash) { {a: [{'b' => '1', 'a' => '2'}, {'b' => '3'}]} }
|
528
|
-
|
529
|
-
it "should match when hash matches body" do
|
530
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
531
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", body: 'a[][b]=1&a[][a]=2&a[][b]=3'))
|
532
|
-
end
|
533
|
-
end
|
534
|
-
end
|
535
|
-
|
536
|
-
describe "for request with json body and content type is set to json" do
|
537
|
-
shared_examples "a json body" do
|
538
|
-
it "should match when hash matches body" do
|
539
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
540
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", headers: {content_type: content_type},
|
541
|
-
body: "{\"a\":\"1\",\"c\":{\"d\":[\"e\",\"f\"]},\"b\":\"five\"}"))
|
542
|
-
end
|
543
|
-
|
544
|
-
it "should match if hash matches body in different form" do
|
545
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
546
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", headers: {content_type: content_type},
|
547
|
-
body: "{\"a\":\"1\",\"b\":\"five\",\"c\":{\"d\":[\"e\",\"f\"]}}"))
|
548
|
-
end
|
549
|
-
|
550
|
-
it "should not match when body is not json" do
|
551
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
552
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
|
553
|
-
headers: {content_type: content_type}, body: "foo bar"))
|
554
|
-
end
|
555
|
-
|
556
|
-
it "should not match if request body is different" do
|
557
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: {a: 1, b: 2})).
|
558
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
|
559
|
-
headers: {content_type: content_type}, body: "{\"a\":1,\"c\":null}"))
|
560
|
-
end
|
561
|
-
|
562
|
-
it "should not match if request body is has less params than pattern" do
|
563
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: {a: 1, b: 2})).
|
564
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
|
565
|
-
headers: {content_type: content_type}, body: "{\"a\":1}"))
|
566
|
-
end
|
567
|
-
|
568
|
-
it "should not match if request body is has more params than pattern" do
|
569
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: {a: 1})).
|
570
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
|
571
|
-
headers: {content_type: content_type}, body: "{\"a\":1,\"c\":1}"))
|
572
|
-
end
|
573
|
-
end
|
574
|
-
|
575
|
-
context "standard application/json" do
|
576
|
-
let(:content_type) { 'application/json' }
|
577
|
-
it_behaves_like "a json body"
|
578
|
-
end
|
579
|
-
|
580
|
-
context "custom json content type" do
|
581
|
-
let(:content_type) { 'application/vnd.api+json' }
|
582
|
-
it_behaves_like "a json body"
|
583
|
-
end
|
584
|
-
end
|
585
|
-
|
586
|
-
describe "for request with xml body and content type is set to xml" do
|
587
|
-
let(:body_hash) { {"opt" => {:a => '1', :b => 'five', 'c' => {'d' => ['e', 'f']}}} }
|
588
|
-
|
589
|
-
shared_examples "a xml body" do
|
590
|
-
it "should match when hash matches body" do
|
591
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
592
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", headers: {content_type: content_type},
|
593
|
-
body: "<opt a=\"1\" b=\"five\">\n <c>\n <d>e</d>\n <d>f</d>\n </c>\n</opt>\n"))
|
594
|
-
end
|
595
|
-
|
596
|
-
it "should match if hash matches body in different form" do
|
597
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
598
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", headers: {content_type: content_type},
|
599
|
-
body: "<opt b=\"five\" a=\"1\">\n <c>\n <d>e</d>\n <d>f</d>\n </c>\n</opt>\n"))
|
600
|
-
end
|
601
|
-
|
602
|
-
it "should not match when body is not xml" do
|
603
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
604
|
-
not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
|
605
|
-
headers: {content_type: content_type}, body: "foo bar"))
|
606
|
-
end
|
607
|
-
|
608
|
-
it "matches when the content type include a charset" do
|
609
|
-
expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
|
610
|
-
to match(WebMock::RequestSignature.new(:post, "www.example.com", headers: {content_type: "#{content_type};charset=UTF-8"},
|
611
|
-
body: "<opt a=\"1\" b=\"five\">\n <c>\n <d>e</d>\n <d>f</d>\n </c>\n</opt>\n"))
|
612
|
-
|
613
|
-
end
|
614
|
-
end
|
615
|
-
|
616
|
-
context "standard application/xml" do
|
617
|
-
let(:content_type) { 'application/xml' }
|
618
|
-
it_behaves_like "a xml body"
|
619
|
-
end
|
620
|
-
|
621
|
-
context "custom xml content type" do
|
622
|
-
let(:content_type) { 'application/atom+xml' }
|
623
|
-
it_behaves_like "a xml body"
|
624
|
-
end
|
625
|
-
end
|
626
|
-
end
|
627
|
-
|
628
|
-
describe "when body in a pattern is declared as a partial hash matcher" do
|
629
|
-
let(:signature) { WebMock::RequestSignature.new(:post, "www.example.com", body: 'a=1&c[d][]=e&c[d][]=f&b=five') }
|
630
|
-
|
631
|
-
it "should match when query params are declared as HashIncluding matcher matching params" do
|
632
|
-
expect(WebMock::RequestPattern.new(:post, "www.example.com",
|
633
|
-
body: WebMock::Matchers::HashIncludingMatcher.new({:a => '1', 'c' => {'d' => ['e', 'f']}}))).
|
634
|
-
to match(signature)
|
635
|
-
end
|
636
|
-
|
637
|
-
it "should not match when query params are declared as HashIncluding matcher not matching params" do
|
638
|
-
expect(WebMock::RequestPattern.new(:post, "www.example.com",
|
639
|
-
body: WebMock::Matchers::HashIncludingMatcher.new({:x => '1', 'c' => {'d' => ['e', 'f']}}))).
|
640
|
-
not_to match(signature)
|
641
|
-
end
|
642
|
-
|
643
|
-
it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
|
644
|
-
expect(WebMock::RequestPattern.new(:post, "www.example.com",
|
645
|
-
body: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({:a => '1', 'c' => {'d' => ['e', 'f']}}))).
|
646
|
-
to match(signature)
|
647
|
-
end
|
648
|
-
|
649
|
-
it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
|
650
|
-
expect(WebMock::RequestPattern.new(:post, "www.example.com",
|
651
|
-
body: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({:x => '1', 'c' => {'d' => ['e', 'f']}}))).
|
652
|
-
not_to match(signature)
|
653
|
-
end
|
654
|
-
end
|
655
|
-
end
|
656
|
-
|
657
|
-
it "should match if pattern and request have the same headers" do
|
658
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'})).
|
659
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
|
660
|
-
end
|
661
|
-
|
662
|
-
it "should match if pattern headers values are regexps matching request header values" do
|
663
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => %r{^image/jpeg$}})).
|
664
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
|
665
|
-
end
|
666
|
-
|
667
|
-
it "should not match if pattern has different value of header than request" do
|
668
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/png'})).
|
669
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
|
670
|
-
end
|
671
|
-
|
672
|
-
it "should not match if pattern header value regexp doesn't match request header value" do
|
673
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => %r{^image\/jpeg$}})).
|
674
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpegx'}))
|
675
|
-
end
|
676
|
-
|
677
|
-
it "should match if request has more headers than request pattern" do
|
678
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'})).
|
679
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg', 'Content-Length' => '8888'}))
|
680
|
-
end
|
681
|
-
|
682
|
-
it "should not match if request has less headers than the request pattern" do
|
683
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg', 'Content-Length' => '8888'})).
|
684
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
|
685
|
-
end
|
686
|
-
|
687
|
-
it "should match even is header keys are declared in different form" do
|
688
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'ContentLength' => '8888', 'Content-type' => 'image/png'})).
|
689
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {:ContentLength => 8888, 'content_type' => 'image/png'}))
|
690
|
-
end
|
691
|
-
|
692
|
-
it "should match is pattern doesn't have specified headers" do
|
693
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com")).
|
694
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}))
|
695
|
-
end
|
696
|
-
|
697
|
-
it "should not match if pattern has nil headers but request has headers" do
|
698
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: nil)).
|
699
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}))
|
700
|
-
end
|
701
|
-
|
702
|
-
it "should not match if pattern has empty headers but request has headers" do
|
703
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {})).
|
704
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}))
|
705
|
-
end
|
706
|
-
|
707
|
-
it "should not match if pattern has specified headers but request has nil headers" do
|
708
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'A'=>'a'})).
|
709
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
710
|
-
end
|
711
|
-
|
712
|
-
it "should not match if pattern has specified headers but request has empty headers" do
|
713
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'A'=>'a'})).
|
714
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {}))
|
715
|
-
end
|
716
|
-
|
717
|
-
it "should match if block given in pattern evaluates request to true" do
|
718
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com").with { |request| true }).
|
719
|
-
to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
720
|
-
end
|
721
|
-
|
722
|
-
it "should not match if block given in pattrn evaluates request to false" do
|
723
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com").with { |request| false }).
|
724
|
-
not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
|
725
|
-
end
|
726
|
-
|
727
|
-
it "should yield block with request signature" do
|
728
|
-
signature = WebMock::RequestSignature.new(:get, "www.example.com")
|
729
|
-
expect(WebMock::RequestPattern.new(:get, "www.example.com").with { |request| request == signature }).
|
730
|
-
to match(signature)
|
731
|
-
end
|
732
|
-
|
733
|
-
end
|
734
|
-
|
735
|
-
|
736
|
-
end
|