webmock 3.18.1 → 3.19.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 (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,95 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WebMock::RequestRegistry do
4
-
5
- before(:each) do
6
- WebMock::RequestRegistry.instance.reset!
7
- @request_pattern = WebMock::RequestPattern.new(:get, "www.example.com")
8
- @request_signature = WebMock::RequestSignature.new(:get, "www.example.com")
9
- end
10
-
11
- describe "reset!" do
12
- before(:each) do
13
- WebMock::RequestRegistry.instance.requested_signatures.put(@request_signature)
14
- end
15
-
16
- it "should clean list of executed requests" do
17
- expect(WebMock::RequestRegistry.instance.times_executed(@request_pattern)).to eq(1)
18
- WebMock::RequestRegistry.instance.reset!
19
- expect(WebMock::RequestRegistry.instance.times_executed(@request_pattern)).to eq(0)
20
- end
21
-
22
- end
23
-
24
- describe "times executed" do
25
-
26
- before(:each) do
27
- @request_stub1 = WebMock::RequestStub.new(:get, "www.example.com")
28
- @request_stub2 = WebMock::RequestStub.new(:get, "www.example.net")
29
- @request_stub3 = WebMock::RequestStub.new(:get, "www.example.org")
30
- WebMock::RequestRegistry.instance.requested_signatures.put(WebMock::RequestSignature.new(:get, "www.example.com"))
31
- WebMock::RequestRegistry.instance.requested_signatures.put(WebMock::RequestSignature.new(:get, "www.example.com"))
32
- WebMock::RequestRegistry.instance.requested_signatures.put(WebMock::RequestSignature.new(:get, "www.example.org"))
33
- end
34
-
35
- it "should report 0 if no request matching pattern was requested" do
36
- expect(WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, "www.example.net"))).to eq(0)
37
- end
38
-
39
- it "should report number of times matching pattern was requested" do
40
- expect(WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, "www.example.com"))).to eq(2)
41
- end
42
-
43
- it "should report number of times all matching pattern were requested" do
44
- expect(WebMock::RequestRegistry.instance.times_executed(WebMock::RequestPattern.new(:get, /.*example.*/))).to eq(3)
45
- end
46
-
47
- describe "multithreading" do
48
- let(:request_pattern) { WebMock::RequestPattern.new(:get, "www.example.com") }
49
-
50
- # Reproduce a multithreading issue that causes a RuntimeError:
51
- # can't add a new key into hash during iteration.
52
- it "works normally iterating on the requested signature hash while another thread is setting it" do
53
- thread_injected = false
54
- allow(request_pattern).to receive(:matches?).and_wrap_original do |m, *args|
55
- unless thread_injected
56
- thread_injected = true
57
- Thread.new { WebMock::RequestRegistry.instance.requested_signatures.put(:abc) }.join(0.1)
58
- end
59
- m.call(*args)
60
- end
61
- expect(WebMock::RequestRegistry.instance.times_executed(request_pattern)).to eq(2)
62
- sleep 0.1 while !WebMock::RequestRegistry.instance.requested_signatures.hash.key?(:abc)
63
- end
64
- end
65
- end
66
-
67
- describe "request_signatures" do
68
- it "should return hash of unique request signatures with accumulated number" do
69
- WebMock::RequestRegistry.instance.requested_signatures.put(WebMock::RequestSignature.new(:get, "www.example.com"))
70
- WebMock::RequestRegistry.instance.requested_signatures.put(WebMock::RequestSignature.new(:get, "www.example.com"))
71
- expect(WebMock::RequestRegistry.instance.requested_signatures.
72
- get(WebMock::RequestSignature.new(:get, "www.example.com"))).to eq(2)
73
- end
74
- end
75
-
76
- describe "to_s" do
77
- it "should output string with all executed requests and numbers of executions" do
78
- [
79
- WebMock::RequestSignature.new(:get, "www.example.com"),
80
- WebMock::RequestSignature.new(:get, "www.example.com"),
81
- WebMock::RequestSignature.new(:put, "www.example.org"),
82
- ].each do |s|
83
- WebMock::RequestRegistry.instance.requested_signatures.put(s)
84
- end
85
- expect(WebMock::RequestRegistry.instance.to_s).to eq(
86
- "GET http://www.example.com/ was made 2 times\nPUT http://www.example.org/ was made 1 time\n"
87
- )
88
- end
89
-
90
- it "should output info if no requests were executed" do
91
- expect(WebMock::RequestRegistry.instance.to_s).to eq("No requests were made.")
92
- end
93
- end
94
-
95
- end
@@ -1,89 +0,0 @@
1
- require "spec_helper"
2
-
3
- RSpec.describe WebMock::RequestSignatureSnippet do
4
- it("is real"){expect{subject}.not_to(raise_error)}
5
-
6
- subject { WebMock::RequestSignatureSnippet.new(request_signature) }
7
-
8
- let(:uri) { "http://example.com" }
9
- let(:method) { "GET" }
10
-
11
- let(:request_signature) { WebMock::RequestSignature.new(method, uri) }
12
- let(:request_signature_body) { {"key" => "different value"}.to_json }
13
-
14
- let(:request_pattern) {
15
- WebMock::RequestPattern.new(
16
- method, uri, {body: request_signature_body}
17
- )
18
- }
19
-
20
- before :each do
21
- request_signature.headers = {"Content-Type" => "application/json"}
22
- request_signature.body = request_signature_body
23
- end
24
-
25
- describe "#stubbing_instructions" do
26
- context "with stubbing instructions turned off" do
27
- before :each do
28
- WebMock.hide_stubbing_instructions!
29
- end
30
-
31
- it "returns nil" do
32
- expect(subject.stubbing_instructions).to be nil
33
- end
34
-
35
- after :each do
36
- WebMock.show_stubbing_instructions!
37
- end
38
- end
39
-
40
- context "with stubbing instructions turned on" do
41
- it "returns a stub snippet" do
42
- expect(subject.stubbing_instructions).to include(
43
- "You can stub this request with the following snippet:"
44
- )
45
- end
46
- end
47
- end
48
-
49
- describe "#request_stubs" do
50
- before :each do
51
- WebMock.stub_request(:get, "https://www.example.com").with(body: {"a" => "b"})
52
- end
53
-
54
- context "when showing the body diff is turned off" do
55
- before :each do
56
- WebMock.hide_body_diff!
57
- end
58
-
59
- it "returns does not show the body diff" do
60
- result = subject.request_stubs
61
- result.sub!("registered request stubs:\n\n", "")
62
- expect(result).to eq(
63
- "stub_request(:get, \"https://www.example.com/\").\n with(\n body: {\"a\"=>\"b\"})"
64
- )
65
- end
66
-
67
- after :each do
68
- WebMock.show_body_diff!
69
- end
70
- end
71
-
72
- context "when showing the body diff is turned on" do
73
- it "shows the body diff" do
74
- result = subject.request_stubs
75
- result.sub!("registered request stubs:\n\n", "")
76
- expect(result).to eq(
77
- "stub_request(:get, \"https://www.example.com/\").\n with(\n body: {\"a\"=>\"b\"})\n\nBody diff:\n [[\"-\", \"key\", \"different value\"], [\"+\", \"a\", \"b\"]]\n"
78
- )
79
- end
80
- end
81
-
82
- context "with no request stubs" do
83
- it "returns nil" do
84
- WebMock.reset!
85
- expect(subject.request_stubs).to be nil
86
- end
87
- end
88
- end
89
- end
@@ -1,175 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WebMock::RequestSignature do
4
-
5
- describe "initialization" do
6
-
7
- it "assign the uri to be the normalized uri" do
8
- expect(WebMock::Util::URI).to receive(:normalize_uri).and_return("www.example.kom")
9
- signature = WebMock::RequestSignature.new(:get, "www.example.com")
10
- expect(signature.uri).to eq("www.example.kom")
11
- end
12
-
13
- it "assigns the uri without normalization if uri is already a URI" do
14
- expect(WebMock::Util::URI).not_to receive(:normalize_uri)
15
- uri = Addressable::URI.parse("www.example.com")
16
- signature = WebMock::RequestSignature.new(:get, uri)
17
- expect(signature.uri).to eq(uri)
18
- end
19
-
20
- it "assigns normalized headers" do
21
- allow(WebMock::Util::Headers).to receive(:normalize_headers).with({'A' => 'a'}.freeze).and_return('B' => 'b')
22
- expect(
23
- WebMock::RequestSignature.new(:get, "www.example.com", headers: {'A' => 'a'}).headers
24
- ).to eq({'B' => 'b'})
25
- end
26
-
27
- it "assign the body" do
28
- expect(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc").body).to eq("abc")
29
- end
30
-
31
- it "symbolizes the method" do
32
- expect(WebMock::RequestSignature.new('get', "www.example.com", body: "abc").method).to eq(:get)
33
- end
34
- end
35
-
36
- describe "#to_s" do
37
- it "describes itself" do
38
- expect(WebMock::RequestSignature.new(:get, "www.example.com",
39
- body: "abc", headers: {'A' => 'a', 'B' => 'b'}).to_s).to eq(
40
- "GET http://www.example.com/ with body 'abc' with headers {'A'=>'a', 'B'=>'b'}"
41
- )
42
- end
43
- end
44
-
45
- describe "#hash" do
46
- it "reporst same hash for two signatures with the same values" do
47
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
48
- body: "abc", headers: {'A' => 'a', 'B' => 'b'})
49
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
50
- body: "abc", headers: {'A' => 'a', 'B' => 'b'})
51
- expect(signature1.hash).to eq(signature2.hash)
52
- end
53
-
54
- it "reports different hash for two signatures with different method" do
55
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
56
- signature2 = WebMock::RequestSignature.new(:put, "www.example.com")
57
- expect(signature1.hash).not_to eq(signature2.hash)
58
- end
59
-
60
- it "reports different hash for two signatures with different uri" do
61
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
62
- signature2 = WebMock::RequestSignature.new(:get, "www.example.org")
63
- expect(signature1.hash).not_to eq(signature2.hash)
64
- end
65
-
66
- it "reports different hash for two signatures with different body" do
67
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com", body: "abc")
68
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com", body: "def")
69
- expect(signature1.hash).not_to eq(signature2.hash)
70
- end
71
-
72
- it "reports different hash for two signatures with different headers" do
73
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
74
- headers: {'A' => 'a'})
75
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
76
- headers: {'A' => 'A'})
77
- expect(signature1.hash).not_to eq(signature2.hash)
78
- end
79
- end
80
-
81
- [:==, :eql?].each do |method|
82
- describe method do
83
- it "is true for two signatures with the same values" do
84
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
85
- body: "abc", headers: {'A' => 'a', 'B' => 'b'})
86
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
87
- body: "abc", headers: {'A' => 'a', 'B' => 'b'})
88
-
89
- expect(signature1.send(method, signature2)).to be_truthy
90
- end
91
-
92
- it "is false for two signatures with different method" do
93
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
94
- signature2 = WebMock::RequestSignature.new(:put, "www.example.com")
95
- expect(signature1.send(method, signature2)).to be_falsey
96
- end
97
-
98
- it "is false for two signatures with different uri" do
99
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com")
100
- signature2 = WebMock::RequestSignature.new(:get, "www.example.org")
101
- expect(signature1.send(method, signature2)).to be_falsey
102
- end
103
-
104
- it "is false for two signatures with different body" do
105
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com", body: "abc")
106
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com", body: "def")
107
- expect(signature1.send(method, signature2)).to be_falsey
108
- end
109
-
110
- it "is false for two signatures with different headers" do
111
- signature1 = WebMock::RequestSignature.new(:get, "www.example.com",
112
- headers: {'A' => 'a'})
113
- signature2 = WebMock::RequestSignature.new(:get, "www.example.com",
114
- headers: {'A' => 'A'})
115
- expect(signature1.send(method, signature2)).to be_falsey
116
- end
117
- end
118
- end
119
-
120
- subject { WebMock::RequestSignature.new(:get, "www.example.com") }
121
-
122
- describe "#url_encoded?" do
123
- it "returns true if the headers are urlencoded" do
124
- subject.headers = { "Content-Type" => "application/x-www-form-urlencoded" }
125
- expect(subject.url_encoded?).to be true
126
- end
127
-
128
- it "returns true if the headers are urlencoded with a specified charset" do
129
- subject.headers = { "Content-Type" => "application/x-www-form-urlencoded; charset=UTF-8" }
130
- expect(subject.url_encoded?).to be true
131
- end
132
-
133
- it "returns false if the headers are NOT urlencoded" do
134
- subject.headers = { "Content-Type" => "application/made-up-format" }
135
- expect(subject.url_encoded?).to be false
136
- end
137
-
138
- it "returns false when no content type header is present" do
139
- subject.headers = { "Some-Header" => "some-value" }
140
- expect(subject.url_encoded?).to be false
141
- end
142
-
143
- it "returns false when no headers are set" do
144
- subject.headers = nil
145
- expect(subject.url_encoded?).to be false
146
- end
147
- end
148
-
149
- describe "#json_headers?" do
150
- it "returns true if the headers are json" do
151
- subject.headers = { "Content-Type" => "application/json" }
152
- expect(subject.json_headers?).to be true
153
- end
154
-
155
- it "returns true if the headers are json with a specified charset" do
156
- subject.headers = { "Content-Type" => "application/json; charset=UTF-8" }
157
- expect(subject.json_headers?).to be true
158
- end
159
-
160
- it "returns false if the headers are NOT json" do
161
- subject.headers = { "Content-Type" => "application/made-up-format" }
162
- expect(subject.json_headers?).to be false
163
- end
164
-
165
- it "returns false when no content type header is present" do
166
- subject.headers = { "Some-Header" => "some-value" }
167
- expect(subject.json_headers?).to be false
168
- end
169
-
170
- it "returns false when no headers are set" do
171
- subject.headers = nil
172
- expect(subject.json_headers?).to be false
173
- end
174
- end
175
- end
@@ -1,234 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe WebMock::RequestStub do
4
-
5
- before(:each) do
6
- @request_stub = WebMock::RequestStub.new(:get, "www.example.com")
7
- end
8
-
9
- it "should have request pattern with method and uri" do
10
- expect(@request_stub.request_pattern.to_s).to eq("GET http://www.example.com/")
11
- end
12
-
13
- it "should have response" do
14
- expect(@request_stub.response).to be_a(WebMock::Response)
15
- end
16
-
17
- describe "with" do
18
-
19
- it "should assign body to request pattern" do
20
- @request_stub.with(body: "abc")
21
- expect(@request_stub.request_pattern.to_s).to eq(WebMock::RequestPattern.new(:get, "www.example.com", body: "abc").to_s)
22
- end
23
-
24
- it "should assign normalized headers to request pattern" do
25
- @request_stub.with(headers: {'A' => 'a'})
26
- expect(@request_stub.request_pattern.to_s).to eq(
27
- WebMock::RequestPattern.new(:get, "www.example.com", headers: {'A' => 'a'}).to_s
28
- )
29
- end
30
-
31
- it "should assign given block to request profile" do
32
- @request_stub.with { |req| req.body == "abc" }
33
- expect(@request_stub.request_pattern.matches?(WebMock::RequestSignature.new(:get, "www.example.com", body: "abc"))).to be_truthy
34
- end
35
-
36
- end
37
-
38
- describe "to_return" do
39
-
40
- it "should assign response with provided options" do
41
- @request_stub.to_return(body: "abc", status: 500)
42
- expect(@request_stub.response.body).to eq("abc")
43
- expect(@request_stub.response.status).to eq([500, ""])
44
- end
45
-
46
- it "should assign responses with provided options" do
47
- @request_stub.to_return([{body: "abc"}, {body: "def"}])
48
- expect([@request_stub.response.body, @request_stub.response.body]).to eq(["abc", "def"])
49
- end
50
-
51
- end
52
-
53
- describe "to_return_json" do
54
-
55
- it "should raise if a block is given" do
56
- expect {
57
- @request_stub.to_return_json(body: "abc", status: 500) { puts "don't call me" }
58
- }.to raise_error(ArgumentError, '#to_return_json does not support passing a block')
59
- end
60
-
61
- it "should assign responses normally" do
62
- @request_stub.to_return_json([{body: "abc"}, {body: "def"}])
63
- expect([@request_stub.response.body, @request_stub.response.body]).to eq(["abc", "def"])
64
- end
65
-
66
- it "should json-ify a Hash body" do
67
- @request_stub.to_return_json(body: {abc: "def"}, status: 500)
68
- expect(@request_stub.response.body).to eq({abc: "def"}.to_json)
69
- expect(@request_stub.response.status).to eq([500, ""])
70
- end
71
-
72
- it "should apply the content_type header" do
73
- @request_stub.to_return_json(body: {abc: "def"}, status: 500)
74
- expect(@request_stub.response.headers).to eq({"Content-Type"=>"application/json"})
75
- end
76
-
77
- it "should preserve existing headers" do
78
- @request_stub.to_return_json(headers: {"A" => "a"}, body: "")
79
- expect(@request_stub.response.headers).to eq({"A"=>"a", "Content-Type"=>"application/json"})
80
- end
81
-
82
- it "should allow callsites to override content_type header" do
83
- @request_stub.to_return_json(headers: {content_type: 'application/super-special-json'})
84
- expect(@request_stub.response.headers).to eq({"Content-Type"=>"application/super-special-json"})
85
- end
86
- end
87
-
88
- describe "then" do
89
- it "should return stub without any modifications, acting as syntactic sugar" do
90
- expect(@request_stub.then).to eq(@request_stub)
91
- end
92
- end
93
-
94
- describe "response" do
95
-
96
- it "should return responses in a sequence passed as array" do
97
- @request_stub.to_return([{body: "abc"}, {body: "def"}])
98
- expect(@request_stub.response.body).to eq("abc")
99
- expect(@request_stub.response.body).to eq("def")
100
- end
101
-
102
- it "should repeat returning last response" do
103
- @request_stub.to_return([{body: "abc"}, {body: "def"}])
104
- @request_stub.response
105
- @request_stub.response
106
- expect(@request_stub.response.body).to eq("def")
107
- end
108
-
109
- it "should return responses in a sequence passed as comma separated params" do
110
- @request_stub.to_return({body: "abc"}, {body: "def"})
111
- expect(@request_stub.response.body).to eq("abc")
112
- expect(@request_stub.response.body).to eq("def")
113
- end
114
-
115
- it "should return responses declared in multiple to_return declarations" do
116
- @request_stub.to_return({body: "abc"}).to_return({body: "def"})
117
- expect(@request_stub.response.body).to eq("abc")
118
- expect(@request_stub.response.body).to eq("def")
119
- end
120
-
121
- end
122
-
123
- describe "to_raise" do
124
-
125
- it "should assign response with exception to be thrown" do
126
- @request_stub.to_raise(ArgumentError)
127
- expect {
128
- @request_stub.response.raise_error_if_any
129
- }.to raise_error(ArgumentError, "Exception from WebMock")
130
- end
131
-
132
- it "should assign sequence of responses with response with exception to be thrown" do
133
- @request_stub.to_return(body: "abc").then.to_raise(ArgumentError)
134
- expect(@request_stub.response.body).to eq("abc")
135
- expect {
136
- @request_stub.response.raise_error_if_any
137
- }.to raise_error(ArgumentError, "Exception from WebMock")
138
- end
139
-
140
- it "should assign a list responses to be thrown in a sequence" do
141
- @request_stub.to_raise(ArgumentError, IndexError)
142
- expect {
143
- @request_stub.response.raise_error_if_any
144
- }.to raise_error(ArgumentError, "Exception from WebMock")
145
- expect {
146
- @request_stub.response.raise_error_if_any
147
- }.to raise_error(IndexError, "Exception from WebMock")
148
- end
149
-
150
- it "should raise exceptions declared in multiple to_raise declarations" do
151
- @request_stub.to_raise(ArgumentError).then.to_raise(IndexError)
152
- expect {
153
- @request_stub.response.raise_error_if_any
154
- }.to raise_error(ArgumentError, "Exception from WebMock")
155
- expect {
156
- @request_stub.response.raise_error_if_any
157
- }.to raise_error(IndexError, "Exception from WebMock")
158
- end
159
-
160
- end
161
-
162
- describe "to_timeout" do
163
-
164
- it "should assign response with timeout" do
165
- @request_stub.to_timeout
166
- expect(@request_stub.response.should_timeout).to be_truthy
167
- end
168
-
169
- it "should assign sequence of responses with response with timeout" do
170
- @request_stub.to_return(body: "abc").then.to_timeout
171
- expect(@request_stub.response.body).to eq("abc")
172
- expect(@request_stub.response.should_timeout).to be_truthy
173
- end
174
-
175
- it "should allow multiple timeouts to be declared" do
176
- @request_stub.to_timeout.then.to_timeout.then.to_return(body: "abc")
177
- expect(@request_stub.response.should_timeout).to be_truthy
178
- expect(@request_stub.response.should_timeout).to be_truthy
179
- expect(@request_stub.response.body).to eq("abc")
180
- end
181
-
182
- end
183
-
184
-
185
- describe "times" do
186
-
187
- it "should give error if declared before any response declaration is declared" do
188
- expect {
189
- @request_stub.times(3)
190
- }.to raise_error("Invalid WebMock stub declaration. times(N) can be declared only after response declaration.")
191
- end
192
-
193
- it "should repeat returning last declared response declared number of times" do
194
- @request_stub.to_return({body: "abc"}).times(2).then.to_return({body: "def"})
195
- expect(@request_stub.response.body).to eq("abc")
196
- expect(@request_stub.response.body).to eq("abc")
197
- expect(@request_stub.response.body).to eq("def")
198
- end
199
-
200
- it "should repeat raising last declared exception declared number of times" do
201
- @request_stub.to_return({body: "abc"}).times(2).then.to_return({body: "def"})
202
- expect(@request_stub.response.body).to eq("abc")
203
- expect(@request_stub.response.body).to eq("abc")
204
- expect(@request_stub.response.body).to eq("def")
205
- end
206
-
207
- it "should repeat returning last declared sequence of responses declared number of times" do
208
- @request_stub.to_return({body: "abc"}, {body: "def"}).times(2).then.to_return({body: "ghj"})
209
- expect(@request_stub.response.body).to eq("abc")
210
- expect(@request_stub.response.body).to eq("def")
211
- expect(@request_stub.response.body).to eq("abc")
212
- expect(@request_stub.response.body).to eq("def")
213
- expect(@request_stub.response.body).to eq("ghj")
214
- end
215
-
216
- it "should return self" do
217
- expect(@request_stub.to_return({body: "abc"}).times(1)).to eq(@request_stub)
218
- end
219
-
220
- it "should raise error if argument is not integer" do
221
- expect {
222
- @request_stub.to_return({body: "abc"}).times("not number")
223
- }.to raise_error("times(N) accepts integers >= 1 only")
224
- end
225
-
226
- it "should raise error if argument is < 1" do
227
- expect {
228
- @request_stub.to_return({body: "abc"}).times(0)
229
- }.to raise_error("times(N) accepts integers >= 1 only")
230
- end
231
-
232
- end
233
-
234
- end