webmock 0.7.1 → 0.7.2

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 (42) hide show
  1. data/CHANGELOG +9 -0
  2. data/README.md +169 -76
  3. data/Rakefile +2 -1
  4. data/VERSION +1 -1
  5. data/lib/webmock.rb +12 -9
  6. data/lib/webmock/adapters/rspec.rb +20 -22
  7. data/lib/webmock/adapters/rspec/matchers.rb +4 -4
  8. data/lib/webmock/adapters/rspec/webmock_matcher.rb +2 -2
  9. data/lib/webmock/adapters/test_unit.rb +20 -21
  10. data/lib/webmock/http_lib_adapters/net_http.rb +51 -15
  11. data/lib/webmock/request_profile.rb +5 -44
  12. data/lib/webmock/request_registry.rb +10 -11
  13. data/lib/webmock/request_signature.rb +44 -0
  14. data/lib/webmock/request_stub.rb +3 -3
  15. data/lib/webmock/response.rb +1 -1
  16. data/lib/webmock/rspec.rb +1 -0
  17. data/lib/webmock/test_unit.rb +1 -0
  18. data/lib/webmock/util/hash_counter.rb +16 -8
  19. data/lib/webmock/util/headers.rb +23 -0
  20. data/lib/webmock/util/uri.rb +81 -0
  21. data/lib/webmock/webmock.rb +16 -19
  22. data/spec/net_http_spec.rb +10 -9
  23. data/spec/other_net_http_libs_spec.rb +3 -1
  24. data/spec/request_profile_spec.rb +6 -116
  25. data/spec/request_registry_spec.rb +12 -17
  26. data/spec/request_signature_spec.rb +155 -0
  27. data/spec/request_stub_spec.rb +2 -2
  28. data/spec/response_spec.rb +1 -1
  29. data/spec/spec_helper.rb +4 -1
  30. data/spec/util/hash_counter_spec.rb +4 -4
  31. data/spec/util/headers_spec.rb +11 -0
  32. data/spec/util/uri_spec.rb +213 -0
  33. data/spec/vendor/addressable/lib/addressable/uri.rb +8 -0
  34. data/spec/vendor/addressable/lib/uri.rb +0 -0
  35. data/spec/webmock_spec.rb +58 -10
  36. data/test/test_helper.rb +5 -1
  37. data/test/test_webmock.rb +11 -6
  38. data/webmock.gemspec +21 -6
  39. metadata +28 -6
  40. data/lib/webmock/url.rb +0 -46
  41. data/lib/webmock/utility.rb +0 -65
  42. data/spec/utility_spec.rb +0 -70
@@ -1,50 +1,47 @@
1
- WebMock::Utility.record_loaded_net_http_replacement_libs
2
- WebMock::Utility.puts_warning_for_net_http_around_advice_libs_if_needed
3
-
4
-
5
1
  module WebMock
2
+ extend self
6
3
 
7
- def stub_request(method, url)
8
- RequestRegistry.instance.register_request_stub(RequestStub.new(method, url))
4
+ def stub_request(method, uri)
5
+ RequestRegistry.instance.register_request_stub(RequestStub.new(method, uri))
9
6
  end
10
7
 
11
8
  alias_method :stub_http_request, :stub_request
12
9
 
13
- def request(method, url)
14
- RequestProfile.new(method, url)
10
+ def request(method, uri)
11
+ RequestProfile.new(method, uri)
15
12
  end
16
13
 
17
- def assert_requested(method, url, options = {})
14
+ def assert_requested(method, uri, options = {})
18
15
  expected_times_executed = options.delete(:times) || 1
19
- request = RequestProfile.new(method, url, options[:body], options[:headers])
16
+ request = RequestProfile.new(method, uri, options[:body], options[:headers])
20
17
  verifier = RequestExecutionVerifier.new(request, expected_times_executed)
21
18
  assertion_failure(verifier.failure_message) unless verifier.matches?
22
19
  end
23
20
 
24
- def assert_not_requested(method, url, options = {})
25
- request = RequestProfile.new(method, url, options[:body], options[:headers])
21
+ def assert_not_requested(method, uri, options = {})
22
+ request = RequestProfile.new(method, uri, options[:body], options[:headers])
26
23
  verifier = RequestExecutionVerifier.new(request, options.delete(:times))
