webmock 1.6.4 → 1.7.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 (95) hide show
  1. data/.gemtest +0 -0
  2. data/.gitignore +3 -1
  3. data/.travis.yml +6 -0
  4. data/CHANGELOG.md +211 -118
  5. data/Gemfile +16 -1
  6. data/Guardfile +24 -0
  7. data/LICENSE +1 -1
  8. data/README.md +64 -15
  9. data/Rakefile +19 -6
  10. data/lib/webmock.rb +9 -4
  11. data/lib/webmock/api.rb +5 -4
  12. data/lib/webmock/assertion_failure.rb +1 -1
  13. data/lib/webmock/callback_registry.rb +1 -1
  14. data/lib/webmock/config.rb +2 -2
  15. data/lib/webmock/cucumber.rb +1 -1
  16. data/lib/webmock/errors.rb +17 -5
  17. data/lib/webmock/http_lib_adapters/{curb.rb → curb_adapter.rb} +79 -49
  18. data/lib/webmock/http_lib_adapters/{em_http_request.rb → em_http_request/em_http_request_0_x.rb} +20 -15
  19. data/lib/webmock/http_lib_adapters/em_http_request/em_http_request_1_x.rb +201 -0
  20. data/lib/webmock/http_lib_adapters/em_http_request_adapter.rb +11 -0
  21. data/lib/webmock/http_lib_adapters/http_lib_adapter.rb +7 -0
  22. data/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb +19 -0
  23. data/lib/webmock/http_lib_adapters/{httpclient.rb → httpclient_adapter.rb} +35 -8
  24. data/lib/webmock/http_lib_adapters/net_http.rb +84 -25
  25. data/lib/webmock/http_lib_adapters/net_http_response.rb +17 -17
  26. data/lib/webmock/http_lib_adapters/patron_adapter.rb +124 -0
  27. data/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb +166 -0
  28. data/lib/webmock/minitest.rb +15 -0
  29. data/lib/webmock/rack_response.rb +52 -0
  30. data/lib/webmock/request_pattern.rb +4 -2
  31. data/lib/webmock/request_signature.rb +4 -0
  32. data/lib/webmock/request_stub.rb +35 -2
  33. data/lib/webmock/responses_sequence.rb +2 -2
  34. data/lib/webmock/rspec.rb +2 -2
  35. data/lib/webmock/rspec/matchers.rb +9 -4
  36. data/lib/webmock/rspec/matchers/webmock_matcher.rb +1 -1
  37. data/lib/webmock/stub_registry.rb +1 -1
  38. data/lib/webmock/stub_request_snippet.rb +14 -11
  39. data/lib/webmock/util/hash_keys_stringifier.rb +4 -4
  40. data/lib/webmock/util/headers.rb +3 -3
  41. data/lib/webmock/util/json.rb +54 -0
  42. data/lib/webmock/util/uri.rb +1 -1
  43. data/lib/webmock/version.rb +1 -1
  44. data/lib/webmock/webmock.rb +20 -3
  45. data/minitest/test_helper.rb +29 -0
  46. data/minitest/test_webmock.rb +6 -0
  47. data/minitest/webmock_spec.rb +30 -0
  48. data/spec/curb_spec.rb +26 -8
  49. data/spec/curb_spec_helper.rb +6 -6
  50. data/spec/em_http_request_spec.rb +95 -1
  51. data/spec/em_http_request_spec_helper.rb +16 -16
  52. data/spec/errors_spec.rb +19 -4
  53. data/spec/example_curl_output.txt +22 -22
  54. data/spec/http_lib_adapters/http_lib_adapter_registry_spec.rb +17 -0
  55. data/spec/http_lib_adapters/http_lib_adapter_spec.rb +12 -0
  56. data/spec/httpclient_spec.rb +1 -1
  57. data/spec/httpclient_spec_helper.rb +3 -38
  58. data/spec/my_rack_app.rb +18 -0
  59. data/spec/net_http_shared.rb +125 -0
  60. data/spec/net_http_spec.rb +27 -31
  61. data/spec/net_http_spec_helper.rb +4 -34
  62. data/spec/network_connection.rb +1 -1
  63. data/spec/patron_spec_helper.rb +4 -7
  64. data/spec/quality_spec.rb +60 -0
  65. data/spec/rack_response_spec.rb +33 -0
  66. data/spec/real_net_http_spec.rb +20 -0
  67. data/spec/request_execution_verifier_spec.rb +8 -8
  68. data/spec/request_pattern_spec.rb +3 -3
  69. data/spec/request_stub_spec.rb +19 -19
  70. data/spec/response_spec.rb +8 -8
  71. data/spec/spec_helper.rb +14 -11
  72. data/spec/stub_request_snippet_spec.rb +85 -37
  73. data/spec/support/webmock_server.rb +62 -0
  74. data/spec/typhoeus_hydra_spec.rb +53 -0
  75. data/spec/typhoeus_hydra_spec_helper.rb +50 -0
  76. data/spec/util/headers_spec.rb +5 -5
  77. data/spec/util/json_spec.rb +7 -0
  78. data/spec/util/uri_spec.rb +1 -1
  79. data/spec/vendor/addressable/lib/uri.rb +1 -0
  80. data/spec/vendor/crack/lib/crack.rb +1 -0
  81. data/spec/vendor/right_http_connection-1.2.4/History.txt +4 -4
  82. data/spec/vendor/right_http_connection-1.2.4/README.txt +4 -4
  83. data/spec/vendor/right_http_connection-1.2.4/Rakefile +3 -3
  84. data/spec/vendor/right_http_connection-1.2.4/lib/net_fix.rb +4 -4
  85. data/spec/vendor/right_http_connection-1.2.4/setup.rb +4 -4
  86. data/spec/webmock_shared.rb +375 -143
  87. data/spec/webmock_spec.rb +7 -0
  88. data/test/http_request.rb +24 -0
  89. data/test/shared_test.rb +47 -0
  90. data/test/test_helper.rb +6 -3
  91. data/test/test_webmock.rb +2 -67
  92. data/webmock.gemspec +8 -7
  93. metadata +153 -88
  94. data/lib/webmock/http_lib_adapters/patron.rb +0 -100
  95. data/spec/other_net_http_libs_spec.rb +0 -30
