webmock 3.18.1 → 3.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +34 -15
  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 +2 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +2 -0
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +14 -6
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
  15. data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
  16. data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
  17. data/lib/webmock/http_lib_adapters/http_rb/client.rb +2 -0
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +3 -1
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +2 -0
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +2 -0
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +2 -0
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +2 -0
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +2 -0
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
  25. data/lib/webmock/http_lib_adapters/net_http.rb +2 -0
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +2 -0
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +2 -0
  29. data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +2 -0
  35. data/lib/webmock/request_body_diff.rb +2 -0
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +3 -1
  38. data/lib/webmock/request_registry.rb +2 -0
  39. data/lib/webmock/request_signature.rb +2 -0
  40. data/lib/webmock/request_signature_snippet.rb +2 -0
  41. data/lib/webmock/request_stub.rb +7 -1
  42. data/lib/webmock/response.rb +2 -0
  43. data/lib/webmock/responses_sequence.rb +2 -0
  44. data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
  45. data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
  46. data/lib/webmock/rspec/matchers.rb +2 -0
  47. data/lib/webmock/rspec.rb +2 -0
  48. data/lib/webmock/stub_registry.rb +2 -0
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +2 -0
  51. data/lib/webmock/util/hash_counter.rb +12 -6
  52. data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
  53. data/lib/webmock/util/hash_validator.rb +2 -0
  54. data/lib/webmock/util/headers.rb +22 -8
  55. data/lib/webmock/util/json.rb +2 -0
  56. data/lib/webmock/util/query_mapper.rb +2 -0
  57. data/lib/webmock/util/uri.rb +3 -1
  58. data/lib/webmock/util/values_stringifier.rb +2 -0
  59. data/lib/webmock/util/version_checker.rb +7 -5
  60. data/lib/webmock/version.rb +3 -1
  61. data/lib/webmock/webmock.rb +2 -0
  62. data/lib/webmock.rb +2 -0
  63. metadata +36 -168
  64. data/.gemtest +0 -0
  65. data/.github/workflows/CI.yml +0 -38
  66. data/.gitignore +0 -34
  67. data/.rspec-tm +0 -2
  68. data/Gemfile +0 -9
  69. data/Rakefile +0 -38
  70. data/minitest/test_helper.rb +0 -34
  71. data/minitest/test_webmock.rb +0 -9
  72. data/minitest/webmock_spec.rb +0 -60
  73. data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
  74. data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
  75. data/spec/acceptance/curb/curb_spec.rb +0 -510
  76. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  77. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
  78. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  79. data/spec/acceptance/excon/excon_spec.rb +0 -77
  80. data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
  81. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
  82. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  83. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  84. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  85. data/spec/acceptance/manticore/manticore_spec.rb +0 -107
  86. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  87. data/spec/acceptance/net_http/net_http_shared.rb +0 -190
  88. data/spec/acceptance/net_http/net_http_spec.rb +0 -395
  89. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  90. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  91. data/spec/acceptance/patron/patron_spec.rb +0 -123
  92. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  93. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  94. data/spec/acceptance/shared/callbacks.rb +0 -148
  95. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  96. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  97. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  98. data/spec/acceptance/shared/request_expectations.rb +0 -930
  99. data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
  100. data/spec/acceptance/shared/stubbing_requests.rb +0 -678
  101. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  102. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  103. data/spec/acceptance/webmock_shared.rb +0 -41
  104. data/spec/fixtures/test.txt +0 -1
  105. data/spec/quality_spec.rb +0 -84
  106. data/spec/spec_helper.rb +0 -48
  107. data/spec/support/example_curl_output.txt +0 -22
  108. data/spec/support/failures.rb +0 -9
  109. data/spec/support/my_rack_app.rb +0 -53
  110. data/spec/support/network_connection.rb +0 -19
  111. data/spec/support/webmock_server.rb +0 -70
  112. data/spec/unit/api_spec.rb +0 -175
  113. data/spec/unit/errors_spec.rb +0 -129
  114. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  115. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  116. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  117. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  118. data/spec/unit/rack_response_spec.rb +0 -112
  119. data/spec/unit/request_body_diff_spec.rb +0 -90
  120. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  121. data/spec/unit/request_pattern_spec.rb +0 -748
  122. data/spec/unit/request_registry_spec.rb +0 -95
  123. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  124. data/spec/unit/request_signature_spec.rb +0 -175
  125. data/spec/unit/request_stub_spec.rb +0 -234
  126. data/spec/unit/response_spec.rb +0 -314
  127. data/spec/unit/stub_registry_spec.rb +0 -103
  128. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  129. data/spec/unit/util/hash_counter_spec.rb +0 -39
  130. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  131. data/spec/unit/util/headers_spec.rb +0 -28
  132. data/spec/unit/util/json_spec.rb +0 -33
  133. data/spec/unit/util/query_mapper_spec.rb +0 -157
  134. data/spec/unit/util/uri_spec.rb +0 -371
  135. data/spec/unit/util/version_checker_spec.rb +0 -65
  136. data/spec/unit/webmock_spec.rb +0 -114
  137. data/test/http_request.rb +0 -24
  138. data/test/shared_test.rb +0 -108
  139. data/test/test_helper.rb +0 -23
  140. data/test/test_webmock.rb +0 -12
  141. data/webmock.gemspec +0 -54
