typhoeus 0.6.3 → 0.6.4
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.
- checksums.yaml +15 -0
- data/.gitignore +8 -0
- data/.rspec +4 -0
- data/.travis.yml +10 -0
- data/CHANGELOG.md +7 -1
- data/CONTRIBUTING.md +16 -0
- data/Guardfile +9 -0
- data/README.md +303 -1
- data/UPGRADE.md +55 -0
- data/lib/rack/typhoeus/middleware/params_decoder.rb +1 -1
- data/lib/rack/typhoeus/middleware/params_decoder/helper.rb +6 -2
- data/lib/typhoeus/adapters/faraday.rb +4 -1
- data/lib/typhoeus/easy_factory.rb +36 -15
- data/lib/typhoeus/hydra/before.rb +2 -1
- data/lib/typhoeus/hydra/cacheable.rb +1 -0
- data/lib/typhoeus/hydra/memoizable.rb +1 -0
- data/lib/typhoeus/hydra/queueable.rb +15 -3
- data/lib/typhoeus/request.rb +6 -2
- data/lib/typhoeus/request/marshal.rb +3 -2
- data/lib/typhoeus/response/informations.rb +4 -0
- data/lib/typhoeus/version.rb +1 -1
- data/perf/profile.rb +14 -0
- data/perf/vs_nethttp.rb +64 -0
- data/spec/rack/typhoeus/middleware/params_decoder/helper_spec.rb +132 -0
- data/spec/rack/typhoeus/middleware/params_decoder_spec.rb +31 -0
- data/spec/spec_helper.rb +35 -0
- data/spec/support/localhost_server.rb +94 -0
- data/spec/support/server.rb +108 -0
- data/spec/typhoeus/adapters/faraday_spec.rb +245 -0
- data/spec/typhoeus/config_spec.rb +15 -0
- data/spec/typhoeus/easy_factory_spec.rb +96 -0
- data/spec/typhoeus/errors/no_stub_spec.rb +13 -0
- data/spec/typhoeus/expectation_spec.rb +273 -0
- data/spec/typhoeus/hydra/addable_spec.rb +22 -0
- data/spec/typhoeus/hydra/before_spec.rb +97 -0
- data/spec/typhoeus/hydra/block_connection_spec.rb +18 -0
- data/spec/typhoeus/hydra/cacheable_spec.rb +68 -0
- data/spec/typhoeus/hydra/memoizable_spec.rb +53 -0
- data/spec/typhoeus/hydra/queueable_spec.rb +34 -0
- data/spec/typhoeus/hydra/runnable_spec.rb +155 -0
- data/spec/typhoeus/hydra/stubbable_spec.rb +28 -0
- data/spec/typhoeus/hydra_spec.rb +26 -0
- data/spec/typhoeus/pool_spec.rb +79 -0
- data/spec/typhoeus/request/actions_spec.rb +19 -0
- data/spec/typhoeus/request/before_spec.rb +92 -0
- data/spec/typhoeus/request/block_connection_spec.rb +75 -0
- data/spec/typhoeus/request/cacheable_spec.rb +80 -0
- data/spec/typhoeus/request/callbacks_spec.rb +91 -0
- data/spec/typhoeus/request/marshal_spec.rb +62 -0
- data/spec/typhoeus/request/memoizable_spec.rb +34 -0
- data/spec/typhoeus/request/operations_spec.rb +70 -0
- data/spec/typhoeus/request/responseable_spec.rb +13 -0
- data/spec/typhoeus/request/stubbable_spec.rb +27 -0
- data/spec/typhoeus/request_spec.rb +131 -0
- data/spec/typhoeus/response/header_spec.rb +97 -0
- data/spec/typhoeus/response/informations_spec.rb +218 -0
- data/spec/typhoeus/response/status_spec.rb +218 -0
- data/spec/typhoeus/response_spec.rb +81 -0
- data/spec/typhoeus_spec.rb +105 -0
- data/typhoeus.gemspec +25 -0
- metadata +101 -27
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Typhoeus::Config do
|
4
|
+
let(:config) { Typhoeus::Config }
|
5
|
+
|
6
|
+
[:block_connection, :memoize, :verbose, :cache].each do |name|
|
7
|
+
it "responds to #{name}" do
|
8
|
+
expect(config).to respond_to(name)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "responds to #{name}=" do
|
12
|
+
expect(config).to respond_to("#{name}=")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Typhoeus::EasyFactory do
|
4
|
+
let(:base_url) { "http://localhost:3001" }
|
5
|
+
let(:hydra) { Typhoeus::Hydra.new(:max_concurrency => 0) }
|
6
|
+
let(:options) { {} }
|
7
|
+
let(:request) { Typhoeus::Request.new(base_url, options) }
|
8
|
+
let(:easy_factory) { described_class.new(request, hydra) }
|
9
|
+
|
10
|
+
describe "#get" do
|
11
|
+
context "when option[:cache_ttl]" do
|
12
|
+
let(:options) { {:cache_ttl => 1} }
|
13
|
+
|
14
|
+
it "creates Ethon::Easy" do
|
15
|
+
expect(easy_factory.get).to be_a(Ethon::Easy)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when invalid option" do
|
20
|
+
let(:options) { {:invalid => 1} }
|
21
|
+
|
22
|
+
it "reraises" do
|
23
|
+
expect{ easy_factory.get }.to raise_error(Ethon::Errors::InvalidOption)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "when removed option" do
|
28
|
+
let(:options) { {:cache_timeout => 1} }
|
29
|
+
|
30
|
+
it "reraises with help" do
|
31
|
+
expect{ easy_factory.get }.to raise_error(
|
32
|
+
Ethon::Errors::InvalidOption, /The option cache_timeout was removed/
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when changed option" do
|
38
|
+
let(:options) { {:proxy_auth_method => 1} }
|
39
|
+
|
40
|
+
it "reraises with help" do
|
41
|
+
expect{ easy_factory.get }.to raise_error(
|
42
|
+
Ethon::Errors::InvalidOption, /Please try proxyauth instead of proxy_auth_method/
|
43
|
+
)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context "when renamed option" do
|
48
|
+
let(:options) { {:connect_timeout => 1} }
|
49
|
+
|
50
|
+
it "warns" do
|
51
|
+
easy_factory.should_receive(:warn).with(
|
52
|
+
"Deprecated option connect_timeout. Please use connecttimeout instead."
|
53
|
+
)
|
54
|
+
easy_factory.get
|
55
|
+
end
|
56
|
+
|
57
|
+
it "passes correct option" do
|
58
|
+
easy_factory.should_receive(:warn)
|
59
|
+
easy_factory.easy.should_receive(:connecttimeout=).with(1)
|
60
|
+
easy_factory.get
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe "#set_callback" do
|
66
|
+
it "sets easy.on_complete callback" do
|
67
|
+
easy_factory.easy.should_receive(:on_complete)
|
68
|
+
easy_factory.send(:set_callback)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "finishes request" do
|
72
|
+
easy_factory.send(:set_callback)
|
73
|
+
request.should_receive(:finish)
|
74
|
+
easy_factory.easy.complete
|
75
|
+
end
|
76
|
+
|
77
|
+
it "resets easy" do
|
78
|
+
easy_factory.send(:set_callback)
|
79
|
+
easy_factory.easy.should_receive(:reset)
|
80
|
+
easy_factory.easy.complete
|
81
|
+
end
|
82
|
+
|
83
|
+
it "pushes easy back into the pool" do
|
84
|
+
easy_factory.send(:set_callback)
|
85
|
+
easy_factory.easy.complete
|
86
|
+
expect(Typhoeus::Pool.send(:easies)).to include(easy_factory.easy)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "adds next request" do
|
90
|
+
easy_factory.hydra.instance_variable_set(:@queued_requests, [request])
|
91
|
+
easy_factory.hydra.should_receive(:add).with(request)
|
92
|
+
easy_factory.send(:set_callback)
|
93
|
+
easy_factory.easy.complete
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Typhoeus::Errors::NoStub do
|
4
|
+
let(:base_url) { "localhost:3001" }
|
5
|
+
let(:request) { Typhoeus::Request.new(base_url) }
|
6
|
+
let(:message) { "The connection is blocked and no stub defined: " }
|
7
|
+
|
8
|
+
subject { Typhoeus::Errors::NoStub }
|
9
|
+
|
10
|
+
it "displays the request url" do
|
11
|
+
expect { raise subject.new(request) }.to raise_error(subject, message + base_url)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,273 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Typhoeus::Expectation do
|
4
|
+
let(:options) { {} }
|
5
|
+
let(:base_url) { "www.example.com" }
|
6
|
+
let(:expectation) { described_class.new(base_url, options) }
|
7
|
+
|
8
|
+
describe ".new" do
|
9
|
+
it "sets base_url" do
|
10
|
+
expect(expectation.instance_variable_get(:@base_url)).to eq(base_url)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "sets options" do
|
14
|
+
expect(expectation.instance_variable_get(:@options)).to eq(options)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "initializes response_counter" do
|
18
|
+
expect(expectation.instance_variable_get(:@response_counter)).to eq(0)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".all" do
|
23
|
+
context "when @expectations nil" do
|
24
|
+
it "returns empty array" do
|
25
|
+
expect(Typhoeus::Expectation.all).to eq([])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when @expectations not nil" do
|
30
|
+
let(:expectations) { [1] }
|
31
|
+
|
32
|
+
it "returns @expectations" do
|
33
|
+
Typhoeus::Expectation.instance_variable_set(:@expectations, expectations)
|
34
|
+
expect(Typhoeus::Expectation.all).to be(expectations)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe ".clear" do
|
40
|
+
let(:expectations) { double(:clear) }
|
41
|
+
|
42
|
+
it "clears all" do
|
43
|
+
expectations.should_receive(:clear)
|
44
|
+
Typhoeus::Expectation.instance_variable_set(:@expectations, expectations)
|
45
|
+
Typhoeus::Expectation.clear
|
46
|
+
Typhoeus::Expectation.instance_variable_set(:@expectations, nil)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe ".response_for" do
|
51
|
+
let(:request) { Typhoeus::Request.new("") }
|
52
|
+
let(:stubbed_response) { Typhoeus::Response.new }
|
53
|
+
|
54
|
+
it "finds a matching expectation and returns its next response" do
|
55
|
+
Typhoeus::Expectation.all << expectation
|
56
|
+
expectation.should_receive(:matches?).with(request).and_return(true)
|
57
|
+
expectation.should_receive(:response).with(request).and_return(stubbed_response)
|
58
|
+
|
59
|
+
response = Typhoeus::Expectation.response_for(request)
|
60
|
+
|
61
|
+
expect(response).to be(stubbed_response)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "returns nil if no matching expectation is found" do
|
65
|
+
response = Typhoeus::Expectation.response_for(request)
|
66
|
+
expect(response).to be(nil)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "#stubbed_from" do
|
71
|
+
it "sets value" do
|
72
|
+
expectation.stubbed_from(:webmock)
|
73
|
+
expect(expectation.from).to eq(:webmock)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns self" do
|
77
|
+
expect(expectation.stubbed_from(:webmock)).to be(expectation)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#and_return" do
|
82
|
+
context "when value" do
|
83
|
+
it "adds to responses" do
|
84
|
+
expectation.and_return(1)
|
85
|
+
expect(expectation.responses).to eq([1])
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "when array" do
|
90
|
+
it "adds to responses" do
|
91
|
+
pending
|
92
|
+
expectation.and_return([1, 2])
|
93
|
+
expect(expectation.responses).to eq([1, 2])
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context "when block" do
|
98
|
+
it "adds to responses" do
|
99
|
+
block = Proc.new {}
|
100
|
+
expectation.and_return(&block)
|
101
|
+
expect(expectation.responses).to eq([block])
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "#responses" do
|
107
|
+
it "returns responses" do
|
108
|
+
expect(expectation.responses).to be_a(Array)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "#response" do
|
113
|
+
let(:request) { Typhoeus::Request.new("") }
|
114
|
+
|
115
|
+
before { expectation.instance_variable_set(:@responses, responses) }
|
116
|
+
|
117
|
+
context "when one response" do
|
118
|
+
context "is pre-constructed" do
|
119
|
+
let(:responses) { [Typhoeus::Response.new] }
|
120
|
+
|
121
|
+
it "returns response" do
|
122
|
+
expect(expectation.response(request)).to be(responses[0])
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
context "is lazily-constructed" do
|
127
|
+
def construct_response(request)
|
128
|
+
@request_from_response_construction = request
|
129
|
+
lazily_constructed_response
|
130
|
+
end
|
131
|
+
|
132
|
+
let(:lazily_constructed_response) { Typhoeus::Response.new }
|
133
|
+
let(:responses) { [ Proc.new { |request| construct_response(request) } ] }
|
134
|
+
|
135
|
+
it "returns response" do
|
136
|
+
expect(expectation.response(request)).to be(lazily_constructed_response)
|
137
|
+
expect(@request_from_response_construction).to be(request)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
context "when multiple responses" do
|
143
|
+
let(:responses) { [Typhoeus::Response.new, Typhoeus::Response.new, Typhoeus::Response.new] }
|
144
|
+
|
145
|
+
it "returns one by one" do
|
146
|
+
3.times do |i|
|
147
|
+
expect(expectation.response(request)).to be(responses[i])
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
describe "#matches?" do
|
154
|
+
let(:request) { double(:base_url => nil) }
|
155
|
+
|
156
|
+
it "calls url_match?" do
|
157
|
+
expectation.should_receive(:url_match?)
|
158
|
+
expectation.matches?(request)
|
159
|
+
end
|
160
|
+
|
161
|
+
it "calls options_match?" do
|
162
|
+
expectation.should_receive(:url_match?).and_return(true)
|
163
|
+
expectation.should_receive(:options_match?)
|
164
|
+
expectation.matches?(request)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
describe "#url_match?" do
|
169
|
+
let(:request_url) { "www.example.com" }
|
170
|
+
let(:request) { Typhoeus::Request.new(request_url) }
|
171
|
+
let(:url_match) { expectation.method(:url_match?).call(request.base_url) }
|
172
|
+
|
173
|
+
context "when string" do
|
174
|
+
context "when match" do
|
175
|
+
it "returns true" do
|
176
|
+
expect(url_match).to be_true
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context "when no match" do
|
181
|
+
let(:base_url) { "no_match" }
|
182
|
+
|
183
|
+
it "returns false" do
|
184
|
+
expect(url_match).to be_false
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
context "when regexp" do
|
190
|
+
context "when match" do
|
191
|
+
let(:base_url) { /example/ }
|
192
|
+
|
193
|
+
it "returns true" do
|
194
|
+
expect(url_match).to be_true
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
context "when no match" do
|
199
|
+
let(:base_url) { /nomatch/ }
|
200
|
+
|
201
|
+
it "returns false" do
|
202
|
+
expect(url_match).to be_false
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
context "when nil" do
|
208
|
+
let(:base_url) { nil }
|
209
|
+
|
210
|
+
it "returns true" do
|
211
|
+
expect(url_match).to be_true
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
context "when not string, regexp, nil" do
|
216
|
+
let(:base_url) { 1 }
|
217
|
+
|
218
|
+
it "returns false" do
|
219
|
+
expect(url_match).to be_false
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
describe "options_match?" do
|
225
|
+
let(:request_options) { {} }
|
226
|
+
let(:request) { Typhoeus::Request.new(nil, request_options) }
|
227
|
+
let(:options_match) { expectation.method(:options_match?).call(request) }
|
228
|
+
|
229
|
+
context "when match" do
|
230
|
+
let(:options) { { :a => 1 } }
|
231
|
+
let(:request_options) { options }
|
232
|
+
|
233
|
+
it "returns true" do
|
234
|
+
expect(options_match).to be_true
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
context "when options are a subset from request_options" do
|
239
|
+
let(:options) { { :a => 1 } }
|
240
|
+
let(:request_options) { { :a => 1, :b => 2 } }
|
241
|
+
|
242
|
+
it "returns true" do
|
243
|
+
expect(options_match).to be_true
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
context "when options are nested" do
|
248
|
+
let(:options) { { :a => { :b => 1 } } }
|
249
|
+
let(:request_options) { options }
|
250
|
+
|
251
|
+
it "returns true" do
|
252
|
+
expect(options_match).to be_true
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
256
|
+
context "when options contains an array" do
|
257
|
+
let(:options) { { :a => [1, 2] } }
|
258
|
+
let(:request_options) { options }
|
259
|
+
|
260
|
+
it "returns true" do
|
261
|
+
expect(options_match).to be_true
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
context "when no match" do
|
266
|
+
let(:options) { { :a => 1 } }
|
267
|
+
|
268
|
+
it "returns false" do
|
269
|
+
expect(options_match).to be_false
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Typhoeus::Hydra::Addable do
|
4
|
+
let(:hydra) { Typhoeus::Hydra.new() }
|
5
|
+
let(:request) { Typhoeus::Request.new("localhost:3001", {:method => :get}) }
|
6
|
+
|
7
|
+
it "asks easy factory for an easy" do
|
8
|
+
multi = double
|
9
|
+
Typhoeus::EasyFactory.should_receive(:new).with(request, hydra).and_return(double(:get => 1))
|
10
|
+
hydra.should_receive(:multi).and_return(multi)
|
11
|
+
multi.should_receive(:add).with(1)
|
12
|
+
hydra.add(request)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "adds easy to multi" do
|
16
|
+
multi = double
|
17
|
+
Typhoeus::EasyFactory.should_receive(:new).with(request, hydra).and_return(double(:get => 1))
|
18
|
+
hydra.should_receive(:multi).and_return(multi)
|
19
|
+
multi.should_receive(:add).with(1)
|
20
|
+
hydra.add(request)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Typhoeus::Hydra::Before do
|
4
|
+
let(:request) { Typhoeus::Request.new("") }
|
5
|
+
let(:hydra) { Typhoeus::Hydra.new }
|
6
|
+
|
7
|
+
describe "#add" do
|
8
|
+
context "when before" do
|
9
|
+
context "when one" do
|
10
|
+
it "executes" do
|
11
|
+
Typhoeus.before { |r| String.new(r.base_url) }
|
12
|
+
String.should_receive(:new).and_return("")
|
13
|
+
hydra.add(request)
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when true" do
|
17
|
+
it "calls super" do
|
18
|
+
Typhoeus.before { true }
|
19
|
+
Typhoeus::Expectation.should_receive(:response_for)
|
20
|
+
hydra.add(request)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when falsy" do
|
25
|
+
context "when queue requests" do
|
26
|
+
let(:queued_request) { Typhoeus::Request.new("") }
|
27
|
+
|
28
|
+
before { hydra.queue(queued_request) }
|
29
|
+
|
30
|
+
it "dequeues" do
|
31
|
+
Typhoeus.before { false }
|
32
|
+
hydra.add(request)
|
33
|
+
expect(hydra.queued_requests).to be_empty
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when false" do
|
38
|
+
it "doesn't call super" do
|
39
|
+
Typhoeus.before { false }
|
40
|
+
Typhoeus::Expectation.should_receive(:response_for).never
|
41
|
+
hydra.add(request)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when response" do
|
46
|
+
it "doesn't call super" do
|
47
|
+
Typhoeus.before { Typhoeus::Response.new }
|
48
|
+
Typhoeus::Expectation.should_receive(:response_for).never
|
49
|
+
hydra.add(request)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when multi" do
|
56
|
+
context "when all true" do
|
57
|
+
before { 3.times { Typhoeus.before { |r| String.new(r.base_url) } } }
|
58
|
+
|
59
|
+
it "calls super" do
|
60
|
+
Typhoeus::Expectation.should_receive(:response_for)
|
61
|
+
hydra.add(request)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "executes all" do
|
65
|
+
String.should_receive(:new).exactly(3).times.and_return("")
|
66
|
+
hydra.add(request)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when middle false" do
|
71
|
+
before do
|
72
|
+
Typhoeus.before { |r| String.new(r.base_url) }
|
73
|
+
Typhoeus.before { |r| String.new(r.base_url); nil }
|
74
|
+
Typhoeus.before { |r| String.new(r.base_url) }
|
75
|
+
end
|
76
|
+
|
77
|
+
it "doesn't call super" do
|
78
|
+
Typhoeus::Expectation.should_receive(:response_for).never
|
79
|
+
hydra.add(request)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "executes only two" do
|
83
|
+
String.should_receive(:new).exactly(2).times.and_return("")
|
84
|
+
hydra.add(request)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "when no before" do
|
91
|
+
it "calls super" do
|
92
|
+
Typhoeus::Expectation.should_receive(:response_for)
|
93
|
+
hydra.add(request)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|