webmock 3.14.0 → 3.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +213 -3
  3. data/README.md +66 -20
  4. data/lib/webmock/api.rb +2 -0
  5. data/lib/webmock/assertion_failure.rb +2 -0
  6. data/lib/webmock/callback_registry.rb +2 -0
  7. data/lib/webmock/config.rb +2 -0
  8. data/lib/webmock/cucumber.rb +2 -0
  9. data/lib/webmock/deprecation.rb +2 -0
  10. data/lib/webmock/errors.rb +2 -0
  11. data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +16 -4
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +4 -2
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +17 -7
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
  15. data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
  16. data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
  17. data/lib/webmock/http_lib_adapters/http_rb/client.rb +3 -3
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +32 -9
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +10 -2
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +7 -5
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +26 -25
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
  25. data/lib/webmock/http_lib_adapters/net_http.rb +46 -121
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +3 -1
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
  29. data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +5 -1
  35. data/lib/webmock/request_body_diff.rb +2 -0
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +35 -12
  38. data/lib/webmock/request_registry.rb +2 -0
  39. data/lib/webmock/request_signature.rb +4 -2
  40. data/lib/webmock/request_signature_snippet.rb +2 -0
  41. data/lib/webmock/request_stub.rb +34 -0
  42. data/lib/webmock/response.rb +15 -13
  43. data/lib/webmock/responses_sequence.rb +2 -0
  44. data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
  45. data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
  46. data/lib/webmock/rspec/matchers.rb +2 -0
  47. data/lib/webmock/rspec.rb +2 -0
  48. data/lib/webmock/stub_registry.rb +2 -0
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +2 -0
  51. data/lib/webmock/util/hash_counter.rb +12 -6
  52. data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
  53. data/lib/webmock/util/hash_validator.rb +2 -0
  54. data/lib/webmock/util/headers.rb +23 -10
  55. data/lib/webmock/util/parsers/json.rb +72 -0
  56. data/lib/webmock/util/parsers/parse_error.rb +7 -0
  57. data/lib/webmock/util/parsers/xml.rb +16 -0
  58. data/lib/webmock/util/query_mapper.rb +2 -0
  59. data/lib/webmock/util/uri.rb +3 -1
  60. data/lib/webmock/util/values_stringifier.rb +2 -0
  61. data/lib/webmock/util/version_checker.rb +7 -5
  62. data/lib/webmock/version.rb +3 -1
  63. data/lib/webmock/webmock.rb +12 -0
  64. data/lib/webmock.rb +4 -2
  65. metadata +66 -185
  66. data/.gemtest +0 -0
  67. data/.github/workflows/CI.yml +0 -37
  68. data/.gitignore +0 -34
  69. data/.rspec-tm +0 -2
  70. data/Gemfile +0 -9
  71. data/Rakefile +0 -38
  72. data/lib/webmock/util/json.rb +0 -67
  73. data/minitest/test_helper.rb +0 -34
  74. data/minitest/test_webmock.rb +0 -9
  75. data/minitest/webmock_spec.rb +0 -60
  76. data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
  77. data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
  78. data/spec/acceptance/curb/curb_spec.rb +0 -499
  79. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  80. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
  81. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  82. data/spec/acceptance/excon/excon_spec.rb +0 -77
  83. data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
  84. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
  85. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  86. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  87. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  88. data/spec/acceptance/manticore/manticore_spec.rb +0 -107
  89. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  90. data/spec/acceptance/net_http/net_http_shared.rb +0 -153
  91. data/spec/acceptance/net_http/net_http_spec.rb +0 -369
  92. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  93. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  94. data/spec/acceptance/patron/patron_spec.rb +0 -125
  95. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  96. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  97. data/spec/acceptance/shared/callbacks.rb +0 -148
  98. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  99. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  100. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  101. data/spec/acceptance/shared/request_expectations.rb +0 -930
  102. data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
  103. data/spec/acceptance/shared/stubbing_requests.rb +0 -678
  104. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  105. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  106. data/spec/acceptance/webmock_shared.rb +0 -41
  107. data/spec/fixtures/test.txt +0 -1
  108. data/spec/quality_spec.rb +0 -84
  109. data/spec/spec_helper.rb +0 -48
  110. data/spec/support/example_curl_output.txt +0 -22
  111. data/spec/support/failures.rb +0 -9
  112. data/spec/support/my_rack_app.rb +0 -53
  113. data/spec/support/network_connection.rb +0 -19
  114. data/spec/support/webmock_server.rb +0 -70
  115. data/spec/unit/api_spec.rb +0 -175
  116. data/spec/unit/errors_spec.rb +0 -129
  117. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  118. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  119. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  120. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  121. data/spec/unit/rack_response_spec.rb +0 -112
  122. data/spec/unit/request_body_diff_spec.rb +0 -90
  123. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  124. data/spec/unit/request_pattern_spec.rb +0 -736
  125. data/spec/unit/request_registry_spec.rb +0 -95
  126. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  127. data/spec/unit/request_signature_spec.rb +0 -155
  128. data/spec/unit/request_stub_spec.rb +0 -199
  129. data/spec/unit/response_spec.rb +0 -286
  130. data/spec/unit/stub_registry_spec.rb +0 -103
  131. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  132. data/spec/unit/util/hash_counter_spec.rb +0 -39
  133. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  134. data/spec/unit/util/headers_spec.rb +0 -28
  135. data/spec/unit/util/json_spec.rb +0 -33
  136. data/spec/unit/util/query_mapper_spec.rb +0 -157
  137. data/spec/unit/util/uri_spec.rb +0 -371
  138. data/spec/unit/util/version_checker_spec.rb +0 -65
  139. data/spec/unit/webmock_spec.rb +0 -60
  140. data/test/http_request.rb +0 -24
  141. data/test/shared_test.rb +0 -108
  142. data/test/test_helper.rb +0 -23
  143. data/test/test_webmock.rb +0 -12
  144. data/webmock.gemspec +0 -54
@@ -1,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