webmock 1.4.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,28 @@
1
1
  #Changelog
2
2
 
3
+ ## 1.5.0
4
+
5
+ * Support for dynamically evaluated raw responses recorded with `curl -is` <br/>
6
+ i.e.
7
+
8
+ `curl -is www.example.com > /tmp/www.example.com.txt`
9
+ stub_request(:get, "www.example.com").to_return(lambda { |request| File.new("/tmp/#{request.uri.host.to_s}.txt" }))
10
+
11
+ * `:net_http_connect_on_start` option can be passed to `WebMock.allow_net_connect!` and `WebMock.disable_net_connect!` methods, i.e.
12
+
13
+ WebMock.allow_net_connect!(:net_http_connect_on_start => true)
14
+
15
+ This forces WebMock Net::HTTP adapter to always connect on `Net::HTTP.start`. Check 'Connecting on Net::HTTP.start' in README for more information.
16
+
17
+ Thanks to Alastair Brunton for reporting the issue and for fix suggestions.
18
+
19
+ * Fixed an issue where Patron spec tried to remove system temporary directory.
20
+ Thanks to Hans de Graaff
21
+
22
+ * WebMock specs now use RSpec 2
23
+
24
+ * `rake spec NO_CONNECTION=true` can now be used to only run WebMock specs which do not make real network connections
25
+
3
26
  ## 1.4.0
4
27
 
5
28
  * Curb support!!! Thanks to the awesome work of Pete Higgins!
data/README.md CHANGED
@@ -207,14 +207,19 @@ You can also use WebMock outside a test framework:
207
207
  to_return { |request| {:body => request.body} }
208
208
 
209
209
  RestClient.post('www.example.net', 'abc') # ===> "abc\n"
210
-
210
+
211
211
  ### Responses dynamically evaluated from lambda
212
-
212
+
213
213
  stub_request(:any, 'www.example.net').
214
214
  to_return(lambda { |request| {:body => request.body} })
215
215
 
216
216
  RestClient.post('www.example.net', 'abc') # ===> "abc\n"
217
217
 
218
+ ### Dynamically evaluated raw responses recorded with `curl -is`
219
+
220
+ `curl -is www.example.com > /tmp/www.example.com.txt`
221
+ stub_request(:get, "www.example.com").to_return(lambda { |request| File.new("/tmp/#{request.uri.host.to_s}.txt" }))
222
+
218
223
  ### Responses with dynamically evaluated parts
219
224
 
220
225
  stub_request(:any, 'www.example.net').
@@ -305,6 +310,25 @@ You can also use WebMock outside a test framework:
305
310
 
306
311
  Net::HTTP.get('www.example.org', '/') # ===> Allowed.
307
312
 
313
+ ## Connecting on Net::HTTP.start
314
+
315
+ HTTP protocol has 3 steps: connect, request and response (or 4 with close). Most Ruby HTTP client libraries
316
+ treat connect as a part of request step, with the exception of `Net::HTTP` which
317
+ allows opening connection to the server separately to the request, by using `Net::HTTP.start`.
318
+
319
+ WebMock API was also designed with connect being part of request step, and it only allows stubbing
320
+ requests, not connections. When `Net::HTTP.start` is called, WebMock doesn't know yet whether
321
+ a request is stubbed or not. WebMock by default delays a connection until the request is invoked,
322
+ so when there is no request, `Net::HTTP.start` doesn't do anything.
323
+ **This means that WebMock breaks the Net::HTTP behaviour by default!**
324
+
325
+ To workaround this issue, WebMock offers `:net_http_connect_on_start` option,
326
+ which can be passed to `WebMock.allow_net_connect!` and `WebMock#disable_net_connect!` methods, i.e.
327
+
328
+ WebMock.allow_net_connect!(:net_http_connect_on_start => true)
329
+
330
+ This forces WebMock Net::HTTP adapter to always connect on `Net::HTTP.start`.
331
+
308
332
  ## Setting Expectations
309
333
 
310
334
  ### Setting expectations in Test::Unit
@@ -532,6 +556,8 @@ People who submitted patches and new features or suggested improvements. Many th
532
556
  * Charles Li
533
557
  * Ryan Bigg
534
558
  * Pete Higgins
559
+ * Hans de Graaff
560
+ * Alastair Brunton
535
561
 
536
562
  ## Background
537
563
 
data/Rakefile CHANGED
@@ -12,7 +12,7 @@ begin
12
12
  gem.authors = ["Bartosz Blimke"]
13
13
  gem.add_dependency "addressable", ">= 2.2.2"
14
14
  gem.add_dependency "crack", ">=0.1.7"
15
- gem.add_development_dependency "rspec", ">= 1.2.9"
15
+ gem.add_development_dependency "rspec", ">= 2.0.0"
16
16
  gem.add_development_dependency "httpclient", ">= 2.1.5.2"
17
17
  gem.add_development_dependency "patron", ">= 0.4.9" unless RUBY_PLATFORM =~ /java/