27
24
  assertion_failure(verifier.negative_failure_message) unless verifier.does_not_match?
28
25
  end
29
26
 
30
- def self.allow_net_connect!
27
+ def allow_net_connect!
31
28
  Config.instance.allow_net_connect = true
32
29
  end
33
30
 
34
- def self.disable_net_connect!
31
+ def disable_net_connect!
35
32
  Config.instance.allow_net_connect = false
36
33
  end
37
34
 
38
- def self.net_connect_allowed?
35
+ def net_connect_allowed?
39
36
  Config.instance.allow_net_connect
40
37
  end
41
38
 
42
- def self.registered_request?(request_profile)
43
- RequestRegistry.instance.registered_request?(request_profile)
39
+ def registered_request?(request_signature)
40
+ RequestRegistry.instance.registered_request?(request_signature)
44
41
  end
45
42
 
46
- def self.response_for_request(request_profile, &block)
47
- RequestRegistry.instance.response_for_request(request_profile, &block)
43
+ def response_for_request(request_signature, &block)
44
+ RequestRegistry.instance.response_for_request(request_signature, &block)
48
45
  end
49
46
 
50
47
  def reset_webmock
@@ -2,16 +2,18 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
  require 'webmock_spec'
3
3
  require 'ostruct'
4
4
 
5
- include WebMock
6
-
7
- def http_request(method, url, options = {})
8
- url = URI.parse(url)
5
+ def http_request(method, uri, options = {})
6
+ begin
7
+ uri = URI.parse(uri)
8
+ rescue
9
+ uri = Addressable::URI.heuristic_parse(uri)
10
+ end
9
11
  response = nil
10
12
  clazz = Net::HTTP.const_get("#{method.to_s.capitalize}")
11
- req = clazz.new(url.path, options[:headers])
12
- req.basic_auth url.user, url.password if url.user
13
- http = Net::HTTP.new(url.host, url.port)
14
- http.use_ssl = true if url.scheme == "https"
13
+ req = clazz.new("#{uri.path}#{uri.query ? '?' : ''}#{uri.query}", options[:headers])
14
+ req.basic_auth uri.user, uri.password if uri.user
15
+ http = Net::HTTP.new(uri.host, uri.port)
16
+ http.use_ssl = true if uri.scheme == "https"
15
17
  response = http.start {|http|
16
18
  http.request(req, options[:body])
17
19
  }
@@ -21,7 +23,6 @@ def http_request(method, url, options = {})
21
23
  :status => response.code })
22
24
  end
23
25
 
24
-
25
26
  describe "Webmock with Net:HTTP" do
26
27
 
27
28
  it_should_behave_like "WebMock"
@@ -3,7 +3,9 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
3
3
  describe "loading other Net::HTTP based libraries" do
4
4
 
5
5
  def capture_output_from_requiring(libs, additional_code = "")
6
- requires = libs.map { |lib| "require '#{lib}'" }.join("; ")
6
+ requires = libs.map { |lib| "require '#{lib}'" }
7
+ requires << " require 'addressable/uri'"
8
+ requires = requires.join("; ")
7
9
  webmock_dir = "#{File.dirname(__FILE__)}/../lib"
8
10
  vendor_dirs = Dir["#{File.dirname(__FILE__)}/vendor/*/lib"]
9
11
  load_path_opts = vendor_dirs.unshift(webmock_dir).map { |dir| "-I#{dir}" }.join(" ")
@@ -1,26 +1,24 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- include WebMock
4
-
5
3
  describe RequestProfile do
6
4
 
7
5
  describe "initialization" do
8
6
 
9
7
  it "should have assigned normalized uri" do
10
- URL.should_receive(:normalize_uri).and_return("www.google.kom")
8
+ WebMock::Util::URI.should_receive(:normalize_uri).and_return("www.google.kom")
11
9
  profile = RequestProfile.new(:get, "www.google.com")
12
10
  profile.uri.should == "www.google.kom"
13
11
  end
14
12
 
15
13
  it "should have assigned uri without normalization if uri is URI" do
16
- URL.should_not_receive(:normalize_uri)
17
- uri = URI.parse("www.google.com")
14
+ WebMock::Util::URI.should_not_receive(:normalize_uri)
15
+ uri = Addressable::URI.parse("www.google.com")
18
16
  profile = RequestProfile.new(:get, uri)