@@ -1,748 +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 match if the request body has a top level array" do
551
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: [{a: 1}])).
552
- to match(WebMock::RequestSignature.new(:post, "www.example.com",
553
- headers: {content_type: content_type}, body: "[{\"a\":1}]"))
554
- end
555
-
556
- it "should not match if the request body has a different top level array" do
557
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: ["a", "b"])).
558
- not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
559
- headers: {content_type: content_type}, body: "[\"a\", \"c\"]"))
560
- end
561
-
562
- it "should not match when body is not json" do
563
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
564
- not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
565
- headers: {content_type: content_type}, body: "foo bar"))
566
- end
567
-
568
- it "should not match if request body is different" do
569
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: {a: 1, b: 2})).
570
- not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
571
- headers: {content_type: content_type}, body: "{\"a\":1,\"c\":null}"))
572
- end
573
-
574
- it "should not match if request body is has less params than pattern" do
575
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: {a: 1, b: 2})).
576
- not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
577
- headers: {content_type: content_type}, body: "{\"a\":1}"))
578
- end
579
-
580
- it "should not match if request body is has more params than pattern" do
581
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: {a: 1})).
582
- not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
583
- headers: {content_type: content_type}, body: "{\"a\":1,\"c\":1}"))
584
- end
585
- end
586
-
587
- context "standard application/json" do
588
- let(:content_type) { 'application/json' }
589
- it_behaves_like "a json body"
590
- end
591
-
592
- context "custom json content type" do
593
- let(:content_type) { 'application/vnd.api+json' }
594
- it_behaves_like "a json body"
595
- end
596
- end
597
-
598
- describe "for request with xml body and content type is set to xml" do
599
- let(:body_hash) { {"opt" => {:a => '1', :b => 'five', 'c' => {'d' => ['e', 'f']}}} }
600
-
601
- shared_examples "a xml body" do
602
- it "should match when hash matches body" do
603
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
604
- to match(WebMock::RequestSignature.new(:post, "www.example.com", headers: {content_type: content_type},
605
- body: "<opt a=\"1\" b=\"five\">\n <c>\n <d>e</d>\n <d>f</d>\n </c>\n</opt>\n"))
606
- end
607
-
608
- it "should match if hash matches body in different form" 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},
611
- body: "<opt b=\"five\" a=\"1\">\n <c>\n <d>e</d>\n <d>f</d>\n </c>\n</opt>\n"))
612
- end
613
-
614
- it "should not match when body is not xml" do
615
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
616
- not_to match(WebMock::RequestSignature.new(:post, "www.example.com",
617
- headers: {content_type: content_type}, body: "foo bar"))
618
- end
619
-
620
- it "matches when the content type include a charset" do
621
- expect(WebMock::RequestPattern.new(:post, 'www.example.com', body: body_hash)).
622
- to match(WebMock::RequestSignature.new(:post, "www.example.com", headers: {content_type: "#{content_type};charset=UTF-8"},
623
- body: "<opt a=\"1\" b=\"five\">\n <c>\n <d>e</d>\n <d>f</d>\n </c>\n</opt>\n"))
624
-
625
- end
626
- end
627
-
628
- context "standard application/xml" do
629
- let(:content_type) { 'application/xml' }
630
- it_behaves_like "a xml body"
631
- end
632
-
633
- context "custom xml content type" do
634
- let(:content_type) { 'application/atom+xml' }
635
- it_behaves_like "a xml body"
636
- end
637
- end
638
- end
639
-
640
- describe "when body in a pattern is declared as a partial hash matcher" do
641
- let(:signature) { WebMock::RequestSignature.new(:post, "www.example.com", body: 'a=1&c[d][]=e&c[d][]=f&b=five') }
642
-
643
- it "should match when query params are declared as HashIncluding matcher matching params" do
644
- expect(WebMock::RequestPattern.new(:post, "www.example.com",
645
- body: WebMock::Matchers::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 HashIncluding matcher not matching params" do
650
- expect(WebMock::RequestPattern.new(:post, "www.example.com",
651
- body: WebMock::Matchers::HashIncludingMatcher.new({:x => '1', 'c' => {'d' => ['e', 'f']}}))).
652
- not_to match(signature)
653
- end
654
-
655
- it "should match when query params are declared as RSpec HashIncluding matcher matching params" do
656
- expect(WebMock::RequestPattern.new(:post, "www.example.com",
657
- body: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({:a => '1', 'c' => {'d' => ['e', 'f']}}))).
658
- to match(signature)
659
- end
660
-
661
- it "should not match when query params are declared as RSpec HashIncluding matcher not matching params" do
662
- expect(WebMock::RequestPattern.new(:post, "www.example.com",
663
- body: RSpec::Mocks::ArgumentMatchers::HashIncludingMatcher.new({:x => '1', 'c' => {'d' => ['e', 'f']}}))).
664
- not_to match(signature)
665
- end
666
- end
667
- end
668
-
669
- it "should match if pattern and request have the same headers" do
670
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'})).
671
- to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
672
- end
673
-
674
- it "should match if pattern headers values are regexps matching request header values" do
675
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => %r{^image/jpeg$}})).
676
- to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
677
- end
678
-
679
- it "should not match if pattern has different value of header than request" do
680
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/png'})).
681
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
682
- end
683
-
684
- it "should not match if pattern header value regexp doesn't match request header value" do
685
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => %r{^image\/jpeg$}})).
686
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpegx'}))
687
- end
688
-
689
- it "should match if request has more headers than request pattern" do
690
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'})).
691
- to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg', 'Content-Length' => '8888'}))
692
- end
693
-
694
- it "should not match if request has less headers than the request pattern" do
695
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg', 'Content-Length' => '8888'})).
696
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'Content-Type' => 'image/jpeg'}))
697
- end
698
-
699
- it "should match even is header keys are declared in different form" do
700
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'ContentLength' => '8888', 'Content-type' => 'image/png'})).
701
- to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {:ContentLength => 8888, 'content_type' => 'image/png'}))
702
- end
703
-
704
- it "should match is pattern doesn't have specified headers" do
705
- expect(WebMock::RequestPattern.new(:get, "www.example.com")).
706
- to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}))
707
- end
708
-
709
- it "should not match if pattern has nil headers but request has headers" do
710
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: nil)).
711
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}))
712
- end
713
-
714
- it "should not match if pattern has empty headers but request has headers" do
715
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {})).
716
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}))
717
- end
718
-
719
- it "should not match if pattern has specified headers but request has nil headers" do
720
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'A'=>'a'})).
721
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
722
- end
723
-
724
- it "should not match if pattern has specified headers but request has empty headers" do
725
- expect(WebMock::RequestPattern.new(:get, "www.example.com", headers: {'A'=>'a'})).
726
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com", headers: {}))
727
- end
728
-
729
- it "should match if block given in pattern evaluates request to true" do
730
- expect(WebMock::RequestPattern.new(:get, "www.example.com").with { |request| true }).
731
- to match(WebMock::RequestSignature.new(:get, "www.example.com"))
732
- end
733
-
734
- it "should not match if block given in pattrn evaluates request to false" do
735
- expect(WebMock::RequestPattern.new(:get, "www.example.com").with { |request| false }).
736
- not_to match(WebMock::RequestSignature.new(:get, "www.example.com"))
737
- end
738
-
739
- it "should yield block with request signature" do
740
- signature = WebMock::RequestSignature.new(:get, "www.example.com")
741
- expect(WebMock::RequestPattern.new(:get, "www.example.com").with { |request| request == signature }).
742
- to match(signature)
743
- end
744
-
745
- end
746
-
747
-
748
- end