18
18
  gem.add_development_dependency "em-http-request", ">= 0.2.14" unless RUBY_PLATFORM =~ /java/
@@ -23,16 +23,10 @@ rescue LoadError
23
23
  puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
24
24
  end
25
25
 
26
- require 'spec/rake/spectask'
27
- Spec::Rake::SpecTask.new(:spec) do |spec|
28
- spec.libs << 'lib' << 'spec'
29
- spec.spec_files = FileList['spec/**/*_spec.rb'].exclude("spec/vendor")
30
- end
31
-
32
- Spec::Rake::SpecTask.new(:rcov) do |spec|
33
- spec.libs << 'lib' << 'spec'
34
- spec.pattern = 'spec/**/*_spec.rb'
35
- spec.rcov = true
26
+ require "rspec/core/rake_task"
27
+ RSpec::Core::RakeTask.new do |t|
28
+ t.rspec_opts = ["-c", "-f progress", "-r ./spec/spec_helper.rb"]
29
+ t.pattern = 'spec/**/*_spec.rb'
36
30
  end
37
31
 
38
32
  require 'rake/testtask'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.4.0
1
+ 1.5.0
@@ -1,15 +1,15 @@
1
1
  require 'webmock'
2
2
 
3
3
  # RSpec 1.x and 2.x compatibility
4
- if defined?(Rspec)
5
- RSPEC_NAMESPACE = RSPEC_CONFIGURER = Rspec
4
+ if defined?(RSpec)
5
+ RSPEC_NAMESPACE = RSPEC_CONFIGURER = RSpec
6
6
  elsif defined?(Spec)
7
7
  RSPEC_NAMESPACE = Spec
8
8
  RSPEC_CONFIGURER = Spec::Runner
9
9
  else
10
10
  begin
11
11
  require 'rspec'
12
- RSPEC_NAMESPACE = RSPEC_CONFIGURER = Rspec
12
+ RSPEC_NAMESPACE = RSPEC_CONFIGURER = RSpec
13
13
  rescue LoadError
14
14
  require 'spec'
15
15
  RSPEC_NAMESPACE = Spec
@@ -30,4 +30,4 @@ RSPEC_CONFIGURER.configure { |config|
30
30
  end
31
31
  }
32
32
 
33
- WebMock::AssertionFailure.error_class = RSPEC_NAMESPACE::Expectations::ExpectationNotMetError
33
+ WebMock::AssertionFailure.error_class = RSPEC_NAMESPACE::Expectations::ExpectationNotMetError
@@ -5,5 +5,6 @@ module WebMock
5
5
  attr_accessor :allow_net_connect
6
6
  attr_accessor :allow_localhost
7
7
  attr_accessor :allow
8
+ attr_accessor :net_http_connect_on_start
8
9
  end
9
10
  end
@@ -81,6 +81,9 @@ module Net #:nodoc: all
81
81
  WebMock::NetHTTPUtility.puts_warning_for_right_http_if_needed
82
82
  @@alredy_checked_for_right_http_connection = true
83
83
  end
84
+ if WebMock::Config.instance.net_http_connect_on_start
85
+ return connect_without_webmock
86
+ end
84
87
  nil
85
88
  end
86
89
  alias_method :connect_without_webmock, :connect
@@ -43,8 +43,7 @@ module WebMock
43
43
  end
44
44
 
45
45
  def evaluate_response_for_request(response, request_signature)
46
- evaluated_response = response.dup
47
- evaluated_response.evaluate!(request_signature)
46
+ response.evaluate(request_signature)
48
47
  end
49
48
 
50
49
  end
@@ -80,7 +80,7 @@ module WebMock
80
80
  @should_timeout = options[:should_timeout]
81
81
  end
82
82
 
83
- def evaluate!(request_signature)
83
+ def evaluate(request_signature)
84
84
  self.body = @body.call(request_signature) if @body.is_a?(Proc)
85
85
  self.headers = @headers.call(request_signature) if @headers.is_a?(Proc)
86
86
  self.status = @status.call(request_signature) if @status.is_a?(Proc)
@@ -136,13 +136,9 @@ module WebMock
136
136
  @responder = responder
137
137
  end
138
138
 
139
- def dup
140
- self.class.new(@responder)
141
- end
142
-
143
- def evaluate!(request_signature)
144
- self.options = @responder.call(request_signature)
145
- self
139
+ def evaluate(request_signature)
140
+ options = @responder.call(request_signature)
141
+ Response.new(options)
146
142
  end
147
143
  end
148
144
  end
@@ -27,14 +27,16 @@ module WebMock
27
27
  }
28
28
  end
29
29
 
30
- def self.allow_net_connect!
30
+ def self.allow_net_connect!(options = {})
31
31
  Config.instance.allow_net_connect = true
32
+ Config.instance.net_http_connect_on_start = options[:net_http_connect_on_start]
32
33
  end
33
34
 
34
35
  def self.disable_net_connect!(options = {})
