webmock 3.18.1 → 3.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -0
  3. data/README.md +34 -15
  4. data/lib/webmock/api.rb +2 -0
  5. data/lib/webmock/assertion_failure.rb +2 -0
  6. data/lib/webmock/callback_registry.rb +2 -0
  7. data/lib/webmock/config.rb +2 -0
  8. data/lib/webmock/cucumber.rb +2 -0
  9. data/lib/webmock/deprecation.rb +2 -0
  10. data/lib/webmock/errors.rb +2 -0
  11. data/lib/webmock/http_lib_adapters/async_http_client_adapter.rb +2 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +2 -0
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +14 -6
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +2 -0
  15. data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +2 -0
  16. data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +2 -0
  17. data/lib/webmock/http_lib_adapters/http_rb/client.rb +2 -0
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +3 -1
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +2 -0
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +2 -0
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +2 -0
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +2 -0
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +2 -0
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +2 -0
  25. data/lib/webmock/http_lib_adapters/net_http.rb +2 -0
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +2 -0
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +2 -0
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +2 -0
  29. data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +2 -0
  35. data/lib/webmock/request_body_diff.rb +2 -0
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +3 -1
  38. data/lib/webmock/request_registry.rb +2 -0
  39. data/lib/webmock/request_signature.rb +2 -0
  40. data/lib/webmock/request_signature_snippet.rb +2 -0
  41. data/lib/webmock/request_stub.rb +7 -1
  42. data/lib/webmock/response.rb +2 -0
  43. data/lib/webmock/responses_sequence.rb +2 -0
  44. data/lib/webmock/rspec/matchers/request_pattern_matcher.rb +2 -0
  45. data/lib/webmock/rspec/matchers/webmock_matcher.rb +2 -0
  46. data/lib/webmock/rspec/matchers.rb +2 -0
  47. data/lib/webmock/rspec.rb +2 -0
  48. data/lib/webmock/stub_registry.rb +2 -0
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +2 -0
  51. data/lib/webmock/util/hash_counter.rb +12 -6
  52. data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
  53. data/lib/webmock/util/hash_validator.rb +2 -0
  54. data/lib/webmock/util/headers.rb +22 -8
  55. data/lib/webmock/util/json.rb +2 -0
  56. data/lib/webmock/util/query_mapper.rb +2 -0
  57. data/lib/webmock/util/uri.rb +3 -1
  58. data/lib/webmock/util/values_stringifier.rb +2 -0
  59. data/lib/webmock/util/version_checker.rb +7 -5
  60. data/lib/webmock/version.rb +3 -1
  61. data/lib/webmock/webmock.rb +2 -0
  62. data/lib/webmock.rb +2 -0
  63. metadata +36 -168
  64. data/.gemtest +0 -0
  65. data/.github/workflows/CI.yml +0 -38
  66. data/.gitignore +0 -34
  67. data/.rspec-tm +0 -2
  68. data/Gemfile +0 -9
  69. data/Rakefile +0 -38
  70. data/minitest/test_helper.rb +0 -34
  71. data/minitest/test_webmock.rb +0 -9
  72. data/minitest/webmock_spec.rb +0 -60
  73. data/spec/acceptance/async_http_client/async_http_client_spec.rb +0 -375
  74. data/spec/acceptance/async_http_client/async_http_client_spec_helper.rb +0 -73
  75. data/spec/acceptance/curb/curb_spec.rb +0 -510
  76. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  77. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -462
  78. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  79. data/spec/acceptance/excon/excon_spec.rb +0 -77
  80. data/spec/acceptance/excon/excon_spec_helper.rb +0 -52
  81. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -93
  82. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  83. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  84. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  85. data/spec/acceptance/manticore/manticore_spec.rb +0 -107
  86. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  87. data/spec/acceptance/net_http/net_http_shared.rb +0 -190
  88. data/spec/acceptance/net_http/net_http_spec.rb +0 -395
  89. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  90. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  91. data/spec/acceptance/patron/patron_spec.rb +0 -123
  92. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  93. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  94. data/spec/acceptance/shared/callbacks.rb +0 -148
  95. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  96. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  97. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  98. data/spec/acceptance/shared/request_expectations.rb +0 -930
  99. data/spec/acceptance/shared/returning_declared_responses.rb +0 -409
  100. data/spec/acceptance/shared/stubbing_requests.rb +0 -678
  101. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  102. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  103. data/spec/acceptance/webmock_shared.rb +0 -41
  104. data/spec/fixtures/test.txt +0 -1
  105. data/spec/quality_spec.rb +0 -84
  106. data/spec/spec_helper.rb +0 -48
  107. data/spec/support/example_curl_output.txt +0 -22
  108. data/spec/support/failures.rb +0 -9
  109. data/spec/support/my_rack_app.rb +0 -53
  110. data/spec/support/network_connection.rb +0 -19
  111. data/spec/support/webmock_server.rb +0 -70
  112. data/spec/unit/api_spec.rb +0 -175
  113. data/spec/unit/errors_spec.rb +0 -129
  114. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  115. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  116. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  117. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  118. data/spec/unit/rack_response_spec.rb +0 -112
  119. data/spec/unit/request_body_diff_spec.rb +0 -90
  120. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  121. data/spec/unit/request_pattern_spec.rb +0 -748
  122. data/spec/unit/request_registry_spec.rb +0 -95
  123. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  124. data/spec/unit/request_signature_spec.rb +0 -175
  125. data/spec/unit/request_stub_spec.rb +0 -234
  126. data/spec/unit/response_spec.rb +0 -314
  127. data/spec/unit/stub_registry_spec.rb +0 -103
  128. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  129. data/spec/unit/util/hash_counter_spec.rb +0 -39
  130. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  131. data/spec/unit/util/headers_spec.rb +0 -28
  132. data/spec/unit/util/json_spec.rb +0 -33
  133. data/spec/unit/util/query_mapper_spec.rb +0 -157
  134. data/spec/unit/util/uri_spec.rb +0 -371
  135. data/spec/unit/util/version_checker_spec.rb +0 -65
  136. data/spec/unit/webmock_spec.rb +0 -114
  137. data/test/http_request.rb +0 -24
  138. data/test/shared_test.rb +0 -108
  139. data/test/test_helper.rb +0 -23
  140. data/test/test_webmock.rb +0 -12
  141. data/webmock.gemspec +0 -54