19
17
  profile.uri.should == uri
20
18
  end
21
19
 
22
20
  it "should have assigned normalized headers" do
23
- Utility.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
21
+ WebMock::Util::Headers.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
24
22
  RequestProfile.new(:get, "www.google.com", nil, 'A' => 'a').headers.should == {'B' => 'b'}
25
23
  end
26
24
 
@@ -30,7 +28,7 @@ describe RequestProfile do
30
28
 
31
29
  end
32
30
 
33
- it "should report string" do
31
+ it "should report string describing itself" do
34
32
  RequestProfile.new(:get, "www.google.com", "abc", {'A' => 'a', 'B' => 'b'}).to_s.should ==
35
33
  "GET http://www.google.com/ with body 'abc' with headers {'A'=>'a', 'B'=>'b'}"
36
34
  end
@@ -47,120 +45,12 @@ describe RequestProfile do
47
45
  end
48
46
 
49
47
  it "should assign normalized headers to request profile" do
50
- Utility.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
48
+ WebMock::Util::Headers.should_receive(:normalize_headers).with('A' => 'a').and_return('B' => 'b')
51
49
  @request_profile.with(:headers => {'A' => 'a'})
52
50
  @request_profile.headers.should == {'B' => 'b'}
53
51
  end
54
52
 
55
53
  end
56
54
 
57
- describe "when matching" do
58
-
59
- it "should match if url matches and method matches" do
60
- RequestProfile.new(:get, "www.google.com").
61
- should match(RequestProfile.new(:get, "www.google.com"))
62
- end
63
-
64
- it "should match if url matches and method is any" do
65
- RequestProfile.new(:get, "www.google.com").
66
- should match(RequestProfile.new(:any, "www.google.com"))
67
- end
68
-
69
- it "should not match if other request profile has different method" do
70
- RequestProfile.new(:get, "www.google.com").
71
- should_not match(RequestProfile.new(:post, "www.google.com"))
72
- end
73
-
74
- it "should match if uri matches other uri" do
75
- RequestProfile.new(:get, "www.google.com").
76
- should match(RequestProfile.new(:get, "www.google.com"))
77
- end
78
-
79
- it "should match if uri matches other regex uri" do
80
- RequestProfile.new(:get, "www.google.com").
81
- should match(RequestProfile.new(:get, /.*google.*/))
82
- end
83
-
84
- it "should match for uris with same parameters" do
85
- RequestProfile.new(:get, "www.google.com?a=1&b=2").
86
- should match(RequestProfile.new(:get, "www.google.com?a=1&b=2"))
87
- end
88
-
89
- it "should not match for uris with different parameters" do
90
- RequestProfile.new(:get, "www.google.com?a=2&b=1").
91
- should_not match(RequestProfile.new(:get, "www.google.com?a=1&b=2"))
92
- end
93
-
94
- it "should match for parameters in different order" do
95
- RequestProfile.new(:get, "www.google.com?a=1&b=2").
96
- should match(RequestProfile.new(:get, "www.google.com?b=2&a=1"))
97
- end
98
-
99
- it "should match for same bodies" do
100
- RequestProfile.new(:get, "www.google.com", "abc").
101
- should match(RequestProfile.new(:get, "www.google.com", "abc"))
102
- end
103
-
104
- it "should not match for different bodies" do
105
- RequestProfile.new(:get, "www.google.com", "abc").
106
- should_not match(RequestProfile.new(:get, "www.google.com", "def"))
107
- end
108
-
109
- it "should match is other has nil body" do
110
- RequestProfile.new(:get, "www.google.com", "abc").
111
- should match(RequestProfile.new(:get, "www.google.com", nil))
112
- end
113
-
114
- it "should not match if other has empty body" do
115
- RequestProfile.new(:get, "www.google.com", "abc").
116
- should_not match(RequestProfile.new(:get, "www.google.com", ""))
117
- end
118
-
119
- it "should match for same headers" do
120
- RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg').
121
- should match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg'))
122
- end
123
-
124
- it "should not match for different values of the same header" do
125
- RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg').
126
- should_not match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/png'))
127
- end
128
-
129
- it "should match if request has more headers than other" do
130
- RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg', 'Content-Length' => '8888').
131
- should match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg'))
132
- end
133
-
134
- it "should not match if request has less headers that the other and all match" do
135
- RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg').
136
- should_not match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg', 'Content-Length' => '8888'))
137
- end
138
-
139
- it "should match even is header keys or values are in different format" do
140
- RequestProfile.new(:get, "www.google.com", nil, :ContentLength => 8888, 'content_type' => 'image/png').
141
- should match(RequestProfile.new(:get, "www.google.com", nil, 'ContentLength' => '8888', 'Content-type' => 'image/png'))
142
- end
143
-
144
- it "should match is other has nil headers" do
145
- RequestProfile.new(:get, "www.google.com", nil, 'A' => 'a').
146
- should match(RequestProfile.new(:get, "www.google.com", nil, nil))
147
- end
148
-
149
- it "should not match if other has empty headers" do
150
- RequestProfile.new(:get, "www.google.com", nil, 'A' => 'a').
151
- should_not match(RequestProfile.new(:get, "www.google.com", nil, {}))
152
- end
153
-
154
- it "should not match if profile has no headers but other has headers" do
155
- RequestProfile.new(:get, "www.google.com", nil, nil).
156
- should_not match(RequestProfile.new(:get, "www.google.com", nil, {'A'=>'a'}))
157
- end
158
-
159
- it "should not match if profile has empty headers but other has headers" do
160
- RequestProfile.new(:get, "www.google.com", nil, {}).
161
- should_not match(RequestProfile.new(:get, "www.google.com", nil, {'A'=>'a'}))
162
- end
163
-
164
- end
165
55
 
