webmock 3.5.0 → 3.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +476 -2
  3. data/README.md +166 -42
  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 +228 -0
  12. data/lib/webmock/http_lib_adapters/curb_adapter.rb +14 -3
  13. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +22 -9
  14. data/lib/webmock/http_lib_adapters/excon_adapter.rb +5 -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 +4 -1
  18. data/lib/webmock/http_lib_adapters/http_rb/request.rb +17 -5
  19. data/lib/webmock/http_lib_adapters/http_rb/response.rb +49 -5
  20. data/lib/webmock/http_lib_adapters/http_rb/streamer.rb +11 -3
  21. data/lib/webmock/http_lib_adapters/http_rb/webmock.rb +8 -2
  22. data/lib/webmock/http_lib_adapters/http_rb_adapter.rb +7 -5
  23. data/lib/webmock/http_lib_adapters/httpclient_adapter.rb +25 -7
  24. data/lib/webmock/http_lib_adapters/manticore_adapter.rb +35 -15
  25. data/lib/webmock/http_lib_adapters/net_http.rb +59 -112
  26. data/lib/webmock/http_lib_adapters/net_http_response.rb +3 -1
  27. data/lib/webmock/http_lib_adapters/patron_adapter.rb +4 -2
  28. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +18 -2
  29. data/lib/webmock/matchers/any_arg_matcher.rb +2 -0
  30. data/lib/webmock/matchers/hash_argument_matcher.rb +2 -0
  31. data/lib/webmock/matchers/hash_excluding_matcher.rb +2 -0
  32. data/lib/webmock/matchers/hash_including_matcher.rb +2 -0
  33. data/lib/webmock/minitest.rb +2 -0
  34. data/lib/webmock/rack_response.rb +5 -1
  35. data/lib/webmock/request_body_diff.rb +3 -1
  36. data/lib/webmock/request_execution_verifier.rb +2 -0
  37. data/lib/webmock/request_pattern.rb +118 -61
  38. data/lib/webmock/request_registry.rb +2 -0
  39. data/lib/webmock/request_signature.rb +4 -2
  40. data/lib/webmock/request_signature_snippet.rb +2 -0
  41. data/lib/webmock/request_stub.rb +34 -0
  42. data/lib/webmock/response.rb +22 -14
  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 +4 -1
  48. data/lib/webmock/stub_registry.rb +28 -11
  49. data/lib/webmock/stub_request_snippet.rb +2 -0
  50. data/lib/webmock/test_unit.rb +3 -3
  51. data/lib/webmock/util/hash_counter.rb +12 -6
  52. data/lib/webmock/util/hash_keys_stringifier.rb +2 -0
  53. data/lib/webmock/util/hash_validator.rb +2 -0
  54. data/lib/webmock/util/headers.rb +23 -10
  55. data/lib/webmock/util/parsers/json.rb +72 -0
  56. data/lib/webmock/util/parsers/parse_error.rb +7 -0
  57. data/lib/webmock/util/parsers/xml.rb +16 -0
  58. data/lib/webmock/util/query_mapper.rb +6 -2
  59. data/lib/webmock/util/uri.rb +11 -9
  60. data/lib/webmock/util/values_stringifier.rb +2 -0
  61. data/lib/webmock/util/version_checker.rb +7 -5
  62. data/lib/webmock/version.rb +3 -1
  63. data/lib/webmock/webmock.rb +22 -3
  64. data/lib/webmock.rb +5 -2
  65. metadata +99 -175
  66. data/.gemtest +0 -0
  67. data/.gitignore +0 -34
  68. data/.rspec-tm +0 -2
  69. data/.travis.yml +0 -21
  70. data/Gemfile +0 -9
  71. data/Rakefile +0 -30
  72. data/lib/webmock/util/json.rb +0 -67
  73. data/minitest/test_helper.rb +0 -34
  74. data/minitest/test_webmock.rb +0 -9
  75. data/minitest/webmock_spec.rb +0 -60
  76. data/spec/acceptance/curb/curb_spec.rb +0 -481
  77. data/spec/acceptance/curb/curb_spec_helper.rb +0 -147
  78. data/spec/acceptance/em_http_request/em_http_request_spec.rb +0 -406
  79. data/spec/acceptance/em_http_request/em_http_request_spec_helper.rb +0 -77
  80. data/spec/acceptance/excon/excon_spec.rb +0 -77
  81. data/spec/acceptance/excon/excon_spec_helper.rb +0 -50
  82. data/spec/acceptance/http_rb/http_rb_spec.rb +0 -82
  83. data/spec/acceptance/http_rb/http_rb_spec_helper.rb +0 -54
  84. data/spec/acceptance/httpclient/httpclient_spec.rb +0 -217
  85. data/spec/acceptance/httpclient/httpclient_spec_helper.rb +0 -57
  86. data/spec/acceptance/manticore/manticore_spec.rb +0 -56
  87. data/spec/acceptance/manticore/manticore_spec_helper.rb +0 -35
  88. data/spec/acceptance/net_http/net_http_shared.rb +0 -153
  89. data/spec/acceptance/net_http/net_http_spec.rb +0 -331
  90. data/spec/acceptance/net_http/net_http_spec_helper.rb +0 -64
  91. data/spec/acceptance/net_http/real_net_http_spec.rb +0 -20
  92. data/spec/acceptance/patron/patron_spec.rb +0 -125
  93. data/spec/acceptance/patron/patron_spec_helper.rb +0 -54
  94. data/spec/acceptance/shared/allowing_and_disabling_net_connect.rb +0 -313
  95. data/spec/acceptance/shared/callbacks.rb +0 -147
  96. data/spec/acceptance/shared/complex_cross_concern_behaviors.rb +0 -36
  97. data/spec/acceptance/shared/enabling_and_disabling_webmock.rb +0 -95
  98. data/spec/acceptance/shared/precedence_of_stubs.rb +0 -15
  99. data/spec/acceptance/shared/request_expectations.rb +0 -923
  100. data/spec/acceptance/shared/returning_declared_responses.rb +0 -388
  101. data/spec/acceptance/shared/stubbing_requests.rb +0 -638
  102. data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +0 -135
  103. data/spec/acceptance/typhoeus/typhoeus_hydra_spec_helper.rb +0 -60
  104. data/spec/acceptance/webmock_shared.rb +0 -41
  105. data/spec/fixtures/test.txt +0 -1
  106. data/spec/quality_spec.rb +0 -84
  107. data/spec/spec_helper.rb +0 -48
  108. data/spec/support/example_curl_output.txt +0 -22
  109. data/spec/support/failures.rb +0 -9
  110. data/spec/support/my_rack_app.rb +0 -53
  111. data/spec/support/network_connection.rb +0 -19
  112. data/spec/support/webmock_server.rb +0 -69
  113. data/spec/unit/api_spec.rb +0 -175
  114. data/spec/unit/errors_spec.rb +0 -129
  115. data/spec/unit/http_lib_adapters/http_lib_adapter_registry_spec.rb +0 -17
  116. data/spec/unit/http_lib_adapters/http_lib_adapter_spec.rb +0 -12
  117. data/spec/unit/matchers/hash_excluding_matcher_spec.rb +0 -61
  118. data/spec/unit/matchers/hash_including_matcher_spec.rb +0 -87
  119. data/spec/unit/rack_response_spec.rb +0 -112
  120. data/spec/unit/request_body_diff_spec.rb +0 -90
  121. data/spec/unit/request_execution_verifier_spec.rb +0 -208
  122. data/spec/unit/request_pattern_spec.rb +0 -596
  123. data/spec/unit/request_registry_spec.rb +0 -95
  124. data/spec/unit/request_signature_snippet_spec.rb +0 -89
  125. data/spec/unit/request_signature_spec.rb +0 -155
  126. data/spec/unit/request_stub_spec.rb +0 -199
  127. data/spec/unit/response_spec.rb +0 -282
  128. data/spec/unit/stub_registry_spec.rb +0 -103
  129. data/spec/unit/stub_request_snippet_spec.rb +0 -115
  130. data/spec/unit/util/hash_counter_spec.rb +0 -39
  131. data/spec/unit/util/hash_keys_stringifier_spec.rb +0 -27
  132. data/spec/unit/util/headers_spec.rb +0 -28
  133. data/spec/unit/util/json_spec.rb +0 -33
  134. data/spec/unit/util/query_mapper_spec.rb +0 -150
  135. data/spec/unit/util/uri_spec.rb +0 -299
  136. data/spec/unit/util/version_checker_spec.rb +0 -65
  137. data/spec/unit/webmock_spec.rb +0 -11
  138. data/test/http_request.rb +0 -24
  139. data/test/shared_test.rb +0 -108
  140. data/test/test_helper.rb +0 -23
  141. data/test/test_webmock.rb +0 -6
  142. data/webmock.gemspec +0 -46