@@ -2,13 +2,15 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'webmock_shared'
3
3
  require 'ostruct'
4
4
  require 'net_http_spec_helper'
5
+ require 'net_http_shared'
5
6
 
6
7
  include NetHTTPSpecHelper
7
8
 
8
9
  describe "Webmock with Net:HTTP" do
9
-
10
10
  it_should_behave_like "WebMock"
11
11
 
12
+ let(:port){ WebMockServer.instance.port }
13
+
12
14
  it "should work with block provided" do
13
15
  stub_http_request(:get, "www.example.com").to_return(:body => "abc"*100000)
14
16
  Net::HTTP.start("www.example.com") { |query| query.get("/") }.body.should == "abc"*100000
@@ -52,38 +54,18 @@ describe "Webmock with Net:HTTP" do
52
54
  }.should raise_error("both of body argument and HTTPRequest#body set")
53
55
  end
54
56
 
55
- it "should handle real requests with readable body", :net_connect => true do
56
- WebMock.allow_net_connect!
57
- req = Net::HTTP::Post.new("/")
58
- Net::HTTP.start("www.example.com") {|http|
59
- http.request(req, StringIO.new("my_params"))
60
- }.body.should =~ /^$/
61
- end
62
-
63
- it "should handle requests with block passed to read_body", :net_connect => true do
64
- body = ""
65
- WebMock.allow_net_connect!
66
- req = Net::HTTP::Get.new("/")
67
- Net::HTTP.start("www.example.com") do |http|
68
- http.request(req) do |res|
69
- res.read_body do |str|
70
- body << str
71
- end
72
- end
73
- end
74
- body.should =~ /^$/
75
- end
76
-
77
57
  it "should return a Net::ReadAdapter from response.body when a stubbed request is made with a block and #read_body" do
78
58
  WebMock.stub_request(:get, 'http://example.com/').to_return(:body => "the body")
79
59
  response = Net::HTTP.new('example.com', 80).request_get('/') { |r| r.read_body { } }