35
36
  Config.instance.allow_net_connect = false
36
37
  Config.instance.allow_localhost = options[:allow_localhost]
37
38
  Config.instance.allow = options[:allow]
39
+ Config.instance.net_http_connect_on_start = options[:net_http_connect_on_start]
38
40
  end
39
41
 
40
42
  def self.net_connect_allowed?(uri = nil)
@@ -1,10 +1,10 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_spec'
2
+ require 'webmock_shared'
3
3
 
4
4
  unless RUBY_PLATFORM =~ /java/
5
5
  require 'curb_spec_helper'
6
6
 
7
- describe "Curb", :shared => true do
7
+ shared_examples_for "Curb" do
8
8
  include CurbSpecHelper
9
9
 
10
10
  it_should_behave_like "WebMock"
@@ -21,6 +21,7 @@ module CurbSpecHelper
21
21
  curl.username = uri.user
22
22
  curl.password = uri.password
23
23
  curl.timeout = 10
24
+ curl.connect_timeout = 10
24
25
 
25
26
  if headers = options[:headers]
26
27
  headers.each {|k,v| curl.headers[k] = v }
@@ -1,5 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_spec'
2
+ require 'webmock_shared'
3
3
  require 'ostruct'
4
4
 
5
5
  unless RUBY_PLATFORM =~ /java/