166
56
  end
@@ -5,19 +5,20 @@ describe RequestRegistry do
5
5
  before(:each) do
6
6
  RequestRegistry.instance.reset_webmock
7
7
  @request_profile = RequestProfile.new(:get, "www.google.com")
8
+ @request_signature = RequestSignature.new(:get, "www.google.com")
8
9
  @request_stub = RequestStub.new(:get, "www.google.com")
9
10
  end
10
11
 
11
12
  describe "reset_webmock" do
12
13
  before(:each) do
13
14
  RequestRegistry.instance.register_request_stub(@request_stub)
14
- RequestRegistry.instance.response_for_request(@request_profile)
15
+ RequestRegistry.instance.requested_signatures.put(@request_signature)
15
16
  end
16
17
 
17
18
  it "should clean request stubs" do
18
- RequestRegistry.instance.registered_request?(@request_profile).should == @request_stub
19
+ RequestRegistry.instance.registered_request?(@request_signature).should == @request_stub
19
20
  RequestRegistry.instance.reset_webmock
20
- RequestRegistry.instance.registered_request?(@request_profile).should == nil
21
+ RequestRegistry.instance.registered_request?(@request_signature).should == nil
21
22
  end
22
23
 
23
24
  it "should clean list of executed requests" do
@@ -35,12 +36,12 @@ describe RequestRegistry do
35
36
  end
36
37
 
37
38
  it "should report if request stub is not registered" do
38
- RequestRegistry.instance.registered_request?(@request_profile).should == nil
39
+ RequestRegistry.instance.registered_request?(@request_signature).should == nil
39
40
  end
40
41
 
41
42
  it "should register and report registered stib" do
42
43
  RequestRegistry.instance.register_request_stub(@request_stub)
43
- RequestRegistry.instance.registered_request?(@request_profile).should == @request_stub
44
+ RequestRegistry.instance.registered_request?(@request_signature).should == @request_stub
44
45
  end
45
46
 
46
47
 
@@ -51,17 +52,11 @@ describe RequestRegistry do
51
52
  it "should registered response for request profile" do
52
53
  @request_stub.response = @response = Response.new
53
54
  RequestRegistry.instance.register_request_stub(@request_stub)
54
- RequestRegistry.instance.response_for_request(@request_profile).should == @response
55
+ RequestRegistry.instance.response_for_request(@request_signature).should == @response
55
56
  end
56
57
 
57
58
  it "should report nothing if no response for request is registered" do
58
- RequestRegistry.instance.response_for_request(@request_profile).should == nil
59
- end
60
-
61
- it "should increase number of times request was executed" do
62
- RequestRegistry.instance.times_executed(@request_profile).should == 0
63
- RequestRegistry.instance.response_for_request(@request_profile)
64
- RequestRegistry.instance.times_executed(@request_profile).should == 1
59
+ RequestRegistry.instance.response_for_request(@request_signature).should == nil
65
60
  end
