webmock 3.18.1 → 3.20.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 +62 -0
  3. data/README.md +38 -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 +15 -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 +2 -0
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
  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 +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 +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 +20 -1
  42. data/lib/webmock/response.rb +3 -1
  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/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 +42 -160
  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,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