@@ -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,155 +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
- expect(WebMock::Util::Headers).to receive(:normalize_headers).with('A' => 'a').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 false if the headers are NOT urlencoded" do
129
- subject.headers = { "Content-Type" => "application/made-up-format" }
130
- expect(subject.url_encoded?).to be false
131
- end
132
-
133
- it "returns false when no headers are set" do
134
- subject.headers = nil
135
- expect(subject.url_encoded?).to be false
136
- end
137
- end
138
-
139
- describe "#json_headers?" do
140
- it "returns true if the headers are json" do
141
- subject.headers = { "Content-Type" => "application/json" }
142
- expect(subject.json_headers?).to be true
143
- end
144
-
145
- it "returns false if the headers are NOT json" do
146
- subject.headers = { "Content-Type" => "application/made-up-format" }
147
- expect(subject.json_headers?).to be false
148
- end
149
-
150
- it "returns false when no headers are set" do
151
- subject.headers = nil
152
- expect(subject.json_headers?).to be false
153
- end
154
- end
155
- end
@@ -1,199 +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 "then" do
54
- it "should return stub without any modifications, acting as syntactic sugar" do
55
- expect(@request_stub.then).to eq(@request_stub)
56
- end
57
- end
58
-
59
- describe "response" do
60
-
61
- it "should return responses in a sequence passed as array" do
62
- @request_stub.to_return([{body: "abc"}, {body: "def"}])
63
- expect(@request_stub.response.body).to eq("abc")
64
- expect(@request_stub.response.body).to eq("def")
65
- end
66
-
67
- it "should repeat returning last response" do
68
- @request_stub.to_return([{body: "abc"}, {body: "def"}])
69
- @request_stub.response
70
- @request_stub.response
71
- expect(@request_stub.response.body).to eq("def")
72
- end
73
-
74
- it "should return responses in a sequence passed as comma separated params" do
75
- @request_stub.to_return({body: "abc"}, {body: "def"})
76
- expect(@request_stub.response.body).to eq("abc")
77
- expect(@request_stub.response.body).to eq("def")
78
- end
79
-
80
- it "should return responses declared in multiple to_return declarations" do
81
- @request_stub.to_return({body: "abc"}).to_return({body: "def"})
82
- expect(@request_stub.response.body).to eq("abc")
83
- expect(@request_stub.response.body).to eq("def")
84
- end
85
-
86
- end
87
-
88
- describe "to_raise" do
89
-
90
- it "should assign response with exception to be thrown" do
91
- @request_stub.to_raise(ArgumentError)
92
- expect {
93
- @request_stub.response.raise_error_if_any
94
- }.to raise_error(ArgumentError, "Exception from WebMock")
95
- end
96
-
97
- it "should assign sequence of responses with response with exception to be thrown" do
98
- @request_stub.to_return(body: "abc").then.to_raise(ArgumentError)
99
- expect(@request_stub.response.body).to eq("abc")
100
- expect {
101
- @request_stub.response.raise_error_if_any
102
- }.to raise_error(ArgumentError, "Exception from WebMock")
103
- end
104
-
105
- it "should assign a list responses to be thrown in a sequence" do
106
- @request_stub.to_raise(ArgumentError, IndexError)
107
- expect {
108
- @request_stub.response.raise_error_if_any
109
- }.to raise_error(ArgumentError, "Exception from WebMock")
110
- expect {
111
- @request_stub.response.raise_error_if_any
112
- }.to raise_error(IndexError, "Exception from WebMock")
113
- end
114
-
115
- it "should raise exceptions declared in multiple to_raise declarations" do
116
- @request_stub.to_raise(ArgumentError).then.to_raise(IndexError)
117
- expect {
118
- @request_stub.response.raise_error_if_any
119
- }.to raise_error(ArgumentError, "Exception from WebMock")
120
- expect {
121
- @request_stub.response.raise_error_if_any
122
- }.to raise_error(IndexError, "Exception from WebMock")
123
- end
124
-
125
- end
126
-
127
- describe "to_timeout" do
128
-
129
- it "should assign response with timeout" do
130
- @request_stub.to_timeout
131
- expect(@request_stub.response.should_timeout).to be_truthy
132
- end
133
-
134
- it "should assign sequence of responses with response with timeout" do
135
- @request_stub.to_return(body: "abc").then.to_timeout
136
- expect(@request_stub.response.body).to eq("abc")
137
- expect(@request_stub.response.should_timeout).to be_truthy
138
- end
139
-
140
- it "should allow multiple timeouts to be declared" do
141
- @request_stub.to_timeout.then.to_timeout.then.to_return(body: "abc")
142
- expect(@request_stub.response.should_timeout).to be_truthy
143
- expect(@request_stub.response.should_timeout).to be_truthy
144
- expect(@request_stub.response.body).to eq("abc")
145
- end
146
-
147
- end
148
-
149
-
150
- describe "times" do
151
-
152
- it "should give error if declared before any response declaration is declared" do
153
- expect {
154
- @request_stub.times(3)
155
- }.to raise_error("Invalid WebMock stub declaration. times(N) can be declared only after response declaration.")
156
- end
157
-
158
- it "should repeat returning last declared response declared number of times" do
159
- @request_stub.to_return({body: "abc"}).times(2).then.to_return({body: "def"})
160
- expect(@request_stub.response.body).to eq("abc")
161
- expect(@request_stub.response.body).to eq("abc")
162
- expect(@request_stub.response.body).to eq("def")
163
- end
164
-
165
- it "should repeat raising last declared exception declared number of times" do
166
- @request_stub.to_return({body: "abc"}).times(2).then.to_return({body: "def"})
167
- expect(@request_stub.response.body).to eq("abc")
168
- expect(@request_stub.response.body).to eq("abc")
169
- expect(@request_stub.response.body).to eq("def")
170
- end
171
-
172
- it "should repeat returning last declared sequence of responses declared number of times" do
173
- @request_stub.to_return({body: "abc"}, {body: "def"}).times(2).then.to_return({body: "ghj"})
174
- expect(@request_stub.response.body).to eq("abc")
175
- expect(@request_stub.response.body).to eq("def")
176
- expect(@request_stub.response.body).to eq("abc")
177
- expect(@request_stub.response.body).to eq("def")
178
- expect(@request_stub.response.body).to eq("ghj")
179
- end
180
-
181
- it "should return self" do
182
- expect(@request_stub.to_return({body: "abc"}).times(1)).to eq(@request_stub)
183
- end
184
-
185
- it "should raise error if argument is not integer" do
186
- expect {
187
- @request_stub.to_return({body: "abc"}).times("not number")
188
- }.to raise_error("times(N) accepts integers >= 1 only")
189
- end
190
-
191
- it "should raise error if argument is < 1" do
192
- expect {
193
- @request_stub.to_return({body: "abc"}).times(0)
194
- }.to raise_error("times(N) accepts integers >= 1 only")
195
- end
196
-
197
- end
198
-
199
- end