80
60
  response.body.should be_a(Net::ReadAdapter)
81
61
  end
82
62
 
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
63
+ it "should have request 1 time executed in registry after 1 real request", :net_connect => true do
84
64
  WebMock.allow_net_connect!
85
- response = Net::HTTP.new('example.com', 80).request_get('/') { |r| r.read_body { } }
86
- response.body.should be_a(Net::ReadAdapter)
65
+ http = Net::HTTP.new('localhost', port)
66
+ http.get('/') {}
67
+ WebMock::RequestRegistry.instance.requested_signatures.hash.size.should == 1
68
+ WebMock::RequestRegistry.instance.requested_signatures.hash.values.first.should == 1
87
69
  end
88
70
 
89
71
  describe "connecting on Net::HTTP.start" do
@@ -107,6 +89,7 @@ describe "Webmock with Net:HTTP" do
107
89
  cert.should be_a(OpenSSL::X509::Certificate)
108
90
  }
109
91
  end
92
+
110
93
  end
111
94
 
112
95
  describe "when net http is disabled and allowed only for some hosts" do
@@ -127,8 +110,22 @@ describe "Webmock with Net:HTTP" do
127
110
  end
128
111
  end
129
112
 
113
+ describe "when net_http_connect_on_start is true" do
114
+ before(:each) do
115
+ WebMock.allow_net_connect!(:net_http_connect_on_start => true)
116
+ end
117
+ it_should_behave_like "Net::HTTP"
118
+ end
119
+
120
+ describe "when net_http_connect_on_start is false" do
121
+ before(:each) do
122
+ WebMock.allow_net_connect!(:net_http_connect_on_start => false)
123
+ end
124
+ it_should_behave_like "Net::HTTP"
125
+ end
126
+
130
127
  describe 'after_request callback support', :net_connect => true do
131
- let(:expected_body_regex) { /^$/ }
128
+ let(:expected_body_regex) { /hello world/ }
132
129
 
133
130
  before(:each) do
134
131
  WebMock.allow_net_connect!
@@ -144,14 +141,14 @@ describe "Webmock with Net:HTTP" do
144
141
  end
145
142
 
146
143
  def perform_get_with_returning_block
147
- http_request(:get, "http://www.example.com/") do |response|
144
+ http_request(:get, "http://localhost:#{port}/") do |response|
148
145
  return response.body
149
146
  end
150
147
  end
151
148
 
152
149
  it "should support the after_request callback on an request with block and read_body" do
153
150
  response_body = ''
154
- http_request(:get, "http://www.example.com/") do |response|
151
+ http_request(:get, "http://localhost:#{port}/") do |response|
155
152
  response.read_body { |fragment| response_body << fragment }
156
153
  end
157
154
  response_body.should =~ expected_body_regex
@@ -167,9 +164,8 @@ describe "Webmock with Net:HTTP" do
167
164
  end
168
165
 
169
166
  it "should only invoke the after_request callback once, even for a recursive post request" do
170
- Net::HTTP.new('example.com', 80).post('/', nil)
167
+ Net::HTTP.new('localhost', port).post('/', nil)
171
168
  @callback_invocation_count.should == 1
172
169
  end
173
170
  end
174
-
175
171
  end
@@ -8,14 +8,14 @@ module NetHTTPSpecHelper
8
8
  response = nil
9
9
  clazz = Net::HTTP.const_get("#{method.to_s.capitalize}")
10
10
  req = clazz.new("#{uri.path}#{uri.query ? '?' : ''}#{uri.query}", nil)
11
- options[:headers].each do |k,v|
11
+ options[:headers].each do |k,v|
12
12
  if v.is_a?(Array)
13
13
  v.each_with_index do |v,i|
14
14
  i == 0 ? (req[k] = v) : req.add_field(k, v)
15
15
  end
16
16
  else
17
17
  req[k] = v
18
- end
18
+ end
19
19
  end if options[:headers]
20
20
 
21
21
  req.basic_auth uri.user, uri.password if uri.user
