webmock 1.20.2 → 1.20.3
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +6 -0
- data/Gemfile +1 -2
- data/README.md +2 -0
- data/lib/webmock.rb +1 -0
- data/lib/webmock/api.rb +9 -5
- data/lib/webmock/request_pattern.rb +2 -0
- data/lib/webmock/response.rb +7 -5
- data/lib/webmock/util/hash_validator.rb +17 -0
- data/lib/webmock/version.rb +1 -1
- data/spec/acceptance/curb/curb_spec.rb +1 -1
- data/spec/acceptance/typhoeus/typhoeus_hydra_spec.rb +1 -1
- data/spec/unit/request_pattern_spec.rb +7 -0
- data/spec/unit/response_spec.rb +4 -2
- metadata +5 -4
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 1.20.3
|
4
|
+
|
5
|
+
* `with` method raises error if provided without options hash and without block
|
6
|
+
|
7
|
+
* `with` and `to_return` raise an error if invoked with invalid keys in options hash.
|
8
|
+
|
3
9
|
## 1.20.2
|
4
10
|
|
5
11
|
* WebMock provides a helpful error message if an incompatible object is given as response body.
|
data/Gemfile
CHANGED
@@ -5,14 +5,13 @@ if ENV["EM_HTTP_REQUEST_0_X"]
|
|
5
5
|
gem 'em-http-request', '~> 0.3.0'
|
6
6
|
end
|
7
7
|
|
8
|
-
|
9
8
|
group :development do
|
10
9
|
gem 'rake'
|
11
10
|
end
|
12
11
|
|
13
12
|
group :test do
|
14
13
|
gem 'rack'
|
15
|
-
gem 'minitest_tu_shim'
|
14
|
+
gem 'minitest_tu_shim', '1.3.2'
|
16
15
|
end
|
17
16
|
|
18
17
|
platforms :jruby do
|
data/README.md
CHANGED
@@ -546,6 +546,8 @@ WebMock.should have_requested(:get, "www.example.com").
|
|
546
546
|
WebMock.should_not have_requested(:get, "www.something.com")
|
547
547
|
|
548
548
|
WebMock.should have_requested(:post, "www.example.com").with { |req| req.body == "abc" }
|
549
|
+
# Note that the block with `do ... end` instead of curly brackets won't work!
|
550
|
+
# Why? See this comment https://github.com/bblimke/webmock/issues/174#issuecomment-34908908
|
549
551
|
|
550
552
|
WebMock.should have_requested(:get, "www.example.com").with(:query => {"a" => ["b", "c"]})
|
551
553
|
|
data/lib/webmock.rb
CHANGED
data/lib/webmock/api.rb
CHANGED
@@ -19,7 +19,7 @@ module WebMock
|
|
19
19
|
|
20
20
|
def assert_requested(*args, &block)
|
21
21
|
if not args[0].is_a?(WebMock::RequestStub)
|
22
|
-
args = convert_uri_method_and_options_to_request_and_options(
|
22
|
+
args = convert_uri_method_and_options_to_request_and_options(args[0], args[1], args[2], &block)
|
23
23
|
elsif block
|
24
24
|
raise ArgumentError, "assert_requested with a stub object, doesn't accept blocks"
|
25
25
|
end
|
@@ -28,7 +28,7 @@ module WebMock
|
|
28
28
|
|
29
29
|
def assert_not_requested(*args, &block)
|
30
30
|
if not args[0].is_a?(WebMock::RequestStub)
|
31
|
-
args = convert_uri_method_and_options_to_request_and_options(
|
31
|
+
args = convert_uri_method_and_options_to_request_and_options(args[0], args[1], args[2], &block)
|
32
32
|
elsif block
|
33
33
|
raise ArgumentError, "assert_not_requested with a stub object, doesn't accept blocks"
|
34
34
|
end
|
@@ -59,9 +59,13 @@ module WebMock
|
|
59
59
|
|
60
60
|
private
|
61
61
|
|
62
|
-
def convert_uri_method_and_options_to_request_and_options(
|
63
|
-
|
64
|
-
|
62
|
+
def convert_uri_method_and_options_to_request_and_options(method, uri, options, &block)
|
63
|
+
options ||= {}
|
64
|
+
options_for_pattern = options.dup
|
65
|
+
[:times, :at_least_times, :at_most_times].each { |key| options_for_pattern.delete(key) }
|
66
|
+
request = WebMock::RequestPattern.new(method, uri, options_for_pattern)
|
67
|
+
request = request.with(&block) if block
|
68
|
+
[request, options]
|
65
69
|
end
|
66
70
|
|
67
71
|
def assert_request_requested(request, options = {})
|
@@ -20,6 +20,7 @@ module WebMock
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def with(options = {}, &block)
|
23
|
+
raise ArgumentError.new('#with method invoked with no arguments. Either options hash or block must be specified.') if options.empty? && !block_given?
|
23
24
|
assign_options(options)
|
24
25
|
@with_block = block
|
25
26
|
self
|
@@ -49,6 +50,7 @@ module WebMock
|
|
49
50
|
|
50
51
|
def assign_options(options)
|
51
52
|
options = WebMock::Util::HashKeysStringifier.stringify_keys!(options, :deep => true)
|
53
|
+
HashValidator.new(options).validate_keys('body', 'headers', 'query')
|
52
54
|
@body_pattern = BodyPattern.new(options['body']) if options.has_key?('body')
|
53
55
|
@headers_pattern = HeadersPattern.new(options['headers']) if options.has_key?('headers')
|
54
56
|
@uri_pattern.add_query_params(options['query']) if options.has_key?('query')
|
data/lib/webmock/response.rb
CHANGED
@@ -76,11 +76,13 @@ module WebMock
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def options=(options)
|
79
|
-
|
80
|
-
|
81
|
-
self.
|
82
|
-
self.
|
83
|
-
|
79
|
+
options = WebMock::Util::HashKeysStringifier.stringify_keys!(options)
|
80
|
+
HashValidator.new(options).validate_keys('headers', 'status', 'body', 'exception', 'should_timeout')
|
81
|
+
self.headers = options['headers']
|
82
|
+
self.status = options['status']
|
83
|
+
self.body = options['body']
|
84
|
+
self.exception = options['exception']
|
85
|
+
@should_timeout = options['should_timeout']
|
84
86
|
end
|
85
87
|
|
86
88
|
def evaluate(request_signature)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module WebMock
|
2
|
+
class HashValidator
|
3
|
+
def initialize(hash)
|
4
|
+
@hash = hash
|
5
|
+
end
|
6
|
+
|
7
|
+
#This code is based on https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/keys.rb
|
8
|
+
def validate_keys(*valid_keys)
|
9
|
+
valid_keys.flatten!
|
10
|
+
@hash.each_key do |k|
|
11
|
+
unless valid_keys.include?(k)
|
12
|
+
raise ArgumentError.new("Unknown key: #{k.inspect}. Valid keys are: #{valid_keys.map(&:inspect).join(', ')}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/webmock/version.rb
CHANGED
@@ -373,7 +373,7 @@ unless RUBY_PLATFORM =~ /java/
|
|
373
373
|
end
|
374
374
|
|
375
375
|
it "should work with several body arguments for post using the class method" do
|
376
|
-
stub_request(:post, "www.example.com").with(:user => {:first_name=>'Bartosz', :last_name=>'Blimke'})
|
376
|
+
stub_request(:post, "www.example.com").with(:body => {:user => {:first_name=>'Bartosz', :last_name=>'Blimke'}})
|
377
377
|
c = Curl::Easy.http_post "http://www.example.com", 'user[first_name]=Bartosz', 'user[last_name]=Blimke'
|
378
378
|
c.response_code.should == 200
|
379
379
|
end
|
@@ -22,7 +22,7 @@ unless RUBY_PLATFORM =~ /java/
|
|
22
22
|
|
23
23
|
describe "when params are used" do
|
24
24
|
it "should take into account params for POST request" do
|
25
|
-
stub_request(:post, "www.example.com/?hello=world").with(:
|
25
|
+
stub_request(:post, "www.example.com/?hello=world").with(:query => {:hello => 'world'})
|
26
26
|
request = Typhoeus::Request.new("http://www.example.com", :method => :post, :params => {:hello => 'world'})
|
27
27
|
hydra.queue(request)
|
28
28
|
hydra.run
|
@@ -48,6 +48,13 @@ describe WebMock::RequestPattern do
|
|
48
48
|
@request_pattern.to_s.should ==WebMock::RequestPattern.new(:get, "www.example.com", :headers => {'A' => 'a'}).to_s
|
49
49
|
end
|
50
50
|
|
51
|
+
it "should raise an error if options passed to `with` are invalid" do
|
52
|
+
expect { @request_pattern.with(:foo => "bar") }.to raise_error('Unknown key: "foo". Valid keys are: "body", "headers", "query"')
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should raise an error if neither options or block is provided" do
|
56
|
+
expect { @request_pattern.with() }.to raise_error('#with method invoked with no arguments. Either options hash or block must be specified.')
|
57
|
+
end
|
51
58
|
end
|
52
59
|
|
53
60
|
|
data/spec/unit/response_spec.rb
CHANGED
@@ -26,6 +26,10 @@ describe WebMock::Response do
|
|
26
26
|
@response = WebMock::Response.new(:headers => {'A' => 'a'})
|
27
27
|
end
|
28
28
|
|
29
|
+
it "should raise an error when initialized with unknown option" do
|
30
|
+
expect { WebMock::Response.new(:foo => "bar") }.to raise_error('Unknown key: "foo". Valid keys are: "headers", "status", "body", "exception", "should_timeout"')
|
31
|
+
end
|
32
|
+
|
29
33
|
it "should report normalized headers" do
|
30
34
|
WebMock::Util::Headers.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
|
31
35
|
@response = WebMock::Response.new(:headers => {'A' => 'a'})
|
@@ -33,7 +37,6 @@ describe WebMock::Response do
|
|
33
37
|
end
|
34
38
|
|
35
39
|
describe "status" do
|
36
|
-
|
37
40
|
it "should have 200 code and empty message by default" do
|
38
41
|
@response.status.should == [200, ""]
|
39
42
|
end
|
@@ -47,7 +50,6 @@ describe WebMock::Response do
|
|
47
50
|
@response = WebMock::Response.new(:status => [500, "Internal Server Error"])
|
48
51
|
@response.status.should == [500, "Internal Server Error"]
|
49
52
|
end
|
50
|
-
|
51
53
|
end
|
52
54
|
|
53
55
|
describe "raising error" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webmock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 65
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 20
|
9
|
-
-
|
10
|
-
version: 1.20.
|
9
|
+
- 3
|
10
|
+
version: 1.20.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Bartosz Blimke
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2014-11-
|
18
|
+
date: 2014-11-05 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -273,6 +273,7 @@ files:
|
|
273
273
|
- lib/webmock/test_unit.rb
|
274
274
|
- lib/webmock/util/hash_counter.rb
|
275
275
|
- lib/webmock/util/hash_keys_stringifier.rb
|
276
|
+
- lib/webmock/util/hash_validator.rb
|
276
277
|
- lib/webmock/util/headers.rb
|
277
278
|
- lib/webmock/util/json.rb
|
278
279
|
- lib/webmock/util/query_mapper.rb
|