66
61
 
67
62
  it "should always return last registered matching response" do
@@ -74,7 +69,7 @@ describe RequestRegistry do
74
69
  RequestRegistry.instance.register_request_stub(@request_stub1)
75
70
  RequestRegistry.instance.register_request_stub(@request_stub2)
76
71
  RequestRegistry.instance.register_request_stub(@request_stub3)
77
- RequestRegistry.instance.response_for_request(@request_profile).should == @response2
72
+ RequestRegistry.instance.response_for_request(@request_signature).should == @response2
78
73
  end
79
74
 
80
75
  end
@@ -91,9 +86,9 @@ describe RequestRegistry do
91
86
  @request_stub1 = RequestStub.new(:get, "www.google.com")
92
87
  @request_stub2 = RequestStub.new(:get, "www.google.net")
93
88
  @request_stub3 = RequestStub.new(:get, "www.google.org")
94
- RequestRegistry.instance.response_for_request(RequestProfile.new(:get, "www.google.com"))
95
- RequestRegistry.instance.response_for_request(RequestProfile.new(:get, "www.google.com"))
96
- RequestRegistry.instance.response_for_request(RequestProfile.new(:get, "www.google.org"))
89
+ RequestRegistry.instance.requested_signatures.put(RequestSignature.new(:get, "www.google.com"))
90
+ RequestRegistry.instance.requested_signatures.put(RequestSignature.new(:get, "www.google.com"))
91
+ RequestRegistry.instance.requested_signatures.put(RequestSignature.new(:get, "www.google.org"))
97
92
  end
98
93
 
99
94
  it "should report 0 if no request matching profile was requested" do
