webmock 1.4.0 → 1.5.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.
@@ -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