@@ -12,7 +12,7 @@ module EMHttpRequestSpecHelper
12
12
  EventMachine.run {
13
13
  request = EventMachine::HttpRequest.new("#{uri.omit(:userinfo).normalize.to_s}")
14
14
  http = request.send(:setup_request, method, {
15
- :timeout => 2,
15
+ :timeout => 10,
16
16
  :body => options[:body],
17
17
  :query => options[:query],
18
18
  'authorization' => [uri.user, uri.password],
@@ -1,5 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_spec'
2
+ require 'webmock_shared'
3
3
  require 'ostruct'
4
4
 
5
5
  require 'httpclient_spec_helper'
@@ -1,5 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_spec'
2
+ require 'webmock_shared'
3
3
  require 'ostruct'
4
4
  require 'net_http_spec_helper'
5
5
 
@@ -13,7 +13,7 @@ describe "Webmock with Net:HTTP" do
13
13
  stub_http_request(:get, "www.example.com").to_return(:body => "abc"*100000)
14
14
  Net::HTTP.start("www.example.com") { |query| query.get("/") }.body.should == "abc"*100000
15
15
  end
16
-
16
+
17
17
  it "should handle multiple values for the same response header" do
18
18
  stub_http_request(:get, "www.example.com").to_return(:headers => { 'Set-Cookie' => ['foo=bar', 'bar=bazz'] })
19
19
  response = Net::HTTP.get_response(URI.parse("http://www.example.com/"))
@@ -52,23 +52,23 @@ describe "Webmock with Net:HTTP" do
52
52
  }.should raise_error("both of body argument and HTTPRequest#body set")
53
53
  end
54
54
 
55
- it "should handle real requests with readable body" do
55
+ it "should handle real requests with readable body", :net_connect => true do
56
56
  WebMock.allow_net_connect!
57
57
  req = Net::HTTP::Post.new("/")
58
58
  Net::HTTP.start("www.example.com") {|http|
59
59
  http.request(req, StringIO.new("my_params"))
60
60
  }.body.should =~ /Example Web Page/
61
61
  end
62
-
63
- it "should handle requests with block passed to read_body" do
62
+
63
+ it "should handle requests with block passed to read_body", :net_connect => true do
64
64
  body = ""
65
65
  WebMock.allow_net_connect!
66
66
  req = Net::HTTP::Get.new("/")
67
67
  Net::HTTP.start("www.example.com") do |http|
68
- http.request(req) do |res|
68
+ http.request(req) do |res|
69
69
  res.read_body do |str|
70
70
  body << str
71
- end
71
+ end
72
72
  end
73
73
  end
74
74
  body.should =~ /Example Web Page/
@@ -80,13 +80,54 @@ describe "Webmock with Net:HTTP" do
80
80
  response.body.should be_a(Net::ReadAdapter)
81
81
  end
82
82
 
83
- it "should return a Net::ReadAdapter from response.body when a real request is made with a block and #read_body" do
83
+ it "should return a Net::ReadAdapter from response.body when a real request is made with a block and #read_body", :net_connect => true do
84
84
  WebMock.allow_net_connect!
85
85
  response = Net::HTTP.new('example.com', 80).request_get('/') { |r| r.read_body { } }
86
86
  response.body.should be_a(Net::ReadAdapter)
87
87
  end
88
88
 
89
- describe 'after_request callback support' do
89
+ describe "connecting on Net::HTTP.start" do
90
+ before(:each) do
91
+ @http = Net::HTTP.new('www.google.com', 443)
92
+ @http.use_ssl = true
93
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
94
+ end
95
+ describe "when net http is allowed" do
96
+ it "should not connect to the server until the request", :net_connect => true do
97
+ WebMock.allow_net_connect!
98
+ @http.start {|conn|
99
+ conn.peer_cert.should be_nil
100
+ }
101
+ end
102
+
103
+ it "should connect to the server on start", :net_connect => true do
104
+ WebMock.allow_net_connect!(:net_http_connect_on_start => true)
105
+ @http.start {|conn|
106
+ cert = OpenSSL::X509::Certificate.new conn.peer_cert
107
+ cert.should be_a(OpenSSL::X509::Certificate)
108
+ }
109
+ end
110
+ end
111
+
112
+ describe "when net http is disabled and allowed only for some hosts" do
113
+ it "should not connect to the server until the request", :net_connect => true do
114
+ WebMock.disable_net_connect!(:allow => "www.google.com")
115
+ @http.start {|conn|
116
+ conn.peer_cert.should be_nil
117
+ }
118
+ end
119
+
120
+ it "should connect to the server on start", :net_connect => true do
121
+ WebMock.disable_net_connect!(:allow => "www.google.com", :net_http_connect_on_start => true)
122
+ @http.start {|conn|
123
+ cert = OpenSSL::X509::Certificate.new conn.peer_cert
124
+ cert.should be_a(OpenSSL::X509::Certificate)
125
+ }
126
+ end
127
+ end
128
+ end
129
+
130
+ describe 'after_request callback support', :net_connect => true do
90
131
  let(:expected_body_regex) { /You have reached this web page by typing.*example\.com/ }
91
132
 
92
133
  before(:each) do
@@ -20,7 +20,10 @@ module NetHTTPSpecHelper
20
20
 
21
21
  req.basic_auth uri.user, uri.password if uri.user
22
22
  http = Net::HTTP.new(uri.host, uri.port)
23
- http.use_ssl = true if uri.scheme == "https"
23
+ if uri.scheme == "https"
24
+ http.use_ssl = true
25
+ http.ssl_timeout = 10
26
+ end
24
27
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
25
28
  response = http.start {|http|
26
29
  http.request(req, options[:body], &block)
@@ -0,0 +1,25 @@
1
+ module NetworkConnection
2
+ def self.connect_to(host, port, timeout=nil)
3
+ addr = Socket.getaddrinfo(host, nil)
4
+ sock = Socket.new(Socket.const_get(addr[0][0]), Socket::SOCK_STREAM, 0)
5
+
6
+ if timeout
7
+ secs = Integer(timeout)
8
+ usecs = Integer((timeout - secs) * 1_000_000)
9
+ optval = [secs, usecs].pack("l_2")
10
+ sock.setsockopt Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, optval
11
+ sock.setsockopt Socket::SOL_SOCKET, Socket::SO_SNDTIMEO, optval
12
+ end
13
+ sock.connect(Socket.pack_sockaddr_in(port, addr[0][3]))
14
+ sock
15
+ end
16
+
17
+ def self.is_network_available?
18
+ begin
19
+ self.connect_to("192.0.32.10", 80, 5)
20
+ true
21
+ rescue
22
+ false
23
+ end
24
+ end
25
+ end
@@ -1,6 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
- require 'webmock_spec'
3
-
2
+ require 'webmock_shared'
4
3
 
5
4
  unless RUBY_PLATFORM =~ /java/
6
5
  require 'patron_spec_helper'
@@ -21,7 +20,7 @@ unless RUBY_PLATFORM =~ /java/
21
20
  describe "file requests" do
22
21
 
23
22
  before(:each) do
24
- @dir_path = Dir.tmpdir
23
+ @dir_path = Dir.mktmpdir('webmock-')
25
24
  @file_path = File.join(@dir_path, "webmock_temp_test_file")
26
25
  FileUtils.rm_rf(@file_path) if File.exists?(@file_path)
27
26
  end
@@ -7,6 +7,7 @@ module PatronSpecHelper
7
7
  sess.username = uri.user
8
8
  sess.password = uri.password
9
9
 
10
+ sess.connect_timeout = 10
10
11
  sess.timeout = 10
11
12
 
12
13
  response = sess.request(method, "#{uri.path}#{uri.query ? '?' : ''}#{uri.query}", options[:headers] || {}, {
@@ -58,14 +58,14 @@ describe WebMock::Response do
58
58
  @response.raise_error_if_any
59
59
  }.should raise_error(ArgumentError, "Exception from WebMock")
60
60
  end
61
-
61
+
62
62
  it "should raise error if any assigned as instance" do
63
63
  @response = WebMock::Response.new(:exception => ArgumentError.new("hello world"))
64
64
  lambda {
65
65
  @response.raise_error_if_any
66
66
  }.should raise_error(ArgumentError, "hello world")
67
67
  end
68
-
68
+
69
69
  it "should raise error if any assigned as string" do
70
70
  @response = WebMock::Response.new(:exception => "hello world")
71
71
  lambda {
@@ -78,7 +78,7 @@ describe WebMock::Response do
78
78
  end
79
79
 
80
80
  end
81
-
81
+
82
82
  describe "timeout" do
83
83
 
84
84
  it "should know if it should timeout" do
@@ -170,7 +170,7 @@ describe WebMock::Response do
170
170
  "Date"=>"Sat, 23 Jan 2010 01:01:05 GMT",
171
171
  "Content-Type"=>"text/html; charset=UTF-8",
172
172
  "Content-Length"=>"438",
173
- "Connection"=>"Keep-Alive",
173
+ "Connection"=>"Keep-Alive",
174
174
  "Accept"=>"image/jpeg, image/png"
175
175
  }
176
176
  end
@@ -195,17 +195,17 @@ describe WebMock::Response do
195
195
 
196
196
  it "should have evaluated body" do
197
197
  @response = WebMock::Response.new(:body => lambda {|request| request.body})
198
- @response.evaluate!(@request_signature).body.should == "abc"
198
+ @response.evaluate(@request_signature).body.should == "abc"
199
199
  end
200
200
 
201
201
  it "should have evaluated headers" do
202
202
  @response = WebMock::Response.new(:headers => lambda {|request| request.headers})
203
- @response.evaluate!(@request_signature).headers.should == {'A' => 'a'}
203
+ @response.evaluate(@request_signature).headers.should == {'A' => 'a'}
204
204
  end
205
205
 
206
206
  it "should have evaluated status" do
207
207
  @response = WebMock::Response.new(:status => lambda {|request| 302})
208
- @response.evaluate!(@request_signature).status.should == [302, ""]
208
+ @response.evaluate(@request_signature).status.should == [302, ""]
209
209
  end
210
210
 
211
211
  end
@@ -216,7 +216,7 @@ describe WebMock::Response do
216
216
 
217
217
  describe "evaluating response options" do
218
218
 
219
- it "should have evaluated options" do
219
+ it "should evaluate new response with evaluated options" do
220
220
  request_signature = WebMock::RequestSignature.new(:post, "www.example.com", :body => "abc", :headers => {'A' => 'a'})
221
221
  response = WebMock::DynamicResponse.new(lambda {|request|
222
222
  {
@@ -225,19 +225,41 @@ describe WebMock::Response do
225
225
  :status => 302
226
226
  }
227
227
  })
228
- response.evaluate!(request_signature)
229
- response.body.should == "abc"
230
- response.headers.should == {'A' => 'a'}
231
- response.status.should == [302, ""]
228
+ evaluated_response = response.evaluate(request_signature)
229
+ evaluated_response.body.should == "abc"
230
+ evaluated_response.headers.should == {'A' => 'a'}
231
+ evaluated_response.status.should == [302, ""]
232
232
  end
233
233
 
234
234
  it "should be equal to static response after evaluation" do
235
235
  request_signature = WebMock::RequestSignature.new(:post, "www.example.com", :body => "abc")
236
236
  response = WebMock::DynamicResponse.new(lambda {|request| {:body => request.body}})
237
- response.evaluate!(request_signature)
238
- response.should == WebMock::Response.new(:body => "abc")
237
+ evaluated_response = response.evaluate(request_signature)
238
+ evaluated_response.should == WebMock::Response.new(:body => "abc")
239
239
  end
240
240
 
241
+ describe "when raw response is evaluated" do
242
+ before(:each) do
243
+ @files = {
244
+ "www.example.com" => File.new(File.expand_path(File.dirname(__FILE__)) + "/example_curl_output.txt")
245
+ }
246
+ @request_signature = WebMock::RequestSignature.new(:get, "www.example.com")
247
+ end
248
+
249
+ describe "as a file" do
250
+ it "should return response" do
251
+ response = WebMock::DynamicResponse.new(lambda {|request| @files[request.uri.host.to_s] })
252
+ response.evaluate(@request_signature).body.size.should == 438
253
+ end
254
+ end
255
+
256
+ describe "as a string" do
257
+ it "should return response" do
258
+ response = WebMock::DynamicResponse.new(lambda {|request| @files[request.uri.host.to_s].read })
259
+ response.evaluate(@request_signature).body.size.should == 438
260
+ end
261
+ end
262
+ end
241
263
  end
242
264
 
243
265
  end
@@ -8,23 +8,31 @@ end
8
8
 
9
9
  $LOAD_PATH.unshift(File.dirname(__FILE__))
10
10
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
11
- require 'spec'
12
- require 'spec/autorun'
11
+ require 'rspec'
13
12
 
14
13
  require 'webmock/rspec'
15
14
 
15
+ require 'network_connection'
16
+
16
17
  require 'json'
17
18
 
18
- Spec::Runner.configure do |config|
19
- config.include WebMock::API
19
+ RSpec.configure do |config|
20
+ config.include WebMock::API
21
+ unless NetworkConnection.is_network_available?
22
+ warn("No network connectivity. Only examples which do not make real network connections will run.")
23
+ no_network_connection = true
24
+ end
25
+ if ENV["NO_CONNECTION"] || no_network_connection
26
+ config.filter_run_excluding :net_connect => true
27
+ end
20
28
  end
21
29
 
22
30
  def fail()
23
- raise_error(Spec::Expectations::ExpectationNotMetError)
31
+ raise_error(RSpec::Expectations::ExpectationNotMetError)
24
32
  end
25
33
 
26
34
  def fail_with(message)
27
- raise_error(Spec::Expectations::ExpectationNotMetError, message)
35
+ raise_error(RSpec::Expectations::ExpectationNotMetError, message)
28
36
  end
29
37
 
30
38
  class Proc
@@ -56,3 +64,4 @@ def client_specific_request_string(string)
56
64
  end
57
65
  string
58
66
  end
67
+
@@ -18,7 +18,7 @@ describe "WebMock version" do
18
18
  end
19
19
 
20
20
 
21
- describe "WebMock", :shared => true do
21
+ shared_examples_for "WebMock" do
22
22
  before(:each) do
23
23
  WebMock.disable_net_connect!
24
24
  WebMock::RequestRegistry.instance.reset_webmock
@@ -26,7 +26,7 @@ describe "WebMock", :shared => true do
26
26
 
27
27
  describe "when web connect" do
28
28
 
29
- describe "is allowed" do
29
+ describe "is allowed", :net_connect => true do
30
30
  before(:each) do
31
31
  WebMock.allow_net_connect!
32
32
  end
@@ -122,7 +122,7 @@ describe "WebMock", :shared => true do
122
122
  }.should raise_error(WebMock::NetConnectNotAllowedError, client_specific_request_string("Real HTTP connections are disabled. Unregistered request: GET http://www.example.com/"))
123
123
  end
124
124
 
125
- it "should allow a real request to allowed host" do
125
+ it "should allow a real request to allowed host", :net_connect => true do
126
126
  http_request(:get, "http://www.example.org/").status.should == "200"
127
127
  end
128
128
  end
@@ -691,6 +691,25 @@ describe "WebMock", :shared => true do
691
691
  end
692
692
  end
693
693
 
694
+ describe "replying raw responses evaluated dynamically" do
695
+ before(:each) do
696
+ @files = {
697
+ "www.example.com" => File.new(File.expand_path(File.dirname(__FILE__)) + "/example_curl_output.txt")
698
+ }
699
+ end
700
+
701
+ it "should return response from evaluated file" do
702
+ stub_http_request(:get, "www.example.com").to_return(lambda {|request| @files[request.uri.host.to_s] })
703
+ http_request(:get, "http://www.example.com/").body.size.should == 438
704
+ end
705
+
706
+ it "should return response from evaluated string" do
707
+ stub_http_request(:get, "www.example.com").to_return(lambda {|request| @files[request.uri.host.to_s].read })
708
+ http_request(:get, "http://www.example.com/").body.size.should == 438
709
+ end
710
+
711
+ end
712
+
694
713
  describe "sequences of responses" do
695
714
 
696
715
  it "should return responses one by one if declared in array" do
@@ -1362,7 +1381,7 @@ describe "WebMock", :shared => true do
1362
1381
  end
1363
1382
 
1364
1383
 
1365
- describe "when net connect allowed" do
1384
+ describe "when net connect allowed", :net_connect => true do
1366
1385
  before(:each) do
1367
1386
  WebMock.allow_net_connect!
1368
1387
  end
@@ -1466,7 +1485,7 @@ describe "WebMock", :shared => true do
1466
1485
 
1467
1486
  end
1468
1487
 
1469
- describe "for real requests" do
1488
+ describe "for real requests", :net_connect => true do
1470
1489
  before(:each) do
1471
1490
  WebMock.reset_webmock
1472
1491
  WebMock.allow_net_connect!
@@ -1500,7 +1519,7 @@ describe "WebMock", :shared => true do
1500
1519
  @called.should == 2
1501
1520
  end
1502
1521
 
1503
- it "should invoke callbacks only for real requests if requested" do
1522
+ it "should invoke callbacks only for real requests if requested", :net_connect => true do
1504
1523
  WebMock.after_request(:real_requests_only => true) { @called = true }
1505
1524
  http_request(:get, "http://www.example.com/")
1506
1525
  @called.should == nil
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{webmock}
8
- s.version = "1.4.0"
8
+ s.version = "1.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Bartosz Blimke"]
12
- s.date = %q{2010-10-13}
12
+ s.date = %q{2010-11-02}
13
13
  s.description = %q{WebMock allows stubbing HTTP requests and setting expectations on HTTP requests.}
14
14
  s.email = %q{bartosz.blimke@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -63,6 +63,7 @@ Gem::Specification.new do |s|
63
63
  "spec/httpclient_spec_helper.rb",
64
64
  "spec/net_http_spec.rb",
65
65
  "spec/net_http_spec_helper.rb",
66
+ "spec/network_connection.rb",
66
67
  "spec/other_net_http_libs_spec.rb",
67
68
  "spec/patron_spec.rb",
68
69
  "spec/patron_spec_helper.rb",
@@ -72,7 +73,6 @@ Gem::Specification.new do |s|
72
73
  "spec/request_signature_spec.rb",
73
74
  "spec/request_stub_spec.rb",
74
75
  "spec/response_spec.rb",
75
- "spec/spec.opts",
76
76
  "spec/spec_helper.rb",
77
77
  "spec/util/hash_counter_spec.rb",
78
78
  "spec/util/headers_spec.rb",
@@ -87,7 +87,7 @@ Gem::Specification.new do |s|
87
87
  "spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb",
88
88
  "spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb",
89
89
  "spec/vendor/right_http_connection-1.2.4/setup.rb",
90
- "spec/webmock_spec.rb",
90
+ "spec/webmock_shared.rb",
91
91
  "test/test_helper.rb",
92
92
  "test/test_webmock.rb",
93
93
  "webmock.gemspec"
@@ -95,7 +95,7 @@ Gem::Specification.new do |s|
95
95
  s.homepage = %q{http://github.com/bblimke/webmock}
96
96
  s.rdoc_options = ["--charset=UTF-8"]
97
97
  s.require_paths = ["lib"]
98
- s.rubygems_version = %q{1.3.6}
98
+ s.rubygems_version = %q{1.3.7}
99
99
  s.summary = %q{Library for stubbing HTTP requests in Ruby.}
100
100
  s.test_files = [
101
101
  "spec/curb_spec.rb",
@@ -106,6 +106,7 @@ Gem::Specification.new do |s|
106
106
  "spec/httpclient_spec_helper.rb",
107
107
  "spec/net_http_spec.rb",
108
108
  "spec/net_http_spec_helper.rb",
109
+ "spec/network_connection.rb",
109
110
  "spec/other_net_http_libs_spec.rb",
110
111
  "spec/patron_spec.rb",
111
112
  "spec/patron_spec_helper.rb",
@@ -125,7 +126,7 @@ Gem::Specification.new do |s|
125
126
  "spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb",
126
127
  "spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb",
127
128
  "spec/vendor/right_http_connection-1.2.4/setup.rb",
128
- "spec/webmock_spec.rb",
129
+ "spec/webmock_shared.rb",
129
130
  "test/test_helper.rb",
130
131
  "test/test_webmock.rb"
131
132
  ]
@@ -134,10 +135,10 @@ Gem::Specification.new do |s|
134
135
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
135
136
  s.specification_version = 3
136
137
 
137
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
138
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
138
139
  s.add_runtime_dependency(%q<addressable>, [">= 2.2.2"])
139
140
  s.add_runtime_dependency(%q<crack>, [">= 0.1.7"])
140
- s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
141
+ s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
141
142
  s.add_development_dependency(%q<httpclient>, [">= 2.1.5.2"])
142
143
  s.add_development_dependency(%q<patron>, [">= 0.4.9"])
143
144
  s.add_development_dependency(%q<em-http-request>, [">= 0.2.14"])
@@ -145,7 +146,7 @@ Gem::Specification.new do |s|
145
146
  else
146
147
  s.add_dependency(%q<addressable>, [">= 2.2.2"])
147
148
  s.add_dependency(%q<crack>, [">= 0.1.7"])
148
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
149
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
149
150
  s.add_dependency(%q<httpclient>, [">= 2.1.5.2"])
150
151
  s.add_dependency(%q<patron>, [">= 0.4.9"])
151
152
  s.add_dependency(%q<em-http-request>, [">= 0.2.14"])
@@ -154,7 +155,7 @@ Gem::Specification.new do |s|
154
155
  else
155
156
  s.add_dependency(%q<addressable>, [">= 2.2.2"])
156
157
  s.add_dependency(%q<crack>, [">= 0.1.7"])
157
- s.add_dependency(%q<rspec>, [">= 1.2.9"])
158
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
158
159
  s.add_dependency(%q<httpclient>, [">= 2.1.5.2"])
159
160
  s.add_dependency(%q<patron>, [">= 0.4.9"])
160
161
  s.add_dependency(%q<em-http-request>, [">= 0.2.14"])
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webmock
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 3
4
5
  prerelease: false
5
6
  segments:
6
7
  - 1
7
- - 4
8
+ - 5
8
9
  - 0
9
- version: 1.4.0
10
+ version: 1.5.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Bartosz Blimke
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-10-13 00:00:00 +01:00
18
+ date: 2010-11-02 00:00:00 +00:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: addressable
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 3
27
30
  segments:
28
31
  - 2
29
32
  - 2
@@ -35,9 +38,11 @@ dependencies:
35
38
  name: crack
36
39
  prerelease: false
37
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
38
42
  requirements:
39
43
  - - ">="
40
44
  - !ruby/object:Gem::Version
45
+ hash: 21
41
46
  segments:
42
47
  - 0
43
48
  - 1
@@ -49,23 +54,27 @@ dependencies:
49
54
  name: rspec
50
55
  prerelease: false
51
56
  requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
52
58
  requirements:
53
59
  - - ">="
54
60
  - !ruby/object:Gem::Version
61
+ hash: 15
55
62
  segments:
56
- - 1
57
63
  - 2
58
- - 9
59
- version: 1.2.9
64
+ - 0
65
+ - 0
66
+ version: 2.0.0
60
67
  type: :development
61
68
  version_requirements: *id003
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: httpclient
64
71
  prerelease: false
65
72
  requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
66
74
  requirements:
67
75
  - - ">="
68
76
  - !ruby/object:Gem::Version
77
+ hash: 119
69
78
  segments:
70
79
  - 2
71
80
  - 1
@@ -78,9 +87,11 @@ dependencies:
78
87
  name: patron
79
88
  prerelease: false
80
89
  requirement: &id005 !ruby/object:Gem::Requirement
90
+ none: false
81
91
  requirements:
82
92
  - - ">="
83
93
  - !ruby/object:Gem::Version
94
+ hash: 29
84
95
  segments:
85
96
  - 0
86
97
  - 4
@@ -92,9 +103,11 @@ dependencies:
92
103
  name: em-http-request
93
104
  prerelease: false
94
105
  requirement: &id006 !ruby/object:Gem::Requirement
106
+ none: false
95
107
  requirements:
96
108
  - - ">="
97
109
  - !ruby/object:Gem::Version
110
+ hash: 11
98
111
  segments:
99
112
  - 0
100
113
  - 2
@@ -106,9 +119,11 @@ dependencies:
106
119
  name: curb
107
120
  prerelease: false
108
121
  requirement: &id007 !ruby/object:Gem::Requirement
122
+ none: false
109
123
  requirements:
110
124
  - - ">="
111
125
  - !ruby/object:Gem::Version
126
+ hash: 19
112
127
  segments:
113
128
  - 0
114
129
  - 7
@@ -172,6 +187,7 @@ files:
172
187
  - spec/httpclient_spec_helper.rb
173
188
  - spec/net_http_spec.rb
174
189
  - spec/net_http_spec_helper.rb
190
+ - spec/network_connection.rb
175
191
  - spec/other_net_http_libs_spec.rb
176
192
  - spec/patron_spec.rb
177
193
  - spec/patron_spec_helper.rb
@@ -181,7 +197,6 @@ files:
181
197
  - spec/request_signature_spec.rb
182
198
  - spec/request_stub_spec.rb
183
199
  - spec/response_spec.rb
184
- - spec/spec.opts
185
200
  - spec/spec_helper.rb
186
201
  - spec/util/hash_counter_spec.rb
187
202
  - spec/util/headers_spec.rb
@@ -196,7 +211,7 @@ files:
196
211
  - spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb
197
212
  - spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb
198
213
  - spec/vendor/right_http_connection-1.2.4/setup.rb
199
- - spec/webmock_spec.rb
214
+ - spec/webmock_shared.rb
200
215
  - test/test_helper.rb
201
216
  - test/test_webmock.rb
202
217
  - webmock.gemspec
@@ -210,23 +225,27 @@ rdoc_options:
210
225
  require_paths:
211
226
  - lib
212
227
  required_ruby_version: !ruby/object:Gem::Requirement
228
+ none: false
213
229
  requirements:
214
230
  - - ">="
215
231
  - !ruby/object:Gem::Version
232
+ hash: 3
216
233
  segments:
217
234
  - 0
218
235
  version: "0"
219
236
  required_rubygems_version: !ruby/object:Gem::Requirement
237
+ none: false
220
238
  requirements:
221
239
  - - ">="
222
240
  - !ruby/object:Gem::Version
241
+ hash: 3
223
242
  segments:
224
243
  - 0
225
244
  version: "0"
226
245
  requirements: []
227
246
 
228
247
  rubyforge_project:
229
- rubygems_version: 1.3.6
248
+ rubygems_version: 1.3.7
230
249
  signing_key:
231
250
  specification_version: 3
232
251
  summary: Library for stubbing HTTP requests in Ruby.
@@ -239,6 +258,7 @@ test_files:
239
258
  - spec/httpclient_spec_helper.rb
240
259
  - spec/net_http_spec.rb
241
260
  - spec/net_http_spec_helper.rb
261
+ - spec/network_connection.rb
242
262
  - spec/other_net_http_libs_spec.rb
243
263
  - spec/patron_spec.rb
244
264
  - spec/patron_spec_helper.rb
@@ -258,6 +278,6 @@ test_files:
258
278
  - spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb
259
279
  - spec/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb
260
280
  - spec/vendor/right_http_connection-1.2.4/setup.rb
261
- - spec/webmock_spec.rb
281
+ - spec/webmock_shared.rb
262
282
  - test/test_helper.rb
263
283
  - test/test_webmock.rb
@@ -1 +0,0 @@
1
- --color