webmock 3.14.0 → 3.25.0

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