webmock 3.0.1 → 3.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/CI.yml +38 -0
- data/CHANGELOG.md +496 -2
- data/Gemfile +1 -1
- data/README.md +169 -34
- data/Rakefile +12 -4
- data/lib/webmock/api.rb +12 -0
- data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +221 -0
- data/lib/webmock/http_lib_adapters/curb_adapter.rb +19 -5
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +7 -4
- data/lib/webmock/http_lib_adapters/excon_adapter.rb +5 -2
- data/lib/webmock/http_lib_adapters/http_rb/client.rb +2 -1
- data/lib/webmock/http_lib_adapters/http_rb/request.rb +7 -1
- data/lib/webmock/http_lib_adapters/http_rb/response.rb +27 -3
- data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +9 -3
- data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +7 -3
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +28 -9
- data/lib/webmock/http_lib_adapters/manticore_adapter.rb +33 -15
- data/lib/webmock/http_lib_adapters/net_http.rb +36 -89
- data/lib/webmock/http_lib_adapters/net_http_response.rb +1 -1
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +4 -4
- data/lib/webmock/matchers/any_arg_matcher.rb +13 -0
- data/lib/webmock/matchers/hash_argument_matcher.rb +21 -0
- data/lib/webmock/matchers/hash_excluding_matcher.rb +15 -0
- data/lib/webmock/matchers/hash_including_matcher.rb +4 -23
- data/lib/webmock/rack_response.rb +1 -1
- data/lib/webmock/request_body_diff.rb +1 -1
- data/lib/webmock/request_execution_verifier.rb +2 -3
- data/lib/webmock/request_pattern.rb +129 -51
- data/lib/webmock/request_registry.rb +1 -1
- data/lib/webmock/request_signature.rb +3 -3
- data/lib/webmock/request_signature_snippet.rb +4 -4
- data/lib/webmock/request_stub.rb +15 -0
- data/lib/webmock/response.rb +19 -13
- data/lib/webmock/rspec.rb +10 -3
- data/lib/webmock/stub_registry.rb +26 -11
- data/lib/webmock/stub_request_snippet.rb +10 -6
- data/lib/webmock/test_unit.rb +1 -3
- data/lib/webmock/util/hash_counter.rb +3 -3
- data/lib/webmock/util/headers.rb +17 -2
- data/lib/webmock/util/json.rb +1 -2
- data/lib/webmock/util/query_mapper.rb +9 -7
- data/lib/webmock/util/uri.rb +10 -10
- data/lib/webmock/util/values_stringifier.rb +20 -0
- data/lib/webmock/version.rb +1 -1
- data/lib/webmock/webmock.rb +20 -3
- data/lib/webmock.rb +53 -48
- data/minitest/webmock_spec.rb +3 -3
- data/spec/acceptance/async_http_client/async_http_client_spec.rb +375 -0
- data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +73 -0
- data/spec/acceptance/curb/curb_spec.rb +44 -0
- data/spec/acceptance/em_http_request/em_http_request_spec.rb +57 -1
- data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +2 -2
- data/spec/acceptance/excon/excon_spec.rb +4 -2
- data/spec/acceptance/excon/excon_spec_helper.rb +2 -0
- data/spec/acceptance/http_rb/http_rb_spec.rb +20 -0
- data/spec/acceptance/http_rb/http_rb_spec_helper.rb +5 -2
- data/spec/acceptance/httpclient/httpclient_spec.rb +8 -1
- data/spec/acceptance/manticore/manticore_spec.rb +51 -0
- data/spec/acceptance/net_http/net_http_shared.rb +47 -10
- data/spec/acceptance/net_http/net_http_spec.rb +102 -24
- data/spec/acceptance/net_http/real_net_http_spec.rb +1 -1
- data/spec/acceptance/patron/patron_spec.rb +26 -21
- data/spec/acceptance/patron/patron_spec_helper.rb +3 -3
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +14 -14
- data/spec/acceptance/shared/callbacks.rb +3 -2
- data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +1 -1
- data/spec/acceptance/shared/request_expectations.rb +14 -0
- data/spec/acceptance/shared/returning_declared_responses.rb +36 -15
- data/spec/acceptance/shared/stubbing_requests.rb +95 -0
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +1 -1
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +1 -1
- data/spec/support/webmock_server.rb +1 -0
- data/spec/unit/api_spec.rb +103 -3
- data/spec/unit/matchers/hash_excluding_matcher_spec.rb +61 -0
- data/spec/unit/request_execution_verifier_spec.rb +12 -12
- data/spec/unit/request_pattern_spec.rb +207 -49
- data/spec/unit/request_signature_snippet_spec.rb +2 -2
- data/spec/unit/request_signature_spec.rb +21 -1
- data/spec/unit/request_stub_spec.rb +35 -0
- data/spec/unit/response_spec.rb +51 -19
- data/spec/unit/stub_request_snippet_spec.rb +30 -10
- data/spec/unit/util/query_mapper_spec.rb +13 -0
- data/spec/unit/util/uri_spec.rb +74 -2
- data/spec/unit/webmock_spec.rb +108 -5
- data/test/shared_test.rb +15 -2
- data/test/test_webmock.rb +6 -0
- data/webmock.gemspec +15 -7
- metadata +86 -37
- data/.travis.yml +0 -20
|
@@ -63,6 +63,16 @@ shared_examples_for "stubbing requests" do |*adapter_info|
|
|
|
63
63
|
stub_request(:get, "www.example.com").with(query: hash_including({"a" => ["b", "c"]})).to_return(body: "abc")
|
|
64
64
|
expect(http_request(:get, "http://www.example.com/?a[]=b&a[]=c&b=1").body).to eq("abc")
|
|
65
65
|
end
|
|
66
|
+
|
|
67
|
+
it 'should return stubbed response when stub expects exclude part of query params' do
|
|
68
|
+
stub_request(:get, 'www.example.com').with(query: hash_excluding(a: ['b', 'c'])).to_return(body: 'abc')
|
|
69
|
+
expect(http_request(:get, 'http://www.example.com/?a[]=c&a[]=d&b=1').body).to eq('abc')
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should return stubbed response when stub expects an empty array" do
|
|
73
|
+
stub_request(:get, 'www.example.com').with(query: { a: [] }).to_return(body: 'abc')
|
|
74
|
+
expect(http_request(:get, 'http://www.example.com/?a[]').body).to eq('abc')
|
|
75
|
+
end
|
|
66
76
|
end
|
|
67
77
|
|
|
68
78
|
describe "based on method" do
|
|
@@ -150,6 +160,32 @@ shared_examples_for "stubbing requests" do |*adapter_info|
|
|
|
150
160
|
body: 'c[d][]=f&a=1&c[d][]=e')
|
|
151
161
|
}.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: POST http://www.example.com/ with body 'c\[d\]\[\]=f&a=1&c\[d\]\[\]=e'))
|
|
152
162
|
end
|
|
163
|
+
|
|
164
|
+
describe "for request with form url encoded body and content type" do
|
|
165
|
+
it "should match if stubbed request body hash has string values matching string values in request body" do
|
|
166
|
+
WebMock.reset!
|
|
167
|
+
stub_request(:post, "www.example.com").with(body: {"foo" => '1'})
|
|
168
|
+
expect(http_request(
|
|
169
|
+
:post, "http://www.example.com/", headers: {'Content-Type' => 'application/x-www-form-urlencoded'},
|
|
170
|
+
body: "foo=1").status).to eq("200")
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "should match if stubbed request body hash has NON string values matching string values in request body" do
|
|
174
|
+
WebMock.reset!
|
|
175
|
+
stub_request(:post, "www.example.com").with(body: {"foo" => 1})
|
|
176
|
+
expect(http_request(
|
|
177
|
+
:post, "http://www.example.com/", headers: {'Content-Type' => 'application/x-www-form-urlencoded'},
|
|
178
|
+
body: "foo=1").status).to eq("200")
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "should match if stubbed request body is hash_included" do
|
|
182
|
+
WebMock.reset!
|
|
183
|
+
stub_request(:post, "www.example.com").with(body: {"foo" => hash_including("bar" => '1')})
|
|
184
|
+
expect(http_request(
|
|
185
|
+
:post, "http://www.example.com/", headers: {'Content-Type' => 'application/x-www-form-urlencoded'},
|
|
186
|
+
body: "foo[bar]=1").status).to eq("200")
|
|
187
|
+
end
|
|
188
|
+
end
|
|
153
189
|
end
|
|
154
190
|
|
|
155
191
|
|
|
@@ -182,6 +218,30 @@ shared_examples_for "stubbing requests" do |*adapter_info|
|
|
|
182
218
|
:post, "http://www.example.com/", headers: {'Content-Type' => 'application/json'},
|
|
183
219
|
body: "{\"foo\":\"a b c\"}").status).to eq("200")
|
|
184
220
|
end
|
|
221
|
+
|
|
222
|
+
it "should match if stubbed request body hash has NON string values matching NON string values in request body" do
|
|
223
|
+
WebMock.reset!
|
|
224
|
+
stub_request(:post, "www.example.com").with(body: {"foo" => 1})
|
|
225
|
+
expect(http_request(
|
|
226
|
+
:post, "http://www.example.com/", headers: {'Content-Type' => 'application/json'},
|
|
227
|
+
body: "{\"foo\":1}").status).to eq("200")
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
it "should not match if stubbed request body hash has string values matching NON string values in request body" do
|
|
231
|
+
WebMock.reset!
|
|
232
|
+
stub_request(:post, "www.example.com").with(body: {"foo" => '1'})
|
|
233
|
+
expect{http_request(
|
|
234
|
+
:post, "http://www.example.com/", headers: {'Content-Type' => 'application/json'},
|
|
235
|
+
body: "{\"foo\":1}") }.to raise_error(WebMock::NetConnectNotAllowedError)
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "should not match if stubbed request body hash has NON string values matching string values in request body" do
|
|
239
|
+
WebMock.reset!
|
|
240
|
+
stub_request(:post, "www.example.com").with(body: {"foo" => 1})
|
|
241
|
+
expect{http_request(
|
|
242
|
+
:post, "http://www.example.com/", headers: {'Content-Type' => 'application/json'},
|
|
243
|
+
body: "{\"foo\":\"1\"}") }.to raise_error(WebMock::NetConnectNotAllowedError)
|
|
244
|
+
end
|
|
185
245
|
end
|
|
186
246
|
|
|
187
247
|
describe "for request with xml body and content type is set to xml" do
|
|
@@ -533,6 +593,23 @@ shared_examples_for "stubbing requests" do |*adapter_info|
|
|
|
533
593
|
end
|
|
534
594
|
end
|
|
535
595
|
end
|
|
596
|
+
|
|
597
|
+
context "when global stub should be invoked last" do
|
|
598
|
+
before do
|
|
599
|
+
WebMock.globally_stub_request(:after_local_stubs) do
|
|
600
|
+
{ body: "global stub body" }
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
|
|
604
|
+
it "uses global stub when non-global stub is not defined" do
|
|
605
|
+
expect(http_request(:get, "http://www.example.com/").body).to eq("global stub body")
|
|
606
|
+
end
|
|
607
|
+
|
|
608
|
+
it "uses non-global stub first" do
|
|
609
|
+
stub_request(:get, "www.example.com").to_return(body: 'non-global stub body')
|
|
610
|
+
expect(http_request(:get, "http://www.example.com/").body).to eq("non-global stub body")
|
|
611
|
+
end
|
|
612
|
+
end
|
|
536
613
|
end
|
|
537
614
|
|
|
538
615
|
describe "when stubbing request with a block evaluated on request" do
|
|
@@ -580,4 +657,22 @@ shared_examples_for "stubbing requests" do |*adapter_info|
|
|
|
580
657
|
}.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
|
|
581
658
|
end
|
|
582
659
|
end
|
|
660
|
+
|
|
661
|
+
describe "in Rspec around(:each) hook" do
|
|
662
|
+
# order goes
|
|
663
|
+
# around(:each)
|
|
664
|
+
# before(:each)
|
|
665
|
+
# after(:each)
|
|
666
|
+
# anything after example.run in around(:each)
|
|
667
|
+
around(:each) do |example|
|
|
668
|
+
example.run
|
|
669
|
+
expect {
|
|
670
|
+
http_request(:get, "http://www.example.com/")
|
|
671
|
+
}.to_not raise_error # WebMock::NetConnectNotAllowedError
|
|
672
|
+
end
|
|
673
|
+
|
|
674
|
+
it "should still allow me to make a mocked request" do
|
|
675
|
+
stub_request(:get, "www.example.com")
|
|
676
|
+
end
|
|
677
|
+
end
|
|
583
678
|
end
|
|
@@ -6,7 +6,7 @@ module TyphoeusHydraSpecHelper
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def http_request(method, uri, options = {}, &block)
|
|
9
|
-
uri.gsub
|
|
9
|
+
uri = uri.gsub(" ", "%20") #typhoeus doesn't like spaces in the uri
|
|
10
10
|
request_options = {
|
|
11
11
|
method: method,
|
|
12
12
|
body: options[:body],
|
data/spec/unit/api_spec.rb
CHANGED
|
@@ -2,9 +2,8 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe WebMock::API do
|
|
4
4
|
describe '#hash_including' do
|
|
5
|
-
|
|
6
5
|
subject { klass.new.hash_including(args) }
|
|
7
|
-
let(:args) { {data: :one} }
|
|
6
|
+
let(:args) { { data: :one } }
|
|
8
7
|
|
|
9
8
|
context 'when mixed into a class that does not define `hash_including`' do
|
|
10
9
|
let(:klass) do
|
|
@@ -54,7 +53,7 @@ describe WebMock::API do
|
|
|
54
53
|
|
|
55
54
|
|
|
56
55
|
context 'when mixed into a class with a parent that defines `hash_including`' do
|
|
57
|
-
subject {klass.new.hash_including(*args)}
|
|
56
|
+
subject { klass.new.hash_including(*args) }
|
|
58
57
|
let(:args) { %w(:foo, :bar, {:data => :one}) }
|
|
59
58
|
let(:klass) do
|
|
60
59
|
Class.new(
|
|
@@ -70,6 +69,107 @@ describe WebMock::API do
|
|
|
70
69
|
expect(subject).to eq(args)
|
|
71
70
|
end
|
|
72
71
|
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#hash_excluding' do
|
|
75
|
+
subject { klass.new.hash_excluding(args) }
|
|
76
|
+
let(:args) { { data: :one } }
|
|
77
|
+
|
|
78
|
+
context 'when mixed into a class that does not define `hash_including`' do
|
|
79
|
+
let(:klass) do
|
|
80
|
+
Class.new do
|
|
81
|
+
include WebMock::API
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'uses WebMock::Matchers::HashIncludingMatcher' do
|
|
86
|
+
expect(subject).to be_a(WebMock::Matchers::HashExcludingMatcher)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# by testing equality for HashIncludingMatcher (which stringifies the passed hash) we are
|
|
90
|
+
# testing HashIncludingMatcher.initialize behavior as well
|
|
91
|
+
context 'when args correspond to an hash' do
|
|
92
|
+
context 'creates "HashExcludingMatcher"' do
|
|
93
|
+
it 'equals hash with similar key but different value' do
|
|
94
|
+
expect(subject).to eq('data' => :two)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'equals hash with similar value but different key' do
|
|
98
|
+
expect(subject).to eq('data2' => :one)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'equals hash with defferent value and key' do
|
|
102
|
+
expect(subject).to eq('data2' => :two)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'not equals with similar value and key' do
|
|
106
|
+
expect(subject).not_to eq('data' => :one)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context 'when args are one or many keys' do
|
|
112
|
+
subject { klass.new.hash_excluding(:foo, :bar) }
|
|
113
|
+
let(:anything) { WebMock::Matchers::AnyArgMatcher.new(nil) }
|
|
114
|
+
|
|
115
|
+
it "creates 'HashExcludingMatcher' with keys anythingized" do
|
|
116
|
+
expect(subject).not_to eq('foo' => anything, 'bar' => anything )
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
context 'when args are both keys and key/value pairs' do
|
|
121
|
+
subject { klass.new.hash_excluding(:foo, :bar, data: :one) }
|
|
122
|
+
let(:anything) { WebMock::Matchers::AnyArgMatcher.new(nil) }
|
|
123
|
+
|
|
124
|
+
it 'creates "HashExcludingMatcher" with keys anythingized' do
|
|
125
|
+
expect(subject).not_to eq('foo' => anything, 'bar' => anything, 'data' => :one)
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
context 'when args are an empty hash' do
|
|
130
|
+
subject { klass.new.hash_excluding({}) }
|
|
131
|
+
|
|
132
|
+
it 'creates "HashExcludingMatcher" with an empty hash' do
|
|
133
|
+
expect(subject).to eq({})
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
context 'when mixed into a class with a parent that defines `hash_excluding`' do
|
|
139
|
+
subject { klass.new.hash_excluding(*args) }
|
|
140
|
+
let(:args) { %w(:foo, :bar, {:data => :one}) }
|
|
141
|
+
let(:klass) do
|
|
142
|
+
Class.new(
|
|
143
|
+
Class.new do
|
|
144
|
+
def hash_excluding(*args)
|
|
145
|
+
args
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
) { include WebMock::API }
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it 'uses super and passes the args untampered' do
|
|
152
|
+
expect(subject).to eq(args)
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
describe '#reset_executed_requests!' do
|
|
158
|
+
subject { WebMock::API.reset_executed_requests! }
|
|
159
|
+
|
|
160
|
+
let(:request_signature) { WebMock::RequestSignature.new(:get, "www.example.com") }
|
|
161
|
+
let(:request_pattern) { WebMock::RequestPattern.new(:get, "www.example.com") }
|
|
73
162
|
|
|
163
|
+
before do
|
|
164
|
+
WebMock::RequestRegistry.instance.requested_signatures.put(request_signature)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it 'resets request registry counter' do
|
|
168
|
+
expect{
|
|
169
|
+
subject
|
|
170
|
+
}.to change{
|
|
171
|
+
WebMock::RequestRegistry.instance.times_executed(request_pattern)
|
|
172
|
+
}.from(1).to(0)
|
|
173
|
+
end
|
|
74
174
|
end
|
|
75
175
|
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module WebMock
|
|
4
|
+
module Matchers
|
|
5
|
+
describe HashExcludingMatcher do
|
|
6
|
+
it 'stringifies the given hash keys' do
|
|
7
|
+
expect(HashExcludingMatcher.new(a: 1, b: 2)).not_to eq('a' => 1, 'b' => 2)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it 'sorts elements in the hash' do
|
|
11
|
+
expect(HashExcludingMatcher.new(b: 2, a: 1)).not_to eq('a' => 1, 'b' => 2)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'describes itself properly' do
|
|
15
|
+
expect(HashExcludingMatcher.new(a: 1).inspect).to eq 'hash_excluding({"a"=>1})'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe 'success' do
|
|
19
|
+
it 'match with hash with a missing key' do
|
|
20
|
+
expect(HashExcludingMatcher.new(a: 1)).to eq('b' => 2)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'match an empty hash with a given key' do
|
|
24
|
+
expect(HashExcludingMatcher.new(a: 1)).to eq({})
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'match when values are nil but keys are different' do
|
|
28
|
+
expect(HashExcludingMatcher.new(a: nil)).to eq('b' => nil)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
describe 'when matching an empty hash' do
|
|
32
|
+
it 'does not matches against any hash' do
|
|
33
|
+
expect(HashExcludingMatcher.new({})).to eq(a: 1, b: 2, c: 3)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe 'failing' do
|
|
39
|
+
it 'does not match a hash with a one missing key when one pair is matching' do
|
|
40
|
+
expect(HashExcludingMatcher.new(a: 1, b: 2)).not_to eq('b' => 2)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'match a hash with an incorrect value' do
|
|
44
|
+
expect(HashExcludingMatcher.new(a: 1, b: 2)).not_to eq('a' => 1, 'b' => 3)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'does not matches the same hash' do
|
|
48
|
+
expect(HashExcludingMatcher.new('a' => 1, 'b' => 2)).not_to eq('a' => 1, 'b' => 2)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'does not matches a hash with extra stuff' do
|
|
52
|
+
expect(HashExcludingMatcher.new(a: 1)).not_to eq('a' => 1, 'b' => 2)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'does not match a non-hash' do
|
|
56
|
+
expect(HashExcludingMatcher.new(a: 1)).not_to eq 1
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -53,7 +53,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
53
53
|
@verifier.times_executed = 0
|
|
54
54
|
@verifier.expected_times_executed = 2
|
|
55
55
|
expected_text = "The request www.example.com was expected to execute 2 times but it executed 0 times"
|
|
56
|
-
expected_text
|
|
56
|
+
expected_text += @executed_requests_info
|
|
57
57
|
expect(@verifier.failure_message).to eq(expected_text)
|
|
58
58
|
end
|
|
59
59
|
|
|
@@ -61,7 +61,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
61
61
|
@verifier.times_executed = 1
|
|
62
62
|
@verifier.expected_times_executed = 1
|
|
63
63
|
expected_text = "The request www.example.com was expected to execute 1 time but it executed 1 time"
|
|
64
|
-
expected_text
|
|
64
|
+
expected_text += @executed_requests_info
|
|
65
65
|
expect(@verifier.failure_message).to eq(expected_text)
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -70,7 +70,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
70
70
|
@verifier.times_executed = 1
|
|
71
71
|
@verifier.at_least_times_executed = 2
|
|
72
72
|
expected_text = "The request www.example.com was expected to execute at least 2 times but it executed 1 time"
|
|
73
|
-
expected_text
|
|
73
|
+
expected_text += @executed_requests_info
|
|
74
74
|
expect(@verifier.failure_message).to eq(expected_text)
|
|
75
75
|
end
|
|
76
76
|
|
|
@@ -78,7 +78,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
78
78
|
@verifier.times_executed = 2
|
|
79
79
|
@verifier.at_least_times_executed = 3
|
|
80
80
|
expected_text = "The request www.example.com was expected to execute at least 3 times but it executed 2 times"
|
|
81
|
-
expected_text
|
|
81
|
+
expected_text += @executed_requests_info
|
|
82
82
|
expect(@verifier.failure_message).to eq(expected_text)
|
|
83
83
|
end
|
|
84
84
|
end
|
|
@@ -88,7 +88,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
88
88
|
@verifier.times_executed = 3
|
|
89
89
|
@verifier.at_most_times_executed = 2
|
|
90
90
|
expected_text = "The request www.example.com was expected to execute at most 2 times but it executed 3 times"
|
|
91
|
-
expected_text
|
|
91
|
+
expected_text += @executed_requests_info
|
|
92
92
|
expect(@verifier.failure_message).to eq(expected_text)
|
|
93
93
|
end
|
|
94
94
|
|
|
@@ -96,7 +96,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
96
96
|
@verifier.times_executed = 2
|
|
97
97
|
@verifier.at_most_times_executed = 1
|
|
98
98
|
expected_text = "The request www.example.com was expected to execute at most 1 time but it executed 2 times"
|
|
99
|
-
expected_text
|
|
99
|
+
expected_text += @executed_requests_info
|
|
100
100
|
expect(@verifier.failure_message).to eq(expected_text)
|
|
101
101
|
end
|
|
102
102
|
end
|
|
@@ -108,14 +108,14 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
108
108
|
@verifier.times_executed = 2
|
|
109
109
|
@verifier.expected_times_executed = 2
|
|
110
110
|
expected_text = "The request www.example.com was not expected to execute 2 times but it executed 2 times"
|
|
111
|
-
expected_text
|
|
111
|
+
expected_text += @executed_requests_info
|
|
112
112
|
expect(@verifier.failure_message_when_negated).to eq(expected_text)
|
|
113
113
|
end
|
|
114
114
|
|
|
115
115
|
it "reports failure message when not expected request but it executed" do
|
|
116
116
|
@verifier.times_executed = 1
|
|
117
117
|
expected_text = "The request www.example.com was not expected to execute but it executed 1 time"
|
|
118
|
-
expected_text
|
|
118
|
+
expected_text += @executed_requests_info
|
|
119
119
|
expect(@verifier.failure_message_when_negated).to eq(expected_text)
|
|
120
120
|
end
|
|
121
121
|
|
|
@@ -124,7 +124,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
124
124
|
@verifier.times_executed = 3
|
|
125
125
|
@verifier.at_least_times_executed = 2
|
|
126
126
|
expected_text = "The request www.example.com was not expected to execute at least 2 times but it executed 3 times"
|
|
127
|
-
expected_text
|
|
127
|
+
expected_text += @executed_requests_info
|
|
128
128
|
expect(@verifier.failure_message_when_negated).to eq(expected_text)
|
|
129
129
|
end
|
|
130
130
|
|
|
@@ -132,7 +132,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
132
132
|
@verifier.times_executed = 2
|
|
133
133
|
@verifier.at_least_times_executed = 2
|
|
134
134
|
expected_text = "The request www.example.com was not expected to execute at least 2 times but it executed 2 times"
|
|
135
|
-
expected_text
|
|
135
|
+
expected_text += @executed_requests_info
|
|
136
136
|
expect(@verifier.failure_message_when_negated).to eq(expected_text)
|
|
137
137
|
end
|
|
138
138
|
end
|
|
@@ -142,7 +142,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
142
142
|
@verifier.times_executed = 2
|
|
143
143
|
@verifier.at_most_times_executed = 3
|
|
144
144
|
expected_text = "The request www.example.com was not expected to execute at most 3 times but it executed 2 times"
|
|
145
|
-
expected_text
|
|
145
|
+
expected_text += @executed_requests_info
|
|
146
146
|
expect(@verifier.failure_message_when_negated).to eq(expected_text)
|
|
147
147
|
end
|
|
148
148
|
|
|
@@ -150,7 +150,7 @@ describe WebMock::RequestExecutionVerifier do
|
|
|
150
150
|
@verifier.times_executed = 1
|
|
151
151
|
@verifier.at_most_times_executed = 2
|
|
152
152
|
expected_text = "The request www.example.com was not expected to execute at most 2 times but it executed 1 time"
|
|
153
|
-
expected_text
|
|
153
|
+
expected_text += @executed_requests_info
|
|
154
154
|
expect(@verifier.failure_message_when_negated).to eq(expected_text)
|
|
155
155
|
end
|
|
156
156
|
end
|