webmock 3.14.0 → 3.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +213 -3
- data/README.md +66 -20
- data/lib/webmock/api.rb +2 -0
- data/lib/webmock/assertion_failure.rb +2 -0
- data/lib/webmock/callback_registry.rb +2 -0
- data/lib/webmock/config.rb +2 -0
- data/lib/webmock/cucumber.rb +2 -0
- data/lib/webmock/deprecation.rb +2 -0
- data/lib/webmock/errors.rb +2 -0
- data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +16 -4
- data/lib/webmock/http_lib_adapters/curb_adapter.rb +4 -2
- data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +17 -7
- data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
- data/lib/webmock/http_lib_adapters/http_rb/client.rb +3 -3
- data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
- data/lib/webmock/http_lib_adapters/http_rb/response.rb +32 -9
- data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +10 -2
- data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
- data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +7 -5
- data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +26 -25
- data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
- data/lib/webmock/http_lib_adapters/net_http.rb +46 -121
- data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
- data/lib/webmock/http_lib_adapters/patron_adapter.rb +3 -1
- data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
- data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
- data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
- data/lib/webmock/minitest.rb +2 -0
- data/lib/webmock/rack_response.rb +5 -1
- data/lib/webmock/request_body_diff.rb +2 -0
- data/lib/webmock/request_execution_verifier.rb +2 -0
- data/lib/webmock/request_pattern.rb +35 -12
- data/lib/webmock/request_registry.rb +2 -0
- data/lib/webmock/request_signature.rb +4 -2
- data/lib/webmock/request_signature_snippet.rb +2 -0
- data/lib/webmock/request_stub.rb +34 -0
- data/lib/webmock/response.rb +15 -13
- data/lib/webmock/responses_sequence.rb +2 -0
- data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
- data/lib/webmock/rspec/matchers.rb +2 -0
- data/lib/webmock/rspec.rb +2 -0
- data/lib/webmock/stub_registry.rb +2 -0
- data/lib/webmock/stub_request_snippet.rb +2 -0
- data/lib/webmock/test_unit.rb +2 -0
- data/lib/webmock/util/hash_counter.rb +12 -6
- data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
- data/lib/webmock/util/hash_validator.rb +2 -0
- data/lib/webmock/util/headers.rb +23 -10
- data/lib/webmock/util/parsers/json.rb +72 -0
- data/lib/webmock/util/parsers/parse_error.rb +7 -0
- data/lib/webmock/util/parsers/xml.rb +16 -0
- data/lib/webmock/util/query_mapper.rb +2 -0
- data/lib/webmock/util/uri.rb +3 -1
- data/lib/webmock/util/values_stringifier.rb +2 -0
- data/lib/webmock/util/version_checker.rb +7 -5
- data/lib/webmock/version.rb +3 -1
- data/lib/webmock/webmock.rb +12 -0
- data/lib/webmock.rb +4 -2
- metadata +66 -185
- data/.gemtest +0 -0
- data/.github/workflows/CI.yml +0 -37
- data/.gitignore +0 -34
- data/.rspec-tm +0 -2
- data/Gemfile +0 -9
- data/Rakefile +0 -38
- data/lib/webmock/util/json.rb +0 -67
- data/minitest/test_helper.rb +0 -34
- data/minitest/test_webmock.rb +0 -9
- data/minitest/webmock_spec.rb +0 -60
- data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
- data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
- data/spec/acceptance/curb/curb_spec.rb +0 -499
- data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
- data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
- data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
- data/spec/acceptance/excon/excon_spec.rb +0 -77
- data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
- data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
- data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
- data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
- data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
- data/spec/acceptance/manticore/manticore_spec.rb +0 -107
- data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
- data/spec/acceptance/net_http/net_http_shared.rb +0 -153
- data/spec/acceptance/net_http/net_http_spec.rb +0 -369
- data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
- data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
- data/spec/acceptance/patron/patron_spec.rb +0 -125
- data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
- data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
- data/spec/acceptance/shared/callbacks.rb +0 -148
- data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
- data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
- data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
- data/spec/acceptance/shared/request_expectations.rb +0 -930
- data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
- data/spec/acceptance/shared/stubbing_requests.rb +0 -678
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
- data/spec/acceptance/webmock_shared.rb +0 -41
- data/spec/fixtures/test.txt +0 -1
- data/spec/quality_spec.rb +0 -84
- data/spec/spec_helper.rb +0 -48
- data/spec/support/example_curl_output.txt +0 -22
- data/spec/support/failures.rb +0 -9
- data/spec/support/my_rack_app.rb +0 -53
- data/spec/support/network_connection.rb +0 -19
- data/spec/support/webmock_server.rb +0 -70
- data/spec/unit/api_spec.rb +0 -175
- data/spec/unit/errors_spec.rb +0 -129
- data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
- data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
- data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
- data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
- data/spec/unit/rack_response_spec.rb +0 -112
- data/spec/unit/request_body_diff_spec.rb +0 -90
- data/spec/unit/request_execution_verifier_spec.rb +0 -208
- data/spec/unit/request_pattern_spec.rb +0 -736
- data/spec/unit/request_registry_spec.rb +0 -95
- data/spec/unit/request_signature_snippet_spec.rb +0 -89
- data/spec/unit/request_signature_spec.rb +0 -155
- data/spec/unit/request_stub_spec.rb +0 -199
- data/spec/unit/response_spec.rb +0 -286
- data/spec/unit/stub_registry_spec.rb +0 -103
- data/spec/unit/stub_request_snippet_spec.rb +0 -115
- data/spec/unit/util/hash_counter_spec.rb +0 -39
- data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
- data/spec/unit/util/headers_spec.rb +0 -28
- data/spec/unit/util/json_spec.rb +0 -33
- data/spec/unit/util/query_mapper_spec.rb +0 -157
- data/spec/unit/util/uri_spec.rb +0 -371
- data/spec/unit/util/version_checker_spec.rb +0 -65
- data/spec/unit/webmock_spec.rb +0 -60
- data/test/http_request.rb +0 -24
- data/test/shared_test.rb +0 -108
- data/test/test_helper.rb +0 -23
- data/test/test_webmock.rb +0 -12
- data/webmock.gemspec +0 -54
data/spec/unit/api_spec.rb
DELETED
@@ -1,175 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::API do
|
4
|
-
describe '#hash_including' do
|
5
|
-
subject { klass.new.hash_including(args) }
|
6
|
-
let(:args) { { data: :one } }
|
7
|
-
|
8
|
-
context 'when mixed into a class that does not define `hash_including`' do
|
9
|
-
let(:klass) do
|
10
|
-
Class.new do
|
11
|
-
include WebMock::API
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'uses WebMock::Matchers::HashIncludingMatcher' do
|
16
|
-
expect(subject).to be_a(WebMock::Matchers::HashIncludingMatcher)
|
17
|
-
end
|
18
|
-
|
19
|
-
# by testing equality for HashIncludingMatcher (which stringifies the passed hash) we are
|
20
|
-
# testing HashIncludingMatcher.initialize behavior as well
|
21
|
-
context "when args correspond to an hash" do
|
22
|
-
it "creates 'HashIncludingMatcher'" do
|
23
|
-
expect(subject).to eq("data" => :one)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when args are one or many keys" do
|
28
|
-
subject {klass.new.hash_including(:foo, :bar)}
|
29
|
-
let(:anything) { WebMock::Matchers::AnyArgMatcher.new(nil) }
|
30
|
-
|
31
|
-
it "creates 'HashIncludingMatcher' with keys anythingized" do
|
32
|
-
expect(subject).to eq("foo" => anything, "bar" => anything )
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "when args are both keys and key/value pairs" do
|
37
|
-
subject {klass.new.hash_including(:foo, :bar, data: :one)}
|
38
|
-
let(:anything) { WebMock::Matchers::AnyArgMatcher.new(nil) }
|
39
|
-
|
40
|
-
it "creates 'HashIncludingMatcher' with keys anythingized" do
|
41
|
-
expect(subject).to eq("foo" => anything, "bar" => anything, "data" => :one)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
context "when args are an empty hash" do
|
46
|
-
subject {klass.new.hash_including({})}
|
47
|
-
|
48
|
-
it "creates 'HashIncludingMatcher' with an empty hash" do
|
49
|
-
expect(subject).to eq({})
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
context 'when mixed into a class with a parent that defines `hash_including`' do
|
56
|
-
subject { klass.new.hash_including(*args) }
|
57
|
-
let(:args) { %w(:foo, :bar, {:data => :one}) }
|
58
|
-
let(:klass) do
|
59
|
-
Class.new(
|
60
|
-
Class.new do
|
61
|
-
def hash_including(*args)
|
62
|
-
args
|
63
|
-
end
|
64
|
-
end
|
65
|
-
) { include WebMock::API }
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'uses super and passes the args untampered' do
|
69
|
-
expect(subject).to eq(args)
|
70
|
-
end
|
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") }
|
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
|
174
|
-
end
|
175
|
-
end
|
data/spec/unit/errors_spec.rb
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "errors" do
|
4
|
-
describe WebMock::NetConnectNotAllowedError do
|
5
|
-
describe "message" do
|
6
|
-
it "should have message with request signature and snippet" do
|
7
|
-
allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
|
8
|
-
allow(WebMock::StubRequestSnippet).to receive(:new).
|
9
|
-
with(request_stub).and_return(stub_result)
|
10
|
-
|
11
|
-
expected = \
|
12
|
-
"Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
|
13
|
-
"\n\nYou can stub this request with the following snippet:" \
|
14
|
-
"\n\n#{stub_result}" \
|
15
|
-
"\n\n============================================================"
|
16
|
-
expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "should have message with registered stubs if available" do
|
20
|
-
allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
|
21
|
-
allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
|
22
|
-
allow(WebMock::StubRequestSnippet).to receive(:new).
|
23
|
-
with(request_stub).and_return(stub_result)
|
24
|
-
allow_any_instance_of(WebMock::RequestBodyDiff).to receive(:body_diff).and_return({})
|
25
|
-
|
26
|
-
expected = \
|
27
|
-
"Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
|
28
|
-
"\n\nYou can stub this request with the following snippet:" \
|
29
|
-
"\n\n#{stub_result}" \
|
30
|
-
"\n\nregistered request stubs:" \
|
31
|
-
"\n\n#{stub_result}" \
|
32
|
-
"\n\n============================================================"
|
33
|
-
expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should not be caught by a rescue block without arguments" do
|
37
|
-
allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
|
38
|
-
allow(WebMock::StubRequestSnippet).to receive(:new).
|
39
|
-
with(request_stub).and_return(stub_result)
|
40
|
-
|
41
|
-
exception = WebMock::NetConnectNotAllowedError.new(request_signature)
|
42
|
-
|
43
|
-
expect do
|
44
|
-
begin
|
45
|
-
raise exception
|
46
|
-
rescue
|
47
|
-
raise "exception should not be caught"
|
48
|
-
end
|
49
|
-
end.to raise_exception exception
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should print body diff if available" do
|
53
|
-
allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
|
54
|
-
allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
|
55
|
-
allow(WebMock::StubRequestSnippet).to receive(:new).
|
56
|
-
with(request_stub).and_return(stub_result)
|
57
|
-
allow_any_instance_of(WebMock::RequestBodyDiff).to receive(:body_diff).and_return(body_diff)
|
58
|
-
expected = \
|
59
|
-
"Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
|
60
|
-
"\n\nYou can stub this request with the following snippet:" \
|
61
|
-
"\n\n#{stub_result}" \
|
62
|
-
"\n\nregistered request stubs:" \
|
63
|
-
"\n\n#{stub_result}" \
|
64
|
-
"\n\nBody diff:\n [[\"+\", \"test\", \"test2\"], [\"-\", \"test3\"], [\"~\", \"test5\", \"test6\"]]" \
|
65
|
-
"\n\n\n============================================================"
|
66
|
-
expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
|
67
|
-
end
|
68
|
-
|
69
|
-
context "WebMock.show_body_diff? is false" do
|
70
|
-
before do
|
71
|
-
WebMock.hide_body_diff!
|
72
|
-
end
|
73
|
-
it "should not show body diff" do
|
74
|
-
allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
|
75
|
-
allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
|
76
|
-
allow(WebMock::StubRequestSnippet).to receive(:new).
|
77
|
-
with(request_stub).and_return(stub_result)
|
78
|
-
expect_any_instance_of(WebMock::RequestBodyDiff).to_not receive(:body_diff)
|
79
|
-
expected = \
|
80
|
-
"Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
|
81
|
-
"\n\nYou can stub this request with the following snippet:" \
|
82
|
-
"\n\n#{stub_result}" \
|
83
|
-
"\n\nregistered request stubs:" \
|
84
|
-
"\n\n#{stub_result}" \
|
85
|
-
"\n\n============================================================"
|
86
|
-
expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
context "WebMock.show_stubbing_instructions? is false" do
|
91
|
-
before do
|
92
|
-
WebMock.hide_stubbing_instructions!
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should have message with request signature and snippet" do
|
96
|
-
allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
|
97
|
-
allow(WebMock::StubRequestSnippet).to receive(:new).
|
98
|
-
with(request_stub).and_return(stub_result)
|
99
|
-
|
100
|
-
expected = \
|
101
|
-
"Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
|
102
|
-
"\n\n============================================================"
|
103
|
-
expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
|
104
|
-
end
|
105
|
-
|
106
|
-
it "should have message with registered stubs if available" do
|
107
|
-
allow(WebMock::StubRegistry.instance).to receive(:request_stubs).and_return([request_stub])
|
108
|
-
allow(WebMock::RequestStub).to receive(:from_request_signature).and_return(request_stub)
|
109
|
-
allow(WebMock::StubRequestSnippet).to receive(:new).
|
110
|
-
with(request_stub).and_return(stub_result)
|
111
|
-
allow(request_stub).to receive(:request_pattern).and_return(body_pattern)
|
112
|
-
|
113
|
-
expected = \
|
114
|
-
"Real HTTP connections are disabled. Unregistered request: #{request_signature}" \
|
115
|
-
"\n\nregistered request stubs:" \
|
116
|
-
"\n\n#{stub_result}" \
|
117
|
-
"\n\n============================================================"
|
118
|
-
expect(WebMock::NetConnectNotAllowedError.new(request_signature).message).to eq(expected)
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
let(:request_signature) { double(:request_signature, to_s: rand(10**20).to_s) }
|
124
|
-
let(:stub_result) { double(:stub_result, to_s: rand(10**20).to_s) }
|
125
|
-
let(:request_stub) { double(:request_stub) }
|
126
|
-
let(:body_pattern) { double(:body_pattern, body_pattern: nil)}
|
127
|
-
let(:body_diff) { [["+", "test", "test2"], ["-", "test3"], ["~", "test5", "test6"]] }
|
128
|
-
end
|
129
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::HttpLibAdapterRegistry do
|
4
|
-
describe "each_adapter" do
|
5
|
-
it "should yield block over each adapter" do
|
6
|
-
class MyAdapter < WebMock::HttpLibAdapter; end
|
7
|
-
WebMock::HttpLibAdapterRegistry.instance.register(:my_lib, MyAdapter)
|
8
|
-
adapters = []
|
9
|
-
WebMock::HttpLibAdapterRegistry.instance.each_adapter {|n,a|
|
10
|
-
adapters << [n, a]
|
11
|
-
}
|
12
|
-
expect(adapters).to include([:my_lib, MyAdapter])
|
13
|
-
WebMock::HttpLibAdapterRegistry.instance.
|
14
|
-
http_lib_adapters.delete(:my_lib)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe WebMock::HttpLibAdapter do
|
4
|
-
describe "adapter_for" do
|
5
|
-
it "should add adapter to adapter registry" do
|
6
|
-
class MyAdapter < WebMock::HttpLibAdapter; end
|
7
|
-
expect(WebMock::HttpLibAdapterRegistry.instance).
|
8
|
-
to receive(:register).with(:my_lib, MyAdapter)
|
9
|
-
MyAdapter.adapter_for(:my_lib)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
@@ -1,61 +0,0 @@
|
|
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
|
@@ -1,87 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module WebMock
|
4
|
-
module Matchers
|
5
|
-
|
6
|
-
describe HashIncludingMatcher do
|
7
|
-
|
8
|
-
it "stringifies the given hash keys" do
|
9
|
-
expect(HashIncludingMatcher.new(a: 1, b: 2)).to eq("a" => 1, "b" => 2)
|
10
|
-
end
|
11
|
-
|
12
|
-
it "sorts elements in the hash" do
|
13
|
-
expect(HashIncludingMatcher.new(b: 2, a: 1)).to eq("a" => 1, "b" => 2)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "describes itself properly" do
|
17
|
-
expect(HashIncludingMatcher.new(a: 1).inspect).to eq "hash_including({\"a\"=>1})"
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "success" do
|
21
|
-
it "matches the same hash" do
|
22
|
-
expect(HashIncludingMatcher.new("a" => 1, "b" => 2)).to eq("a" => 1, "b" => 2)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "matches a hash with extra stuff" do
|
26
|
-
expect(HashIncludingMatcher.new(a: 1)).to eq("a" => 1, "b" => 2)
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "when matching anythingized keys" do
|
30
|
-
let(:anything) { WebMock::Matchers::AnyArgMatcher.new(nil) }
|
31
|
-
|
32
|
-
it "matches an int against anything()" do
|
33
|
-
expect(HashIncludingMatcher.new(a: anything, b: 2)).to eq({'a' => 1, 'b' => 2})
|
34
|
-
end
|
35
|
-
|
36
|
-
it "matches a string against anything()" do
|
37
|
-
expect(HashIncludingMatcher.new(a: anything, b: 2)).to eq({'a' => "1", 'b' => 2})
|
38
|
-
end
|
39
|
-
|
40
|
-
it "matches if the key is present" do
|
41
|
-
expect(HashIncludingMatcher.new(a: anything)).to eq({'a' => 1, 'b' => 2})
|
42
|
-
end
|
43
|
-
|
44
|
-
it "matches if more keys are present" do
|
45
|
-
expect(HashIncludingMatcher.new(a: anything, b: anything)).to eq({'a' => 1, 'b' => 2, 'c' => 3})
|
46
|
-
end
|
47
|
-
|
48
|
-
it "matches if passed many keys and many key/value pairs" do
|
49
|
-
expect(HashIncludingMatcher.new(a: anything, b: anything, c: 3, e: 5)).to eq({'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5})
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "when matching an empty hash" do
|
54
|
-
it "matches against any hash" do
|
55
|
-
expect(HashIncludingMatcher.new({})).to eq({a: 1, b: 2, c: 3})
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "failing" do
|
61
|
-
it "does not match a non-hash" do
|
62
|
-
expect(HashIncludingMatcher.new(a: 1)).not_to eq 1
|
63
|
-
end
|
64
|
-
|
65
|
-
it "does not match a hash with a missing key" do
|
66
|
-
expect(HashIncludingMatcher.new(a: 1)).not_to eq('b' => 2)
|
67
|
-
end
|
68
|
-
|
69
|
-
it "does not match an empty hash with a given key" do
|
70
|
-
expect(HashIncludingMatcher.new(a: 1)).not_to eq({})
|
71
|
-
end
|
72
|
-
|
73
|
-
it "does not match a hash with a missing key when one pair is matching" do
|
74
|
-
expect(HashIncludingMatcher.new(a: 1, b: 2)).not_to eq('b' => 2)
|
75
|
-
end
|
76
|
-
|
77
|
-
it "does not match a hash with an incorrect value" do
|
78
|
-
expect(HashIncludingMatcher.new(a: 1, b: 2)).not_to eq('a' => 1, 'b' => 3)
|
79
|
-
end
|
80
|
-
|
81
|
-
it "does not match when values are nil but keys are different" do
|
82
|
-
expect(HashIncludingMatcher.new(a: nil)).not_to eq('b' => nil)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
@@ -1,112 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe WebMock::RackResponse do
|
5
|
-
before :each do
|
6
|
-
@rack_response = WebMock::RackResponse.new(MyRackApp)
|
7
|
-
end
|
8
|
-
|
9
|
-
it "should hook up to a rack appliance" do
|
10
|
-
request = WebMock::RequestSignature.new(:get, 'www.example.com')
|
11
|
-
response = @rack_response.evaluate(request)
|
12
|
-
|
13
|
-
expect(response.status.first).to eq(200)
|
14
|
-
expect(response.body).to include('This is my root!')
|
15
|
-
end
|
16
|
-
|
17
|
-
it "should set the reason phrase based on the status code" do
|
18
|
-
request = WebMock::RequestSignature.new(:get, 'www.example.com')
|
19
|
-
response = @rack_response.evaluate(request)
|
20
|
-
expect(response.status).to eq([200, "OK"])
|
21
|
-
|
22
|
-
request = WebMock::RequestSignature.new(:get, 'www.example.com/error')
|
23
|
-
response = @rack_response.evaluate(request)
|
24
|
-
expect(response.status).to eq([500, "Internal Server Error"])
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should behave correctly when the rack response is not a simple array of strings" do
|
28
|
-
request = WebMock::RequestSignature.new(:get, 'www.example.com/non_array_response')
|
29
|
-
response = @rack_response.evaluate(request)
|
30
|
-
|
31
|
-
expect(response.status.first).to eq(200)
|
32
|
-
expect(response.body).to include('This is not in an array!')
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should shouldn't blow up when hitting a locked resource twice" do
|
36
|
-
@locked_rack_response = WebMock::RackResponse.new(MyLockedRackApp)
|
37
|
-
request = WebMock::RequestSignature.new(:get, 'www.example.com/locked')
|
38
|
-
@locked_rack_response.evaluate(request)
|
39
|
-
response2 = @locked_rack_response.evaluate(request)
|
40
|
-
|
41
|
-
expect(response2.body).to include('Single threaded response.')
|
42
|
-
expect(response2.status.first).to eq(200)
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should send along params" do
|
46
|
-
request = WebMock::RequestSignature.new(:get, 'www.example.com/greet?name=Johnny')
|
47
|
-
|
48
|
-
response = @rack_response.evaluate(request)
|
49
|
-
|
50
|
-
expect(response.status.first).to eq(200)
|
51
|
-
expect(response.body).to include('Hello, Johnny')
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should send along POST params" do
|
55
|
-
request = WebMock::RequestSignature.new(:post, 'www.example.com/greet',
|
56
|
-
body: 'name=Jimmy'
|
57
|
-
)
|
58
|
-
|
59
|
-
response = @rack_response.evaluate(request)
|
60
|
-
expect(response.body).to include('Good to meet you, Jimmy!')
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should send params with proper content length if params have non-ascii symbols" do
|
64
|
-
request = WebMock::RequestSignature.new(:post, 'www.example.com/greet',
|
65
|
-
body: 'name=Олег'
|
66
|
-
)
|
67
|
-
|
68
|
-
response = @rack_response.evaluate(request)
|
69
|
-
expect(response.body).to include('Good to meet you, Олег!')
|
70
|
-
end
|
71
|
-
|
72
|
-
describe 'rack error output' do
|
73
|
-
before :each do
|
74
|
-
@original_stderr = $stderr
|
75
|
-
$stderr = StringIO.new
|
76
|
-
end
|
77
|
-
|
78
|
-
after :each do
|
79
|
-
$stderr = @original_stderr
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'should behave correctly when an app uses rack.errors' do
|
83
|
-
request = WebMock::RequestSignature.new(:get, 'www.example.com/error')
|
84
|
-
|
85
|
-
expect { @rack_response.evaluate(request) }.to_not raise_error
|
86
|
-
expect($stderr.length).to_not eq 0
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe 'basic auth request' do
|
91
|
-
before :each do
|
92
|
-
@rack_response_with_basic_auth = WebMock::RackResponse.new(
|
93
|
-
Rack::Auth::Basic.new(MyRackApp) do |username, password|
|
94
|
-
username == 'username' && password == 'password'
|
95
|
-
end
|
96
|
-
)
|
97
|
-
end
|
98
|
-
it 'should be failure when wrong credentials' do
|
99
|
-
request = WebMock::RequestSignature.new(:get, 'foo:bar@www.example.com')
|
100
|
-
response = @rack_response_with_basic_auth.evaluate(request)
|
101
|
-
expect(response.status.first).to eq(401)
|
102
|
-
expect(response.body).not_to include('This is my root!')
|
103
|
-
end
|
104
|
-
|
105
|
-
it 'should be success when valid credentials' do
|
106
|
-
request = WebMock::RequestSignature.new(:get, 'username:password@www.example.com')
|
107
|
-
response = @rack_response_with_basic_auth.evaluate(request)
|
108
|
-
expect(response.status.first).to eq(200)
|
109
|
-
expect(response.body).to include('This is my root!')
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe WebMock::RequestBodyDiff do
|
4
|
-
subject { WebMock::RequestBodyDiff.new(request_signature, request_stub) }
|
5
|
-
|
6
|
-
let(:uri) { "http://example.com" }
|
7
|
-
let(:method) { "GET" }
|
8
|
-
|
9
|
-
let(:request_stub) { WebMock::RequestStub.new(method, uri) }
|
10
|
-
let(:request_signature) { WebMock::RequestSignature.new(method, uri) }
|
11
|
-
|
12
|
-
let(:request_stub_body) { { "key" => "value"} }
|
13
|
-
let(:request_signature_body) { {"key" => "different value"}.to_json }
|
14
|
-
|
15
|
-
let(:request_pattern) {
|
16
|
-
WebMock::RequestPattern.new(
|
17
|
-
method, uri, {body: request_stub_body}
|
18
|
-
)
|
19
|
-
}
|
20
|
-
|
21
|
-
before :each do
|
22
|
-
request_stub.request_pattern = request_pattern
|
23
|
-
request_signature.headers = {"Content-Type" => "application/json"}
|
24
|
-
request_signature.body = request_signature_body
|
25
|
-
end
|
26
|
-
|
27
|
-
describe "#body_diff" do
|
28
|
-
context "request signature is unparseable json" do
|
29
|
-
let(:request_signature_body) { "youcan'tparsethis!" }
|
30
|
-
|
31
|
-
it "returns an empty hash" do
|
32
|
-
expect(subject.body_diff).to eq({})
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "request stub body as unparseable json" do
|
37
|
-
let(:request_stub_body) { "youcan'tparsethis!" }
|
38
|
-
|
39
|
-
it "returns an empty hash" do
|
40
|
-
expect(subject.body_diff).to eq({})
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "request stub body pattern is hash" do
|
45
|
-
let(:request_stub_body) { { "key" => "value"} }
|
46
|
-
|
47
|
-
it "generates a diff" do
|
48
|
-
expect(subject.body_diff).to eq(
|
49
|
-
[["~", "key", "different value", "value"]]
|
50
|
-
)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
context "request signature doesn't have json headers" do
|
55
|
-
before :each do
|
56
|
-
request_signature.headers = {"Content-Type" => "application/xml"}
|
57
|
-
end
|
58
|
-
|
59
|
-
it "returns an empty hash" do
|
60
|
-
expect(subject.body_diff).to eq({})
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
context "request stub body pattern is a string" do
|
65
|
-
let(:request_stub_body) { { "key" => "value"}.to_json }
|
66
|
-
|
67
|
-
it "generates a diff" do
|
68
|
-
expect(subject.body_diff).to eq(
|
69
|
-
[["~", "key", "different value", "value"]]
|
70
|
-
)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context "stub request has no request pattern" do
|
75
|
-
let(:request_signature_body) { nil }
|
76
|
-
|
77
|
-
it "returns an empty hash" do
|
78
|
-
expect(subject.body_diff).to eq({})
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
context "stub request has no body pattern" do
|
83
|
-
let(:request_stub_body) { nil }
|
84
|
-
|
85
|
-
it "returns an empty hash" do
|
86
|
-
expect(subject.body_diff).to eq({})
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|