@@ -0,0 +1,155 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe RequestSignature do
4
+
5
+ describe "when matching" do
6
+
7
+ it "should match if uri matches and method matches" do
8
+ RequestSignature.new(:get, "www.google.com").
9
+ should match(RequestProfile.new(:get, "www.google.com"))
10
+ end
11
+
12
+ it "should match if uri matches and method is any" do
13
+ RequestSignature.new(:get, "www.google.com").
14
+ should match(RequestProfile.new(:any, "www.google.com"))
15
+ end
16
+
17
+ it "should not match if other request profile has different method" do
18
+ RequestSignature.new(:get, "www.google.com").
19
+ should_not match(RequestProfile.new(:post, "www.google.com"))
20
+ end
21
+
22
+ it "should match if uri matches other uri" do
23
+ RequestSignature.new(:get, "www.google.com").
24
+ should match(RequestProfile.new(:get, "www.google.com"))
25
+ end
26
+
27
+ it "should match if uri matches other escaped using uri" do
28
+ RequestSignature.new(:get, "www.google.com/big image.jpg").
29
+ should match(RequestProfile.new(:get, "www.google.com/big%20image.jpg"))
30
+ end
31
+
32
+ it "should match if unescaped uri matches other uri" do
33
+ RequestSignature.new(:get, "www.google.com/big%20image.jpg").
34
+ should match(RequestProfile.new(:get, "www.google.com/big image.jpg"))
35
+ end
36
+
37
+ it "should match if unescaped uri matches other regexp uri" do
38
+ RequestSignature.new(:get, "www.google.com/big%20image.jpg").
39
+ should match(RequestProfile.new(:get, /.*big image.jpg.*/))
40
+ end
41
+
42
+ it "should match if uri matches other regex uri" do
43
+ RequestSignature.new(:get, "www.google.com").
44
+ should match(RequestProfile.new(:get, /.*google.*/))
45
+ end
46
+
47
+ it "should match for uris with same parameters" do
48
+ RequestSignature.new(:get, "www.google.com?a=1&b=2").
49
+ should match(RequestProfile.new(:get, "www.google.com?a=1&b=2"))
50
+ end
51
+
52
+ it "should not match for uris with different parameters" do
53
+ RequestSignature.new(:get, "www.google.com?a=2&b=1").
54
+ should_not match(RequestProfile.new(:get, "www.google.com?a=1&b=2"))
55
+ end
56
+
57
+ it "should match for parameters in different order" do
58
+ RequestSignature.new(:get, "www.google.com?a=1&b=2").
59
+ should match(RequestProfile.new(:get, "www.google.com?b=2&a=1"))
60
+ end
61
+
62
+ describe "when parameters are escaped" do
63
+
64
+ it "should match if uri with non escaped parameters is the same as other uri with escaped parameters" do
65
+ RequestSignature.new(:get, "www.google.com/?a=a b").
66
+ should match(RequestProfile.new(:get, "www.google.com/?a=a%20b"))
67
+ end
68
+
69
+ it "should match if uri with escaped parameters is the same as other uri with non escaped parameters" do
70
+ RequestSignature.new(:get, "www.google.com/?a=a%20b").
71
+ should match(RequestProfile.new(:get, "www.google.com/?a=a b"))
72
+ end
73
+
74
+ it "should match if other regexp is for non escaped parameters but uri has escaped parameters" do
75
+ RequestSignature.new(:get, "www.google.com/?a=a%20b").
76
+ should match(RequestProfile.new(:get, /.*a=a b.*/))
77
+ end
78
+
79
+ it "should match if other regexp is for escaped parameters but uri has non escaped parameters" do
80
+ RequestSignature.new(:get, "www.google.com/?a=a b").
81
+ should match(RequestProfile.new(:get, /.*a=a%20b.*/))
82
+ end
83
+
84
+ end
85
+
86
+
87
+
88
+ it "should match for same bodies" do
89
+ RequestSignature.new(:get, "www.google.com", "abc").
90
+ should match(RequestProfile.new(:get, "www.google.com", "abc"))
91
+ end
92
+
93
+ it "should not match for different bodies" do
94
+ RequestSignature.new(:get, "www.google.com", "abc").
95
+ should_not match(RequestProfile.new(:get, "www.google.com", "def"))
96
+ end
97
+
98
+ it "should match is other has nil body" do
99
+ RequestSignature.new(:get, "www.google.com", "abc").
100
+ should match(RequestProfile.new(:get, "www.google.com", nil))
101
+ end
102
+
103
+ it "should not match if other has empty body" do
104
+ RequestSignature.new(:get, "www.google.com", "abc").
105
+ should_not match(RequestProfile.new(:get, "www.google.com", ""))
106
+ end
107
+
108
+ it "should match for same headers" do
109
+ RequestSignature.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg').
110
+ should match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg'))
111
+ end
112
+
113
+ it "should not match for different values of the same header" do
114
+ RequestSignature.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg').
115
+ should_not match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/png'))
116
+ end
117
+
118
+ it "should match if request has more headers than other" do
119
+ RequestSignature.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg', 'Content-Length' => '8888').
120
+ should match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg'))
121
+ end
122
+
123
+ it "should not match if request has less headers that the other and all match" do
124
+ RequestSignature.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg').
125
+ should_not match(RequestProfile.new(:get, "www.google.com", nil, 'Content-Type' => 'image/jpeg', 'Content-Length' => '8888'))
126
+ end
127
+
128
+ it "should match even is header keys or values are in different format" do
129
+ RequestSignature.new(:get, "www.google.com", nil, :ContentLength => 8888, 'content_type' => 'image/png').
130
+ should match(RequestProfile.new(:get, "www.google.com", nil, 'ContentLength' => '8888', 'Content-type' => 'image/png'))
131
+ end
132
+
133
+ it "should match is other has nil headers" do
134
+ RequestSignature.new(:get, "www.google.com", nil, 'A' => 'a').
135
+ should match(RequestProfile.new(:get, "www.google.com", nil, nil))
136
+ end
137
+
138
+ it "should not match if other has empty headers" do
139
+ RequestSignature.new(:get, "www.google.com", nil, 'A' => 'a').
140
+ should_not match(RequestProfile.new(:get, "www.google.com", nil, {}))
141
+ end
142
+
143
+ it "should not match if profile has no headers but other has headers" do
144
+ RequestSignature.new(:get, "www.google.com", nil, nil).
145
+ should_not match(RequestProfile.new(:get, "www.google.com", nil, {'A'=>'a'}))
146
+ end
147
+
148
+ it "should not match if profile has empty headers but other has headers" do
149
+ RequestSignature.new(:get, "www.google.com", nil, {}).
150
+ should_not match(RequestProfile.new(:get, "www.google.com", nil, {'A'=>'a'}))
151
+ end
152
+
153
+ end
154
+
155
+ end