@@ -34,11 +34,11 @@ module NetHTTPSpecHelper
34
34
  OpenStruct.new({
35
35
  :body => response.body,
36
36
  :headers => WebMock::Util::Headers.normalize_headers(headers),
37
- :status => response.code,
37
+ :status => response.code,
38
38
  :message => response.message
39
39
  })
40
40
  end
41
-
41
+
42
42
  def client_timeout_exception_class
43
43
  Timeout::Error
44
44
  end
@@ -47,36 +47,6 @@ module NetHTTPSpecHelper
47
47
  Errno::ECONNREFUSED
48
48
  end
49
49
 
50
- # Sets several expectations that a real HTTP request makes it
51
- # past WebMock to the socket layer. You can use this when you need to check
52
- # that a request isn't handled by WebMock
53
- #This solution is copied from FakeWeb project
54
- def setup_expectations_for_real_request(options = {})
55
- # Socket handling
56
- if options[:port] == 443
57
- socket = mock("SSLSocket")
58
- OpenSSL::SSL::SSLSocket.should_receive(:===).with(socket).at_least(:once).and_return(true)
59
- OpenSSL::SSL::SSLSocket.should_receive(:new).with(socket, instance_of(OpenSSL::SSL::SSLContext)).at_least(:once).and_return(socket)
60
- socket.stub!(:sync_close=).and_return(true)
61
- socket.should_receive(:connect).at_least(:once).with()
62
- else
63
- socket = mock("TCPSocket")
64
- Socket.should_receive(:===).with(socket).at_least(:once).and_return(true)
65
- end
66
-
67
- TCPSocket.should_receive(:open).with(options[:host], options[:port]).at_least(:once).and_return(socket)
68
- socket.stub!(:closed?).and_return(false)
69
- socket.stub!(:close).and_return(true)
70
-
71
- # Request/response handling
72
- request_parts = ["#{options[:method]} #{options[:path]} HTTP/1.1", "Host: #{options[:host]}"]
73
- socket.should_receive(:write).with(/#{request_parts[0]}.*#{request_parts[1]}.*/m).and_return(100)
74
-
75
- read_method = RUBY_VERSION >= "1.9.2" ? :read_nonblock : :sysread
76
- socket.should_receive(read_method).once.and_return("HTTP/1.1 #{options[:response_code]} #{options[:response_message]}\nContent-Length: #{options[:response_body].length}\n\n#{options[:response_body]}")
77
- socket.should_receive(read_method).any_number_of_times.and_raise(EOFError)
78
- end
79
-
80
50
  def http_library
81
51
  :net_http
82
52
  end
@@ -22,4 +22,4 @@ module NetworkConnection
22
22
  false
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -11,15 +11,16 @@ module PatronSpecHelper
11
11
  sess.connect_timeout = 10
12
12
  sess.timeout = 10
13
13
  sess.max_redirects = 0
14
-
15
- response = sess.request(method, "#{uri.path}#{uri.query ? '?' : ''}#{uri.query}", options[:headers] || {}, {
14
+ uri = "#{uri.path}#{uri.query ? '?' : ''}#{uri.query}"
15
+ uri.gsub!(' ','+')
16
+ response = sess.request(method, uri, options[:headers] || {}, {
16
17
  :data => options[:body]
17
18
  })
18
19
  headers = {}
19
20
  if response.headers
20
21
  response.headers.each do |k,v|
21
22
  v = v.join(", ") if v.is_a?(Array)
22
- headers[k] = v
23
+ headers[k] = v
23
24
  end
24
25
  end
25
26
  OpenStruct.new({
@@ -38,10 +39,6 @@ module PatronSpecHelper
38
39
  Patron::ConnectionFailed
39
40
  end
40
41
 
41
- def setup_expectations_for_real_request(options = {})
42
- #TODO
43
- end
44
-
45
42
  def http_library
46
43
  :patron
47
44
  end
@@ -0,0 +1,60 @@
1
+ require "spec_helper"
2
+
3
+ # Borrowed from Bundler
4
+ # https://github.com/carlhuda/bundler/blob/1-0-stable/spec/quality_spec.rb
5
+ describe "The library itself" do
6
+ def check_for_tab_characters(filename)
7
+ failing_lines = []
8
+ File.readlines(filename).each_with_index do |line,number|
9
+ failing_lines << number + 1 if line =~ /\t/
10
+ end
11
+
12
+ unless failing_lines.empty?
13
+ "#{filename} has tab characters on lines #{failing_lines.join(', ')}"
14
+ end
15
+ end
16
+
17
+ def check_for_extra_spaces(filename)
18
+ failing_lines = []
19
+ File.readlines(filename).each_with_index do |line,number|
20
+ next if line =~ /^\s+#.*\s+\n$/
21
+ failing_lines << number + 1 if line =~ /\s+\n$/
22
+ end
23
+
24
+ unless failing_lines.empty?
25
+ "#{filename} has spaces on the EOL on lines #{failing_lines.join(', ')}"
26
+ end
27
+ end
28
+
29
+ RSpec::Matchers.define :be_well_formed do
30
+ failure_message_for_should do |actual|
31
+ actual.join("\n")
32
+ end
33
+
34
+ match do |actual|
35
+ actual.empty?
36
+ end
37
+ end
38
+
39
+ it "has no malformed whitespace" do
40
+ error_messages = []
41
+ Dir.chdir(File.expand_path("../..", __FILE__)) do
42
+ `git ls-files`.split("\n").each do |filename|
43
+ next if filename =~ /\.gitmodules|fixtures/
44
+ error_messages << check_for_tab_characters(filename)
45
+ error_messages << check_for_extra_spaces(filename)
46
+ end
47
+ end
48
+ error_messages.compact.should be_well_formed
49
+ end
50
+
51
+ it "can still be built" do
52
+ Dir.chdir(File.expand_path('../../', __FILE__)) do
53
+ `gem build webmock.gemspec`
54
+ $?.should == 0
55
+
56
+ # clean up the .gem generated
57
+ system("rm webmock-#{WebMock.version}.gem")
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe WebMock::RackResponse do
4
+ before :each do
5
+ @rack_response = WebMock::RackResponse.new(MyRackApp)
6
+ end
7
+
8
+ it "should hook up to a rack appliance" do
9
+ request = WebMock::RequestSignature.new(:get, 'www.example.com')
10
+ response = @rack_response.evaluate(request)
11
+
12
+ response.status.first.should == 200
13
+ response.body.should include('This is my root!')
14
+ end
15
+
16
+ it "should send along params" do
17
+ request = WebMock::RequestSignature.new(:get, 'www.example.com/greet?name=Johnny')
18
+
19
+ response = @rack_response.evaluate(request)
20
+
21
+ response.status.first.should == 200
22
+ response.body.should include('Hello, Johnny')
23
+ end
24
+
25
+ it "should send along POST params" do
26
+ request = WebMock::RequestSignature.new(:post, 'www.example.com/greet',
27
+ :body => 'name=Jimmy'
28
+ )
29
+
30
+ response = @rack_response.evaluate(request)
31
+ response.body.should include('Good to meet you, Jimmy!')
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'rspec'
3
+ require 'net/http'
4
+ require 'net_http_shared'
5
+ require 'net/https'
6
+ require 'stringio'
7
+ require 'support/webmock_server'
8
+
9
+ describe "Real Net:HTTP without webmock", :without_webmock => true do
10
+ before(:all) do
11
+ raise "WebMock has no access here!!!" if defined?(WebMock::NetHTTPUtility)
12
+ WebMockServer.instance.start
13
+ end
14
+
15
+ after(:all) do
16
+ WebMockServer.instance.stop
17
+ end
18
+
19
+ it_should_behave_like "Net::HTTP"
20
+ end
@@ -17,7 +17,7 @@ describe WebMock::RequestExecutionVerifier do
17
17
  @verifier.expected_times_executed = 2
18
18
  expected_text = "The request www.example.com was expected to execute 2 times but it executed 0 times"
19
19
  expected_text << @executed_requests_info
20
- @verifier.failure_message.should == expected_text
20
+ @verifier.failure_message.should == expected_text
21
21
  end
22
22
 
23
23
  it "should report failure message correctly when executed times is one" do
@@ -29,7 +29,7 @@ describe WebMock::RequestExecutionVerifier do
29
29
  end
30
30
 
31
31
  end
32
-
32
+
33
33
  describe "negative failure message" do
34
34
 
35
35
  it "should report failure message if it executed number of times specified" do
@@ -66,26 +66,26 @@ describe WebMock::RequestExecutionVerifier do
66
66
  end
67
67
 
68
68
  end
69
-
69
+
70
70
  describe "does_not_match?" do
71
71
 
72
72
  it "should fail if request executed expected number of times" do
73
73
  WebMock::RequestRegistry.instance.
74
74
  should_receive(:times_executed).with(@request_pattern).and_return(10)
75
75
  @verifier.expected_times_executed = 10
76
- @verifier.does_not_match?.should be_false
76
+ @verifier.does_not_match?.should be_false
77
77
  end
78
-
78
+
79
79
  it "should succeed if request was not executed at all and expected number of times was not set" do
80
80
  WebMock::RequestRegistry.instance.
81
81
  should_receive(:times_executed).with(@request_pattern).and_return(0)
82
- @verifier.does_not_match?.should be_true
82
+ @verifier.does_not_match?.should be_true
83
83
  end
84
-
84
+
85
85
  it "should fail if request was executed and expected number of times was not set" do
86
86
  WebMock::RequestRegistry.instance.
87
87
  should_receive(:times_executed).with(@request_pattern).and_return(1)
88
- @verifier.does_not_match?.should be_false
88
+ @verifier.does_not_match?.should be_false
89
89
  end
90
90
 
91
91
  it "should succeed if request was not executed expected number of times" do
@@ -13,7 +13,7 @@ describe WebMock::RequestPattern do
13
13
  :body => "abc", :headers => {'A' => 'a', 'B' => 'b'}).with {|req| true}.to_s.should ==
14
14
  "GET http://www.example.com/ with body \"abc\" with headers {'A'=>'a', 'B'=>'b'} with given block"
15
15
  end
16
-
16
+
17
17
  it "should report string describing itself with query params" do
18
18
  WebMock::RequestPattern.new(:get, /.*example.*/, :query => {'a' => ['b', 'c']}).to_s.should ==
19
19
  "GET /.*example.*/ with query params {\"a\"=>[\"b\", \"c\"]}"
@@ -140,12 +140,12 @@ describe WebMock::RequestPattern do
140
140
  WebMock::RequestPattern.new(:get, "www.example.com", :query => {"a" => ["b", "c"]}).
141
141
  should match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
142
142
  end
143
-
143
+
144
144
  it "should not match for query params are different than the declared in hash" do
145
145
  WebMock::RequestPattern.new(:get, "www.example.com", :query => {"a" => ["b", "c"]}).
146
146
  should_not match(WebMock::RequestSignature.new(:get, "www.example.com?x[]=b&a[]=c"))
147
147
  end
148
-
148
+
149
149
  it "should match for query params are the same as declared as string" do
150
150
  WebMock::RequestPattern.new(:get, "www.example.com", :query => "a[]=b&a[]=c").
151
151
  should match(WebMock::RequestSignature.new(:get, "www.example.com?a[]=b&a[]=c"))
@@ -23,7 +23,7 @@ describe WebMock::RequestStub do
23
23
 
24
24
  it "should assign normalized headers to request pattern" do
25
25
  @request_stub.with(:headers => {'A' => 'a'})
26
- @request_stub.request_pattern.to_s.should ==
26
+ @request_stub.request_pattern.to_s.should ==
27
27
  WebMock::RequestPattern.new(:get, "www.example.com", :headers => {'A' => 'a'}).to_s
28
28
  end
29
29
 
@@ -69,13 +69,13 @@ describe WebMock::RequestStub do
69
69
  @request_stub.response
70
70
  @request_stub.response.body.should == "def"
71
71
  end
72
-
72
+
73
73
  it "should return responses in a sequence passed as comma separated params" do
74
74
  @request_stub.to_return({:body => "abc"}, {:body => "def"})
75
75
  @request_stub.response.body.should == "abc"
76
76
  @request_stub.response.body.should == "def"
77
77
  end
78
-
78
+
79
79
  it "should return responses declared in multiple to_return declarations" do
80
80
  @request_stub.to_return({:body => "abc"}).to_return({:body => "def"})
81
81
  @request_stub.response.body.should == "abc"
@@ -92,7 +92,7 @@ describe WebMock::RequestStub do
92
92
  @request_stub.response.raise_error_if_any
93
93
  }.should raise_error(ArgumentError, "Exception from WebMock")
94
94
  end
95
-
95
+
96
96
  it "should assign sequence of responses with response with exception to be thrown" do
97
97
  @request_stub.to_return(:body => "abc").then.to_raise(ArgumentError)
98
98
  @request_stub.response.body.should == "abc"
@@ -110,7 +110,7 @@ describe WebMock::RequestStub do
110
110
  @request_stub.response.raise_error_if_any
111
111
  }.should raise_error(IndexError, "Exception from WebMock")
112
112
  end
113
-
113
+
114
114
  it "should raise exceptions declared in multiple to_raise declarations" do
115
115
  @request_stub.to_raise(ArgumentError).then.to_raise(IndexError)
116
116
  lambda {
@@ -122,7 +122,7 @@ describe WebMock::RequestStub do
122
122
  end
123
123
 
124
124
  end
125
-
125
+
126
126
  describe "to_timeout" do
127
127
 
128
128
  it "should assign response with timeout" do
@@ -144,30 +144,30 @@ describe WebMock::RequestStub do
144
144
  end
145
145
 
146
146
  end
147
-
148
-
147
+
148
+
149
149
  describe "times" do
150
-
150
+
151
151
  it "should give error if declared before any response declaration is declared" do
152
152
  lambda {
153
153
  @request_stub.times(3)
154
- }.should raise_error("Invalid WebMock stub declaration. times(N) can be declared only after response declaration.")
154
+ }.should raise_error("Invalid WebMock stub declaration. times(N) can be declared only after response declaration.")
155
155
  end
156
-
156
+
157
157
  it "should repeat returning last declared response declared number of times" do
158
158
  @request_stub.to_return({:body => "abc"}).times(2).then.to_return({:body => "def"})
159
159
  @request_stub.response.body.should == "abc"
160
160
  @request_stub.response.body.should == "abc"
161
161
  @request_stub.response.body.should == "def"
162
162
  end
163
-
163
+
164
164
  it "should repeat raising last declared exception declared number of times" do
165
165
  @request_stub.to_return({:body => "abc"}).times(2).then.to_return({:body => "def"})
166
166
  @request_stub.response.body.should == "abc"
167
167
  @request_stub.response.body.should == "abc"
168
168
  @request_stub.response.body.should == "def"
169
169
  end
170
-
170
+
171
171
  it "should repeat returning last declared sequence of responses declared number of times" do
172
172
  @request_stub.to_return({:body => "abc"}, {:body => "def"}).times(2).then.to_return({:body => "ghj"})
173
173
  @request_stub.response.body.should == "abc"
@@ -176,23 +176,23 @@ describe WebMock::RequestStub do
176
176
  @request_stub.response.body.should == "def"
177
177
  @request_stub.response.body.should == "ghj"
178
178
  end
179
-
179
+
180
180
  it "should return self" do
181
181
  @request_stub.to_return({:body => "abc"}).times(1).should == @request_stub
182
182
  end
183
-
183
+
184
184
  it "should raise error if argument is not integer" do
185
185
  lambda {
186
186
  @request_stub.to_return({:body => "abc"}).times("not number")
187
- }.should raise_error("times(N) accepts integers >= 1 only")
187
+ }.should raise_error("times(N) accepts integers >= 1 only")
188
188
  end
189
-
189
+
190
190
  it "should raise error if argument is < 1" do
191
191
  lambda {
192
192
  @request_stub.to_return({:body => "abc"}).times(0)
193
- }.should raise_error("times(N) accepts integers >= 1 only")
193
+ }.should raise_error("times(N) accepts integers >= 1 only")
194
194
  end
195
-
195
+
196
196
  end
197
197
 
198
198
  end