webmock 1.6.4 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
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