@@ -1,123 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
- require 'acceptance/webmock_shared'
5
-
6
- unless RUBY_PLATFORM =~ /java/
7
- require 'acceptance/patron/patron_spec_helper'
8
- require 'tmpdir'
9
- require 'fileutils'
10
-
11
- describe "Patron" do
12
- include PatronSpecHelper
13
-
14
- include_examples "with WebMock"
15
-
16
- describe "when custom functionality is used" do
17
- before(:each) do
18
- @sess = Patron::Session.new
19
- @sess.base_url = "http://www.example.com"
20
- end
21
-
22
- it "should allow stubbing PATCH request with body" do
23
- stub_request(:patch, "http://www.example.com/")
24
- .with(body: "abc")
25
-
26
- @sess.patch('/', "abc")
27
- end
28
-
29
- describe "file requests" do
30
-
31
- before(:each) do
32
- @dir_path = Dir.mktmpdir('webmock-')
33
- @file_path = File.join(@dir_path, "webmock_temp_test_file")
34
- FileUtils.rm_rf(@file_path) if File.exist?(@file_path)
35
- end
36
-
37
- after(:each) do
38
- FileUtils.rm_rf(@dir_path) if File.exist?(@dir_path)
39
- end
40
-
41
- it "should work with get_file" do
42
- stub_request(:get, "www.example.com").to_return(body: "abc")
43
- @sess.get_file("/", @file_path)
44
- expect(File.read(@file_path)).to eq("abc")
45
- end
46
-
47
- it "should raise same error as Patron if file is not readable for get request" do
48
- stub_request(:get, "www.example.com")
49
- File.open("/tmp/read_only_file", "w") do |tmpfile|
50
- tmpfile.chmod(0400)
51
- end
52
- begin
53
- expect {
54
- @sess.get_file("/", "/tmp/read_only_file")
55
- }.to raise_error(ArgumentError, "Unable to open specified file.")
56
- ensure
57
- File.unlink("/tmp/read_only_file")
58
- end
59
- end
60
-
61
- it "should work with put_file" do
62
- File.open(@file_path, "w") {|f| f.write "abc"}
63
- stub_request(:put, "www.example.com").with(body: "abc")
64
- @sess.put_file("/", @file_path)
65
- end
66
-
67
- it "should work with post_file" do
68
- File.open(@file_path, "w") {|f| f.write "abc"}
69
- stub_request(:post, "www.example.com").with(body: "abc")
70
- @sess.post_file("/", @file_path)
71
- end
72
-
73
- it "should raise same error as Patron if file is not readable for post request" do
74
- stub_request(:post, "www.example.com").with(body: "abc")
75
- expect {
76
- @sess.post_file("/", "/path/to/non/existing/file")
77
- }.to raise_error(ArgumentError, "Unable to open specified file.")
78
- end
79
-
80
- end
81
-
82
- describe "handling errors same way as patron" do
83
- it "should raise error if put request has neither upload_data nor file_name" do
84
- stub_request(:post, "www.example.com")
85
- expect {
86
- @sess.post("/", nil)
87
- }.to raise_error(ArgumentError, "Must provide either data or a filename when doing a PUT or POST")
88
- end
89
- end
90
-
91
- it "should work with WebDAV copy request" do
92
- stub_request(:copy, "www.example.com/abc").with(headers: {'Destination' => "/def"})
93
- @sess.copy("/abc", "/def")
94
- end
95
-
96
- describe "handling encoding same way as patron" do
97
- around(:each) do |example|
98
- @encoding = Encoding.default_internal
99
- Encoding.default_internal = "UTF-8"
100
- example.run
101
- Encoding.default_internal = @encoding
102
- end
103
-
104
- it "should not encode body with default encoding" do
105
- stub_request(:get, "www.example.com").
106
- to_return(body: "Øl")
107
-
108
- expect(@sess.get("").body.encoding).to eq(Encoding::ASCII_8BIT)
109
- expect(@sess.get("").inspectable_body.encoding).to eq(Encoding::UTF_8)
110
- end
111
-
112
- it "should not encode body to default internal" do
113
- stub_request(:get, "www.example.com").
114
- to_return(headers: {'Content-Type' => 'text/html; charset=iso-8859-1'},
115
- body: "Øl".encode("iso-8859-1"))
116
-
117
- expect(@sess.get("").body.encoding).to eq(Encoding::ASCII_8BIT)
118
- expect(@sess.get("").decoded_body.encoding).to eq(Encoding.default_internal)
119
- end
120
- end
121
- end
122
- end
123
- end
@@ -1,54 +0,0 @@
1
- require 'ostruct'
2
-
3
- module PatronSpecHelper
4
- def http_request(method, uri, options = {}, &block)
5
- method = method.to_sym
6
- uri = Addressable::URI.heuristic_parse(uri)
7
- sess = Patron::Session.new
8
- sess.base_url = "#{uri.omit(:path, :query).normalize.to_s}".gsub(/\/$/,"")
9
-
10
- if options[:basic_auth]
11
- sess.username = options[:basic_auth][0]
12
- sess.password = options[:basic_auth][1]
13
- end
14
-
15
- sess.connect_timeout = 30
16
- sess.timeout = 30
17
- sess.max_redirects = 0
18
- uri = "#{uri.path}#{uri.query ? '?' : ''}#{uri.query}"
19
- uri = uri.gsub(' ','%20')
20
- response = sess.request(method, uri, options[:headers] || {}, {
21
- data: options[:body]
22
- })
23
- headers = {}
24
- if response.headers
25
- response.headers.each do |k,v|
26
- v = v.join(", ") if v.is_a?(Array)
27
- headers[k] = v
28
- end
29
- end
30
-
31
- status_line_pattern = %r(\AHTTP/(\d+(\.\d+)?)\s+(\d\d\d)\s*([^\r\n]+)?)
32
- message = response.status_line.match(status_line_pattern)[4] || ""
33
-
34
- OpenStruct.new({
35
- body: response.body,
36
- headers: WebMock::Util::Headers.normalize_headers(headers),
37
- status: response.status.to_s,
38
- message: message
39
- })
40
- end
41
-
42
- def client_timeout_exception_class
43
- Patron::TimeoutError
44
- end
45
-
46
- def connection_refused_exception_class
47
- Patron::ConnectionFailed
48
- end
49
-
50
- def http_library
51
- :patron
52
- end
53
-
54
- end
@@ -1,313 +0,0 @@
1
- shared_context "allowing and disabling net connect" do |*adapter_info|
2
- describe "when net connect" do
3
- describe "is allowed", net_connect: true do
4
- before(:each) do
5
- WebMock.allow_net_connect!
6
- end
7
-
8
- it "should make a real web request if request is not stubbed" do
9
- expect(http_request(:get, webmock_server_url).status).to eq("200")
10
- end
11
-
12
- it "should make a real https request if request is not stubbed" do
13
- unless http_library == :httpclient
14
- result = http_request(:get, "https://www.google.com/").body
15
- if result.respond_to? :encode
16
- result = result.encode(
17
- 'UTF-8',
18
- 'binary',
19
- invalid: :replace,
20
- undef: :replace,
21
- replace: ''
22
- )
23
- end
24
- expect(result).to match(/.*google.*/)
25
- end
26
- end
27
-
28
- it "should return stubbed response if request was stubbed" do
29
- stub_request(:get, "www.example.com").to_return(body: "abc")
30
- expect(http_request(:get, "http://www.example.com/").body).to eq("abc")
31
- end
32
- end
33
-
34
- describe "is not allowed" do
35
- before(:each) do
36
- WebMock.disable_net_connect!
37
- end
38
-
39
- it "should return stubbed response if request was stubbed" do
40
- stub_request(:get, "www.example.com").to_return(body: "abc")
41
- expect(http_request(:get, "http://www.example.com/").body).to eq("abc")
42
- end
43
-
44
- it "should return stubbed response if request with path was stubbed" do
45
- stub_request(:get, "www.example.com/hello_world").to_return(body: "abc")
46
- expect(http_request(:get, "http://www.example.com/hello_world").body).to eq("abc")
47
- end
48
-
49
- it "should raise exception if request was not stubbed" do
50
- expect {
51
- http_request(:get, "http://www.example.com/")
52
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
53
- end
54
- end
55
-
56
- describe "is not allowed with exception for localhost" do
57
- before(:each) do
58
- WebMock.disable_net_connect!(allow_localhost: true)
59
- end
60
-
61
- it "should return stubbed response if request was stubbed" do
62
- stub_request(:get, "www.example.com").to_return(body: "abc")
63
- expect(http_request(:get, "http://www.example.com/").body).to eq("abc")
64
- end
65
-
66
- it "should raise exception if request was not stubbed" do
67
- expect {
68
- http_request(:get, "http://www.example.com/")
69
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/))
70
- end
71
-
72
- it "should make a real request to localhost" do
73
- expect {
74
- http_request(:get, "http://localhost:12345/")
75
- }.to raise_error(connection_refused_exception_class)
76
- end
77
-
78
- it "should make a real request to 127.0.0.1" do
79
- expect {
80
- http_request(:get, "http://127.0.0.1:12345/")
81
- }.to raise_error(connection_refused_exception_class)
82
- end
83
-
84
- it "should make a real request to 0.0.0.0" do
85
- expect {
86
- http_request(:get, "http://0.0.0.0:12345/")
87
- }.to raise_error(connection_refused_exception_class)
88
- end
89
- end
90
-
91
- describe "is not allowed, with exceptions" do
92
- describe "allowing by host string" do
93
- before :each do
94
- WebMock.disable_net_connect!(allow: 'https://httpstat.us')
95
- end
96
-
97
- context "when the host is not allowed" do
98
- it "should return stubbed response if request was stubbed" do
99
- stub_request(:get, 'disallowed.example.com/foo').to_return(body: "abc")
100
- expect(http_request(:get, 'http://disallowed.example.com/foo').body).to eq("abc")
101
- end
102
-
103
- it "should raise exception if request was not stubbed" do
104
- expect {
105
- http_request(:get, 'http://disallowed.example.com/')
106
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://disallowed.example.com))
107
- end
108
- end
109
-
110
- context "when the host is allowed" do
111
- it "should return stubbed response if request was stubbed" do
112
- stub_request(:get, 'https://httpstat.us/200').to_return(body: "abc")
113
- expect(http_request(:get, "https://httpstat.us/200").body).to eq("abc")
114
- end
115
-
116
- # WARNING: this makes a real HTTP request!
117
- it "should make a real request to allowed host", net_connect: true do
118
- expect(http_request(:get, "https://httpstat.us/200").status).to eq('200')
119
- end
120
- end
121
- end
122
-
123
- describe "allowing by host:port string" do
124
- def replace_with_different_port(uri)
125
- uri.sub(%r{:(\d+)}){|m0, m1| ':' + ($~[1].to_i + 1).to_s }
126
- end
127
-
128
- let(:allowed_host_with_port) { WebMockServer.instance.host_with_port }
129
- let(:disallowed_host_with_port) { replace_with_different_port(allowed_host_with_port) }
130
-
131
- before :each do
132
- WebMock.disable_net_connect!(allow: allowed_host_with_port)
133
- end
134
-
135
- context "when the host is not allowed" do
136
- it "should return stubbed response if request was stubbed" do
137
- request_url = "http://#{disallowed_host_with_port}/foo"
138
- stub_request(:get, request_url).to_return(body: "abc")
139
- expect(http_request(:get, request_url).body).to eq("abc")
140
- end
141
-
142
- it "should raise exception if request was not stubbed" do
143
- request_url = "http://#{disallowed_host_with_port}/foo"
144
- expect {
145
- http_request(:get, request_url)
146
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET #{request_url}))
147
- end
148
- end
149
-
150
- context "when the host is allowed" do
151
- it "should return stubbed response if request was stubbed" do
152
- request_url = "http://#{allowed_host_with_port}/foo"
153
- stub_request(:get, request_url).to_return(body: "abc")
154
- expect(http_request(:get, request_url).body).to eq('abc')
155
- end
156
-
157
- it "should make a real request to allowed host", net_connect: true do
158
- request_url = "http://#{allowed_host_with_port}/foo"
159
- expect(http_request(:get, request_url).status).to eq('200')
160
- end
161
- end
162
- end
163
-
164
- describe "allowing by scheme:host string" do
165
- before :each do
166
- WebMock.disable_net_connect!(allow: 'https://www.google.pl')
167
- end
168
-
169
- context "when the host and scheme is not allowed" do
170
- it "should return stubbed response if request was stubbed" do
171
- stub_request(:get, 'https://disallowed.example.com/foo').to_return(body: "abc")
172
- expect(http_request(:get, 'https://disallowed.example.com/foo').body).to eq("abc")
173
- end
174
-
175
- it "should raise exception if request was not stubbed" do
176
- expect {
177
- http_request(:get, 'https://disallowed.example.com/')
178
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET https://disallowed.example.com))
179
- end
180
-
181
- it "should raise exception if request was made to different port" do
182
- expect {
183
- http_request(:get, 'https://www.google.pl:80/')
184
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET https://www.google.pl:80))
185
- end
186
-
187
- it "should raise exception if request was made to different scheme" do
188
- expect {
189
- http_request(:get, 'http://www.google.pl/')
190
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://www.google.pl))
191
- end
192
- end
193
-
194
- context "when the host is allowed" do
195
- it "should return stubbed response if request was stubbed" do
196
- stub_request(:get, 'https://www.google.pl').to_return(body: "abc")
197
- expect(http_request(:get, "https://www.google.pl/").body).to eq("abc")
198
- end
199
-
200
- it "should make a real request to allowed host with scheme", net_connect: true do
201
- method = http_library == :httpclient ? :head : :get #https://github.com/nahi/httpclient/issues/299
202
- expect(http_request(method, "https://www.google.pl/").status).to eq('200')
203
- end
204
-
205
- it "should make a real request to allowed host with scheme and port", net_connect: true do
206
- method = http_library == :httpclient ? :head : :get
207
- expect(http_request(method, "https://www.google.pl:443/").status).to eq('200')
208
- end
209
- end
210
- end
211
-
212
- describe "allowing by regular expression" do
213
- before :each do
214
- WebMock.disable_net_connect!(allow: %r{httpstat})
215
- end
216
-
217
- context "when the host is not allowed" do
218
- it "should return stubbed response if request was stubbed" do
219
- stub_request(:get, 'disallowed.example.com/foo').to_return(body: "abc")
220
- expect(http_request(:get, 'http://disallowed.example.com/foo').body).to eq("abc")
221
- end
222
-
223
- it "should raise exception if request was not stubbed" do
224
- expect {
225
- http_request(:get, 'http://disallowed.example.com/')
226
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://disallowed.example.com))
227
- end
228
- end
229
-
230
- context "when the host is allowed" do
231
- it "should return stubbed response if request was stubbed" do
232
- stub_request(:get, 'https://httpstat.us/200').to_return(body: "abc")
233
- expect(http_request(:get, "https://httpstat.us/200").body).to eq("abc")
234
- end
235
-
236
- # WARNING: this makes a real HTTP request!
237
- it "should make a real request to allowed host", net_connect: true do
238
- expect(http_request(:get, "https://httpstat.us/200").status).to eq('200')
239
- end
240
-
241
- it "should make a real request if request is allowed by path regexp and url contains default port", net_connect: true do
242
- WebMock.disable_net_connect!(allow: %r{www.google.pl/webhp})
243
- method = http_library == :httpclient ? :head : :get
244
- expect(http_request(method, 'https://www.google.pl:443/webhp').status).to eq('200')
245
- end
246
- end
247
- end
248
-
249
- describe "allowing by a callable" do
250
- before :each do
251
- WebMock.disable_net_connect!(allow: lambda{|url| url.to_str.include?('httpstat') })
252
- end
253
-
254
- context "when the host is not allowed" do
255
- it "should return stubbed response if request was stubbed" do
256
- stub_request(:get, 'disallowed.example.com/foo').to_return(body: "abc")
257
- expect(http_request(:get, 'http://disallowed.example.com/foo').body).to eq("abc")
258
- end
259
-
260
- it "should raise exception if request was not stubbed" do
261
- expect {
262
- http_request(:get, 'http://disallowed.example.com/')
263
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://disallowed.example.com))
264
- end
265
- end
266
-
267
- context "when the host is allowed" do
268
- it "should return stubbed response if request was stubbed" do
269
- stub_request(:get, 'https://httpstat.us/200').to_return(body: "abc")
270
- expect(http_request(:get, "https://httpstat.us/200").body).to eq("abc")
271
- end
272
-
273
- # WARNING: this makes a real HTTP request!
274
- it "should make a real request to allowed host", net_connect: true do
275
- expect(http_request(:get, "https://httpstat.us/200").status).to eq('200')
276
- end
277
- end
278
- end
279
-
280
- describe "allowing by a list of the above" do
281
- before :each do
282
- WebMock.disable_net_connect!(allow: [lambda{|_| false }, %r{foobar}, 'https://httpstat.us'])
283
- end
284
-
285
- context "when the host is not allowed" do
286
- it "should return stubbed response if request was stubbed" do
287
- stub_request(:get, 'disallowed.example.com/foo').to_return(body: "abc")
288
- expect(http_request(:get, 'http://disallowed.example.com/foo').body).to eq("abc")
289
- end
290
-
291
- it "should raise exception if request was not stubbed" do
292
- expect {
293
- http_request(:get, 'http://disallowed.example.com/')
294
- }.to raise_error(WebMock::NetConnectNotAllowedError, %r(Real HTTP connections are disabled. Unregistered request: GET http://disallowed.example.com))
295
- end
296
- end
297
-
298
- context "when the host is allowed" do
299
- it "should return stubbed response if request was stubbed" do
300
- stub_request(:get, 'https://httpstat.us/200').to_return(body: "abc")
301
- expect(http_request(:get, "https://httpstat.us/200").body).to eq("abc")
302
- end
303
-
304
- # WARNING: this makes a real HTTP request!
305
- it "should make a real request to allowed host", net_connect: true do
306
- expect(http_request(:get, "https://httpstat.us/200").status).to eq('200')
307
- end
308
- end
309
- end
310
-
311
- end
312
- end
313
- end
@@ -1,148 +0,0 @@
1
- shared_context "callbacks" do |*adapter_info|
2
- describe "when after_request callback is declared" do
3
- before(:each) do
4
- @called = nil
5
- WebMock.reset_callbacks
6
- stub_request(:get, "http://www.example.com")
7
- end
8
-
9
- it "should not invoke callback unless request is made" do
10
- WebMock.after_request {
11
- @called = true
12
- }
13
- expect(@called).to eq(nil)
14
- end
15
-
16
- it "should invoke a callback after request is made" do
17
- WebMock.after_request {
18
- @called = true
19
- }
20
- http_request(:get, "http://www.example.com/")
21
- expect(@called).to eq(true)
22
- end
23
-
24
- it "should not invoke a callback if this http library should be ignored" do
25
- WebMock.after_request(except: [http_library()]) {
26
- @called = true
27
- }
28
- http_request(:get, "http://www.example.com/")
29
- expect(@called).to eq(nil)
30
- end
31
-
32
- it "should invoke a callback even if other http libraries should be ignored" do
33
- WebMock.after_request(except: [:other_lib]) {
34
- @called = true
35
- }
36
- http_request(:get, "http://www.example.com/")
37
- expect(@called).to eq(true)
38
- end
39
-
40
- it "should pass request signature to the callback" do
41
- WebMock.after_request(except: [:other_lib]) do |request_signature, _|
42
- @request_signature = request_signature
43
- end
44
- http_request(:get, "http://www.example.com/")
45
- expect(@request_signature.uri.to_s).to eq("http://www.example.com:80/")
46
- end
47
-
48
- after(:each) do
49
- WebMock::StubRegistry.instance.global_stubs.clear
50
- end
51
-
52
- it 'passes the same request signature instance to the callback that was passed to the global stub callback' do
53
- global_stub_request_sig = after_request_request_sig = nil
54
- WebMock.globally_stub_request do |request_sig|
55
- global_stub_request_sig = request_sig
56
- nil
57
- end
58
-
59
- WebMock.after_request do |request_sig, _|
60
- after_request_request_sig = request_sig
61
- end
62
-
63
- http_request(:get, "http://www.example.com/")
64
- expect(global_stub_request_sig).to be(after_request_request_sig)
65
- end
66
-
67
- context "passing response to callback" do
68
- context "when request is stubbed" do
69
- before(:each) do
70
- stub_request(:get, "http://www.example.com").
71
- to_return(
72
- status: [200, "hello"],
73
- headers: {'Content-Length' => '666', 'Hello' => 'World'},
74
- body: "foo bar"
75
- )
76
- WebMock.after_request(except: [:other_lib]) do |_, response|
77
- @response = response
78
- end
79
- http_request(:get, "http://www.example.com/")
80
- end
81
-
82
- it "should pass response to callback with the status and message" do
83
- expect(@response.status).to eq([200, "hello"])
84
- end
85
-
86
- it "should pass response to callback with headers" do
87
- expect(@response.headers).to eq({
88
- 'Content-Length' => '666',
89
- 'Hello' => 'World'
90
- })
91
- end
92
-
93
- it "should pass response to callback with body" do
94
- expect(@response.body).to eq("foo bar")
95
- end
96
- end
97
-
98
- describe "when request is not stubbed", net_connect: true do
99
- before(:each) do
100
- WebMock.reset!
101
- WebMock.allow_net_connect!
102
- WebMock.after_request(except: [:other_lib]) do |_, response|
103
- @response = response
104
- end
105
- http_request(:get, "https://httpstat.us/201", headers: { "Accept" => "*" })
106
- end
107
-
108
- it "should pass real response to callback with status and message" do
109
- expect(@response.status[0]).to eq(201)
110
- expect(@response.status[1]).to eq("Created") unless adapter_info.include?(:no_status_message)
111
- end
112
-
113
- it "should pass real response to callback with headers" do
114
- expect(@response.headers["Server"]).to eq( "Kestrel")
115
- expect(@response.headers["Content-Length"]).to eq("11") unless adapter_info.include?(:no_content_length_header)
116
- end
117
-
118
- it "should pass response to callback with body" do
119
- expect(@response.body.size).to eq(11)
120
- end
121
- end
122
- end
123
-
124
- it "should invoke multiple callbacks in order of their declarations" do
125
- WebMock.after_request { @called = 1 }
126
- WebMock.after_request { @called += 1 }
127
- http_request(:get, "http://www.example.com/")
128
- expect(@called).to eq(2)
129
- end
130
-
131
- it "should invoke callbacks only for real requests if requested", net_connect: true do
132
- WebMock.after_request(real_requests_only: true) { @called = true }
133
- http_request(:get, "http://www.example.com/")
134
- expect(@called).to eq(nil)
135
- WebMock.allow_net_connect!
136
- http_request(:get, "http://www.example.net/")
137
- expect(@called).to eq(true)
138
- end
139
-
140
- it "should not invoke any callbacks after callbacks were reset" do
141
- WebMock.after_request { @called = 1 }
142
- WebMock.reset_callbacks
143
- stub_request(:get, "http://www.example.com/")
144
- http_request(:get, "http://www.example.com/")
145
- expect(@called).to eq(nil)
146
- end
147
- end
148
- end
@@ -1,36 +0,0 @@
1
- shared_context "complex cross-concern behaviors" do |*adapter_info|
2
- it 'allows a response with multiple values for the same header to be recorded and played back exactly as-is' do
3
- WebMock.allow_net_connect!
4
-
5
- recorded_response = nil
6
- WebMock.after_request { |_,r| recorded_response = r }
7
- real_response = http_request(:get, webmock_server_url)
8
-
9
- stub_request(:get, webmock_server_url).to_return(
10
- status: recorded_response.status,
11
- body: recorded_response.body,
12
- headers: recorded_response.headers
13
- )
14
-
15
- played_back_response = http_request(:get, webmock_server_url)
16
-
17
- expect(played_back_response.headers.keys).to include('Set-Cookie')
18
- expect(played_back_response).to eq(real_response)
19
- end
20
-
21
- let(:no_content_url) { 'https://httpstat.us/204' }
22
- [nil, ''].each do |stub_val|
23
- it "returns the same value (nil or "") for a request stubbed as #{stub_val.inspect} that a real empty response has", net_connect: true do
24
- unless http_library == :curb
25
- WebMock.allow_net_connect!
26
-
27
- real_response = http_request(:get, no_content_url)
28
- stub_request(:get, no_content_url).to_return(status: 204, body: stub_val)
29
- stubbed_response = http_request(:get, no_content_url)
30
-
31
- expect(stubbed_response.body).to eq(real_response.body)
32
- end
33
- end
34
- end
35
- end
36
-