http_stub 0.4.0 → 0.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.
data/lib/http_stub.rb CHANGED
@@ -9,7 +9,9 @@ require 'sass'
9
9
  require 'net/http'
10
10
  require 'json'
11
11
 
12
+ require File.expand_path('../http_stub/hash_extensions', __FILE__)
12
13
  require File.expand_path('../http_stub/response', __FILE__)
14
+ require File.expand_path('../http_stub/models/headers', __FILE__)
13
15
  require File.expand_path('../http_stub/models/parameters', __FILE__)
14
16
  require File.expand_path('../http_stub/models/stub', __FILE__)
15
17
  require File.expand_path('../http_stub/models/stub_activator', __FILE__)
@@ -25,6 +25,7 @@ module HttpStub
25
25
  "activation_uri" => activation_uri,
26
26
  "uri" => stub_uri,
27
27
  "method" => options[:method],
28
+ "headers" => options[:headers] || {},
28
29
  "parameters" => options[:parameters] || {},
29
30
  "response" => {
30
31
  "status" => response_options[:status] || "200",
@@ -68,6 +69,7 @@ module HttpStub
68
69
  request.body = {
69
70
  "uri" => uri,
70
71
  "method" => options[:method],
72
+ "headers" => options[:headers] || {},
71
73
  "parameters" => options[:parameters] || {},
72
74
  "response" => {
73
75
  "status" => response_options[:status] || "200",
@@ -0,0 +1,22 @@
1
+ module HttpStub
2
+
3
+ module HashExtensions
4
+
5
+ def downcase_keys
6
+ self.reduce({}) do |result, element|
7
+ result[element[0].is_a?(::String) ? element[0].downcase : element[0]] = element[1]
8
+ result
9
+ end
10
+ end
11
+
12
+ def has_hash?(other_hash)
13
+ other_hash.nil? || other_hash.reduce(true) do |result, element|
14
+ result && (self[element[0]] == element[1])
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+
22
+ ::Hash.send(:include, HttpStub::HashExtensions)
@@ -0,0 +1,31 @@
1
+ module HttpStub
2
+ module Models
3
+
4
+ class Headers
5
+
6
+ def initialize(headers)
7
+ @headers = headers || {}
8
+ end
9
+
10
+ def match?(request)
11
+ headers_in(request).downcase_keys.has_hash?(@headers.downcase_keys)
12
+ end
13
+
14
+ def to_s
15
+ @headers ? @headers.map { |key_and_value| key_and_value.join(":") }.join(", ") : ""
16
+ end
17
+
18
+ private
19
+
20
+ def headers_in(request)
21
+ request.env.reduce({}) do |result, element|
22
+ match = element[0].match(/^HTTP_(.*)/)
23
+ result[match[1]] = element[1] if match
24
+ result
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
@@ -8,13 +8,11 @@ module HttpStub
8
8
  end
9
9
 
10
10
  def match?(request)
11
- @parameters.nil? || @parameters.reduce(true) do |result, parameter|
12
- result && (request.params[parameter[0]] == parameter[1])
13
- end
11
+ request.params.has_hash?(@parameters)
14
12
  end
15
13
 
16
14
  def to_s
17
- @parameters ? @parameters.map { |param| "#{param[0]}=#{param[1]}" }.join("&") : ""
15
+ @parameters ? @parameters.map { |key_and_value| key_and_value.join("=") }.join("&") : ""
18
16
  end
19
17
 
20
18
  end
@@ -3,16 +3,20 @@ module HttpStub
3
3
 
4
4
  class Stub
5
5
 
6
- attr_reader :response
6
+ attr_reader :headers, :parameters, :response
7
7
 
8
8
  def initialize(options)
9
9
  @stub_options = options
10
+ @headers = HttpStub::Models::Headers.new(options["headers"])
10
11
  @parameters = HttpStub::Models::Parameters.new(options["parameters"])
11
12
  @response = HttpStub::Response.new(options["response"])
12
13
  end
13
14
 
14
15
  def satisfies?(request)
15
- uri == request.path_info && method.downcase == request.request_method.downcase && @parameters.match?(request)
16
+ uri == request.path_info &&
17
+ method.downcase == request.request_method.downcase &&
18
+ @headers.match?(request) &&
19
+ @parameters.match?(request)
16
20
  end
17
21
 
18
22
  def uri
@@ -23,10 +27,6 @@ module HttpStub
23
27
  @stub_options["method"]
24
28
  end
25
29
 
26
- def parameters
27
- @parameters
28
- end
29
-
30
30
  def to_s
31
31
  @stub_options.to_s
32
32
  end
@@ -29,6 +29,10 @@ module HttpStub
29
29
  # {
30
30
  # "uri": "/some/path",
31
31
  # "method": "get",
32
+ # "headers": {
33
+ # "key": "value",
34
+ # ...
35
+ # },
32
36
  # "parameters": {
33
37
  # "key": "value",
34
38
  # ...
@@ -1,3 +1,3 @@
1
1
  module HttpStub
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -5,6 +5,9 @@
5
5
  %tr
6
6
  %td Method:
7
7
  %td=the_stub.method
8
+ %tr
9
+ %td Headers:
10
+ %td=h(the_stub.headers)
8
11
  %tr
9
12
  %td Parameters:
10
13
  %td=h(the_stub.parameters)
@@ -61,7 +61,7 @@ describe HttpStub::Configurer, "when the server is running" do
61
61
 
62
62
  describe "when a response for a request is stubbed" do
63
63
 
64
- describe "that contains no parameters" do
64
+ describe "that contains no headers or parameters" do
65
65
 
66
66
  before(:each) do
67
67
  configurer.stub_response!("/path2", method: :get, response: { status: 201, body: "Stub body" })
@@ -96,16 +96,46 @@ describe HttpStub::Configurer, "when the server is running" do
96
96
 
97
97
  end
98
98
 
99
+ describe "that contains headers" do
100
+
101
+ before(:each) do
102
+ configurer.stub_response!("/path3", method: :get, headers: { key: "value" },
103
+ response: { status: 202, body: "Another stub body" })
104
+ end
105
+
106
+ describe "and that request is made" do
107
+
108
+ let(:response) { HTTParty.get("http://localhost:8001/path3", headers: { "key" => "value" }) }
109
+
110
+ it "should replay the stubbed response" do
111
+ response.code.should eql(202)
112
+ response.body.should eql("Another stub body")
113
+ end
114
+
115
+ end
116
+
117
+ describe "and a request with different headers is made" do
118
+
119
+ let(:response) { HTTParty.get("http://localhost:8001/path3", headers: { "key" => "another_value" }) }
120
+
121
+ it "should respond with a 404 status code" do
122
+ response.code.should eql(404)
123
+ end
124
+
125
+ end
126
+
127
+ end
128
+
99
129
  describe "that contains parameters" do
100
130
 
101
131
  before(:each) do
102
- configurer.stub_response!("/path3", method: :get, parameters: { key: "value" },
132
+ configurer.stub_response!("/path4", method: :get, parameters: { key: "value" },
103
133
  response: { status: 202, body: "Another stub body" })
104
134
  end
105
135
 
106
136
  describe "and that request is made" do
107
137
 
108
- let(:response) { Net::HTTP.get_response("localhost", "/path3?key=value", 8001) }
138
+ let(:response) { Net::HTTP.get_response("localhost", "/path4?key=value", 8001) }
109
139
 
110
140
  it "should replay the stubbed response" do
111
141
  response.code.should eql("202")
@@ -116,7 +146,7 @@ describe HttpStub::Configurer, "when the server is running" do
116
146
 
117
147
  describe "and a request with different parameters is made" do
118
148
 
119
- let(:response) { Net::HTTP.get_response("localhost", "/path3?key=another_value", 8001) }
149
+ let(:response) { Net::HTTP.get_response("localhost", "/path4?key=another_value", 8001) }
120
150
 
121
151
  it "should respond with a 404 status code" do
122
152
  response.code.should eql("404")
@@ -0,0 +1,143 @@
1
+ describe HttpStub::HashExtensions do
2
+
3
+ describe "#downcase_keys" do
4
+
5
+ describe "when the hash contains keys which are strings" do
6
+
7
+ let(:hash) do
8
+ { "lower" => 1, "UPPER" => 2, "MiXeDcAsE" => 3 }
9
+ end
10
+
11
+ it "should downcase the string keys" do
12
+ hash.downcase_keys.should eql({ "lower" => 1, "upper" => 2, "mixedcase" => 3 })
13
+ end
14
+
15
+ end
16
+
17
+ describe "when the hash contains keys which are not strings" do
18
+
19
+ let(:hash) do
20
+ { 1 => 2, :symbol => 3, nil => 4 }
21
+ end
22
+
23
+ it "should not alter a hash" do
24
+ hash.downcase_keys.should eql({ 1 => 2, :symbol => 3, nil => 4 })
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ describe "#has_hash?" do
32
+
33
+ describe "when many elements are provided" do
34
+
35
+ let(:hash_parameter) { { "key1" => "value1", "key2" => "value2", "key3" => "value3" } }
36
+
37
+ describe "and the hash contains only those elements" do
38
+
39
+ let(:hash) { hash_parameter }
40
+
41
+ it "should return true" do
42
+ hash.has_hash?(hash_parameter).should be(true)
43
+ end
44
+
45
+ end
46
+
47
+ describe "and the hash contains more than those elements" do
48
+
49
+ let(:hash) { hash_parameter.merge("key4" => "value4") }
50
+
51
+ it "should return true" do
52
+ hash.has_hash?(hash_parameter).should be(true)
53
+ end
54
+
55
+ end
56
+
57
+ describe "and the hash contains keys that match but values that do not match" do
58
+
59
+ let(:hash) { { "key1" => "value1", "key2" => "nonMatchingValue", "key3" => "value3" } }
60
+
61
+ it "should return false" do
62
+ hash.has_hash?(hash_parameter).should be(false)
63
+ end
64
+
65
+ end
66
+
67
+ describe "and the hash contains less than those elements" do
68
+
69
+ let(:hash) { { "key1" => "value1", "key3" => "value3" } }
70
+
71
+ it "should return false" do
72
+ hash.has_hash?(hash_parameter).should be(false)
73
+ end
74
+
75
+ end
76
+
77
+ describe "and the hash contains no elements" do
78
+
79
+ let(:hash) { {} }
80
+
81
+ it "should return false" do
82
+ hash.has_hash?(hash_parameter).should be(false)
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ describe "when no elements are provided" do
90
+
91
+ let(:hash_parameter) { {} }
92
+
93
+ describe "and the hash contains no element" do
94
+
95
+ let(:hash) { {} }
96
+
97
+ it "should return true" do
98
+ hash.has_hash?(hash_parameter).should be(true)
99
+ end
100
+
101
+ end
102
+
103
+ describe "when the hash contains elements" do
104
+
105
+ let(:hash) { { "key" => "value" } }
106
+
107
+ it "should return true" do
108
+ hash.has_hash?(hash_parameter).should be(true)
109
+ end
110
+
111
+ end
112
+
113
+ end
114
+
115
+ describe "when a nil hash is provided" do
116
+
117
+ let(:hash_parameter) { nil }
118
+
119
+ describe "and the hash contains no elements" do
120
+
121
+ let(:hash) { {} }
122
+
123
+ it "should return true" do
124
+ hash.has_hash?(hash_parameter).should be(true)
125
+ end
126
+
127
+ end
128
+
129
+ describe "when the hash contains elements" do
130
+
131
+ let(:hash) { { "key" => "value" } }
132
+
133
+ it "should return true" do
134
+ hash.has_hash?(hash_parameter).should be(true)
135
+ end
136
+
137
+ end
138
+
139
+ end
140
+
141
+ end
142
+
143
+ end
@@ -0,0 +1,153 @@
1
+ describe HttpStub::Models::Headers do
2
+
3
+ let(:non_http_env_elements) do
4
+ {
5
+ "GATEWAY_INTERFACE" => "CGI/1.1",
6
+ "QUERY_STRING" => "some string",
7
+ "REMOTE_ADDR" => "127.0.0.1",
8
+ "SCRIPT_NAME" => "some script",
9
+ "SERVER_NAME" => "localhost",
10
+ }
11
+ end
12
+ let(:env) { non_http_env_elements.merge(request_headers) }
13
+ let(:request) { double("HttpRequest", env: env) }
14
+
15
+ let(:model) { HttpStub::Models::Headers.new(mandatory_headers) }
16
+
17
+ describe "#match?" do
18
+
19
+ describe "when multiple headers are mandatory" do
20
+
21
+ let(:mandatory_headers) { { "KEY1" => "value1", "KEY2" => "value2", "KEY3" => "value3" } }
22
+
23
+ describe "and the mandatory headers are provided" do
24
+
25
+ let(:request_headers) { { "HTTP_KEY1" => "value1", "HTTP_KEY2" => "value2", "HTTP_KEY3" => "value3" } }
26
+
27
+ describe "and the casing of the header names is identical" do
28
+
29
+ it "should return true" do
30
+ model.match?(request).should be_true
31
+ end
32
+
33
+ end
34
+
35
+ describe "and the casing of the header names is different" do
36
+
37
+ let(:mandatory_headers) { { "key1" => "value1", "KEY2" => "value2", "key3" => "value3" } }
38
+
39
+ it "should return true" do
40
+ model.match?(request).should be_true
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+
47
+ describe "and the request headers have different values" do
48
+
49
+ let(:request_headers) { { "HTTP_KEY1" => "value1", "HTTP_KEY2" => "doesNotMatch", "HTTP_KEY3" => "value3" } }
50
+
51
+ it "should return false" do
52
+ model.match?(request).should be_false
53
+ end
54
+
55
+ end
56
+
57
+ describe "and some mandatory headers are omitted" do
58
+
59
+ let(:request_headers) { { "HTTP_KEY1" => "value1", "HTTP_KEY3" => "value3" } }
60
+
61
+ it "should return false" do
62
+ model.match?(request).should be_false
63
+ end
64
+
65
+ end
66
+
67
+ describe "and all mandatory headers are omitted" do
68
+
69
+ let(:request_headers) { {} }
70
+
71
+ it "should return false" do
72
+ model.match?(request).should be_false
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
79
+ describe "when no headers are mandatory" do
80
+
81
+ let(:mandatory_headers) { {} }
82
+
83
+ describe "and headers are provided" do
84
+
85
+ let(:request_headers) { { "HTTP_KEY" => "value" } }
86
+
87
+ it "should return true" do
88
+ model.match?(request).should be_true
89
+ end
90
+
91
+ end
92
+
93
+ end
94
+
95
+ describe "when the mandatory headers are nil" do
96
+
97
+ let(:mandatory_headers) { nil }
98
+
99
+ describe "and headers are provided" do
100
+
101
+ let(:request_headers) { { "HTTP_KEY" => "value" } }
102
+
103
+ it "should return true" do
104
+ model.match?(request).should be_true
105
+ end
106
+
107
+ end
108
+
109
+ end
110
+
111
+ end
112
+
113
+ describe "#to_s" do
114
+
115
+ describe "when multiple headers are provided" do
116
+
117
+ let(:mandatory_headers) { { "key1" => "value1", "key2" => "value2", "key3" => "value3" } }
118
+
119
+ it "should return a string containing each header formatted as a conventional request header" do
120
+ result = model.to_s
121
+
122
+ mandatory_headers.each { |key, value| result.should match(/#{key}:#{value}/) }
123
+ end
124
+
125
+ it "should comma delimit the headers" do
126
+ model.to_s.should match(/key\d.value\d\, key\d.value\d\, key\d.value\d/)
127
+ end
128
+
129
+ end
130
+
131
+ describe "when empty headers are provided" do
132
+
133
+ let(:mandatory_headers) { {} }
134
+
135
+ it "should return an empty string" do
136
+ model.to_s.should eql("")
137
+ end
138
+
139
+ end
140
+
141
+ describe "when nil headers are provided" do
142
+
143
+ let(:mandatory_headers) { nil }
144
+
145
+ it "should return an empty string" do
146
+ model.to_s.should eql("")
147
+ end
148
+
149
+ end
150
+
151
+ end
152
+
153
+ end
@@ -1,115 +1,29 @@
1
1
  describe HttpStub::Models::Parameters do
2
2
 
3
+ let(:request_params) { double("RequestParameters") }
3
4
  let(:request) { double("HttpRequest", params: request_params) }
4
5
 
5
- let(:parameters) { HttpStub::Models::Parameters.new(params) }
6
+ let(:params) { { "key1" => "value1", "key2" => "value2", "key3" => "value3" } }
7
+ let(:model) { HttpStub::Models::Parameters.new(params) }
6
8
 
7
9
  describe "#match?" do
8
10
 
9
- describe "when multiple parameters are provided" do
10
-
11
- let(:params) { { "key1" => "value1", "key2" => "value2", "key3" => "value3" } }
12
-
13
- describe "and the request contains only those parameters" do
14
-
15
- let(:request_params) { params }
16
-
17
- it "should return true" do
18
- parameters.match?(request).should be(true)
19
- end
20
-
21
- end
22
-
23
- describe "and the request contains more than those parameters" do
24
-
25
- let(:request_params) { params.merge("key4" => "value4") }
26
-
27
- it "should return true" do
28
- parameters.match?(request).should be(true)
29
- end
30
-
31
- end
11
+ describe "when the request parameters contain the model parameters" do
32
12
 
33
- describe "and the requests contains only those parameters with values that do not match" do
34
-
35
- let(:request_params) { { "key1" => "value1", "key2" => "nonMatchingValue", "key3" => "value3" } }
36
-
37
- it "should return false" do
38
- parameters.match?(request).should be(false)
39
- end
40
-
41
- end
42
-
43
- describe "and the request contains a subset of those parameters" do
44
-
45
- let(:request_params) { { "key1" => "value1", "key3" => "value3" } }
46
-
47
- it "should return false" do
48
- parameters.match?(request).should be(false)
49
- end
50
-
51
- end
52
-
53
- describe "and the request contains no parameters" do
54
-
55
- let(:request_params) { {} }
56
-
57
- it "should return false" do
58
- parameters.match?(request).should be(false)
59
- end
13
+ before(:each) { request_params.stub!(:has_hash?).with(params).and_return(true) }
60
14
 
15
+ it "should return true" do
16
+ model.match?(request).should be(true)
61
17
  end
62
18
 
63
19
  end
64
20
 
65
- describe "when empty parameters are provided" do
66
-
67
- let(:params) { {} }
68
-
69
- describe "when the request contains no parameters" do
70
-
71
- let(:request_params) { {} }
72
-
73
- it "should return true" do
74
- parameters.match?(request).should be(true)
75
- end
76
-
77
- end
78
-
79
- describe "when the request contains parameters" do
80
-
81
- let(:request_params) { { "key" => "value" } }
82
-
83
- it "should return true" do
84
- parameters.match?(request).should be(true)
85
- end
86
-
87
- end
88
-
89
- end
90
-
91
- describe "when nil parameters are provided" do
92
-
93
- let(:params) { nil }
94
-
95
- describe "when the request contains no parameters" do
96
-
97
- let(:request_params) { {} }
98
-
99
- it "should return true" do
100
- parameters.match?(request).should be(true)
101
- end
102
-
103
- end
104
-
105
- describe "when the request contains parameters" do
106
-
107
- let(:request_params) { { "key" => "value" } }
21
+ describe "when the request parameters do not contain the model parameters" do
108
22
 
109
- it "should return true" do
110
- parameters.match?(request).should be(true)
111
- end
23
+ before(:each) { request_params.stub!(:has_hash?).with(params).and_return(false) }
112
24
 
25
+ it "should return false" do
26
+ model.match?(request).should be(false)
113
27
  end
114
28
 
115
29
  end
@@ -123,13 +37,13 @@ describe HttpStub::Models::Parameters do
123
37
  let(:params) { { "key1" => "value1", "key2" => "value2", "key3" => "value3" } }
124
38
 
125
39
  it "should return a string containing each parameter formatted as a conventional request parameter" do
126
- result = parameters.to_s
40
+ result = model.to_s
127
41
 
128
42
  params.each { |key, value| result.should match(/#{key}=#{value}/) }
129
43
  end
130
44
 
131
45
  it "should separate each parameter with the conventional request parameter delimiter" do
132
- parameters.to_s.should match(/key\d=value\d\&key\d=value\d\&key\d=value\d/)
46
+ model.to_s.should match(/key\d.value\d\&key\d.value\d\&key\d.value\d/)
133
47
  end
134
48
 
135
49
  end
@@ -139,7 +53,7 @@ describe HttpStub::Models::Parameters do
139
53
  let(:params) { {} }
140
54
 
141
55
  it "should return an empty string" do
142
- parameters.to_s.should eql("")
56
+ model.to_s.should eql("")
143
57
  end
144
58
 
145
59
  end
@@ -149,7 +63,7 @@ describe HttpStub::Models::Parameters do
149
63
  let(:params) { nil }
150
64
 
151
65
  it "should return an empty string" do
152
- parameters.to_s.should eql("")
66
+ model.to_s.should eql("")
153
67
  end
154
68
 
155
69
  end
@@ -3,13 +3,17 @@ describe HttpStub::Models::Stub do
3
3
  let(:stub_uri) { "/a_path" }
4
4
  let(:stub_method) { "get" }
5
5
  let(:stub_parameters) do
6
- { "param" => "value" }
6
+ { "param" => "param_value" }
7
+ end
8
+ let(:stub_headers) do
9
+ { "header" => "header_value" }
7
10
  end
8
11
  let(:stub_options) do
9
12
  {
10
13
  "uri" => stub_uri,
11
14
  "method" => stub_method,
12
15
  "parameters" => stub_parameters,
16
+ "headers" => stub_headers,
13
17
  "response" => {
14
18
  "status" => 201,
15
19
  "body" => "Foo"
@@ -18,8 +22,12 @@ describe HttpStub::Models::Stub do
18
22
  end
19
23
  let(:the_stub) { HttpStub::Models::Stub.new(stub_options) }
20
24
  let(:parameters_model) { double(HttpStub::Models::Parameters, match?: true) }
21
-
22
- before(:each) { HttpStub::Models::Parameters.stub!(:new).and_return(parameters_model) }
25
+ let(:headers_model) { double(HttpStub::Models::Headers, match?: true) }
26
+
27
+ before(:each) do
28
+ HttpStub::Models::Parameters.stub!(:new).and_return(parameters_model)
29
+ HttpStub::Models::Headers.stub!(:new).and_return(headers_model)
30
+ end
23
31
 
24
32
  describe "#satisfies?" do
25
33
 
@@ -31,24 +39,34 @@ describe HttpStub::Models::Stub do
31
39
 
32
40
  describe "and the request method matches" do
33
41
 
34
- describe "and a parameter match is configured" do
35
-
42
+ describe "and a header match is configured" do
43
+
36
44
  describe "that matches" do
37
-
38
- before(:each) { parameters_model.stub!(:match?).with(request).and_return(true) }
39
45
 
40
- it "should return true" do
41
- the_stub.satisfies?(request).should be_true
42
- end
43
-
44
- end
45
-
46
- describe "that does not match" do
46
+ before(:each) { headers_model.stub!(:match?).with(request).and_return(true) }
47
+
48
+ describe "and a parameter match is configured" do
49
+
50
+ describe "that matches" do
51
+
52
+ before(:each) { parameters_model.stub!(:match?).with(request).and_return(true) }
47
53
 
48
- before(:each) { parameters_model.stub!(:match?).with(request).and_return(false) }
54
+ it "should return true" do
55
+ the_stub.satisfies?(request).should be_true
56
+ end
57
+
58
+ end
59
+
60
+ describe "that does not match" do
61
+
62
+ before(:each) { parameters_model.stub!(:match?).with(request).and_return(false) }
63
+
64
+ it "should return false" do
65
+ the_stub.satisfies?(request).should be_false
66
+ end
67
+
68
+ end
49
69
 
50
- it "should return false" do
51
- the_stub.satisfies?(request).should be_false
52
70
  end
53
71
 
54
72
  end
@@ -79,6 +97,16 @@ describe HttpStub::Models::Stub do
79
97
 
80
98
  end
81
99
 
100
+ describe "when the headers do not match" do
101
+
102
+ before(:each) { headers_model.stub!(:match?).with(request).and_return(false) }
103
+
104
+ it "should return false" do
105
+ the_stub.satisfies?(request).should be_false
106
+ end
107
+
108
+ end
109
+
82
110
  end
83
111
 
84
112
  describe "#uri" do
@@ -97,6 +125,14 @@ describe HttpStub::Models::Stub do
97
125
 
98
126
  end
99
127
 
128
+ describe "#headers" do
129
+
130
+ it "should return the headers model encapsulating the headers provided in the request body" do
131
+ the_stub.headers.should eql(headers_model)
132
+ end
133
+
134
+ end
135
+
100
136
  describe "#parameters" do
101
137
 
102
138
  it "should return the parameters model encapsulating the parameters provided in the request body" do
@@ -119,11 +155,19 @@ describe HttpStub::Models::Stub do
119
155
 
120
156
  describe "#to_s" do
121
157
 
158
+ let(:stub_headers) do
159
+ {
160
+ "header1" => "header_value1",
161
+ "header2" => "header_value2",
162
+ "header3" => "header_value3"
163
+ }
164
+ end
165
+
122
166
  let(:stub_parameters) do
123
167
  {
124
- "param1" => "value1",
125
- "param2" => "value2",
126
- "param3" => "value3"
168
+ "param1" => "param_value1",
169
+ "param2" => "param_value2",
170
+ "param3" => "param_value3"
127
171
  }
128
172
  end
129
173
 
@@ -135,6 +179,13 @@ describe HttpStub::Models::Stub do
135
179
  the_stub.to_s.should match(/get/)
136
180
  end
137
181
 
182
+ it "should return a string containing the stubbed headers" do
183
+ stub_headers.each_pair do |key, value|
184
+ the_stub.to_s.should match(/#{Regexp.escape(key)}/)
185
+ the_stub.to_s.should match(/#{Regexp.escape(value)}/)
186
+ end
187
+ end
188
+
138
189
  it "should return a string containing the stubbed parameters" do
139
190
  stub_parameters.each_pair do |key, value|
140
191
  the_stub.to_s.should match(/#{Regexp.escape(key)}/)
@@ -27,8 +27,12 @@ describe HttpStub::Server, "when the server is running" do
27
27
  (1..3).each { |i| response.body.should match(/#{escape_html("/path#{i}")}/) }
28
28
  end
29
29
 
30
+ it "should return a response whose body contains the headers of each activators stub" do
31
+ (1..3).each { |i| response.body.should match(/header#{i}:header_value#{i}/) }
32
+ end
33
+
30
34
  it "should return a response whose body contains the parameters of each activators stub" do
31
- (1..3).each { |i| response.body.should match(/param#{i}=value#{i}/) }
35
+ (1..3).each { |i| response.body.should match(/param#{i}=param_value#{i}/) }
32
36
  end
33
37
 
34
38
  it "should return a response whose body contains the response status of each activators stub" do
@@ -62,8 +66,12 @@ describe HttpStub::Server, "when the server is running" do
62
66
  (1..3).each { |i| response.body.should match(/#{escape_html("/path#{i}")}/) }
63
67
  end
64
68
 
69
+ it "should return a response whose body contains the headers of each stub" do
70
+ (1..3).each { |i| response.body.should match(/header#{i}:header_value#{i}/) }
71
+ end
72
+
65
73
  it "should return a response whose body contains the parameters of each stub" do
66
- (1..3).each { |i| response.body.should match(/param#{i}=value#{i}/) }
74
+ (1..3).each { |i| response.body.should match(/param#{i}=param_value#{i}/) }
67
75
  end
68
76
 
69
77
  it "should return a response whose body contains the response status of each stub" do
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,12 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start do
3
3
  add_filter "/spec/"
4
- minimum_coverage 96.1
4
+ minimum_coverage 96.5
5
5
  refuse_coverage_drop
6
6
  end if ENV["coverage"]
7
7
 
8
8
  require 'rack/test'
9
+ require 'httparty'
9
10
  require 'nokogiri'
10
11
 
11
12
  require File.expand_path('../../lib/http_stub/start_server_rake_task', __FILE__)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http_stub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-03 00:00:00.000000000 Z
13
+ date: 2013-03-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sinatra
@@ -197,6 +197,8 @@ files:
197
197
  - ./lib/http_stub/configurer.rb
198
198
  - ./lib/http_stub/controllers/stub_activator_controller.rb
199
199
  - ./lib/http_stub/controllers/stub_controller.rb
200
+ - ./lib/http_stub/hash_extensions.rb
201
+ - ./lib/http_stub/models/headers.rb
200
202
  - ./lib/http_stub/models/parameters.rb
201
203
  - ./lib/http_stub/models/registry.rb
202
204
  - ./lib/http_stub/models/stub.rb
@@ -215,6 +217,8 @@ files:
215
217
  - ./spec/lib/http_stub/configurer_integration_spec.rb
216
218
  - ./spec/lib/http_stub/controllers/stub_activator_controller_spec.rb
217
219
  - ./spec/lib/http_stub/controllers/stub_controller_spec.rb
220
+ - ./spec/lib/http_stub/hash_extensions_spec.rb
221
+ - ./spec/lib/http_stub/models/headers_spec.rb
218
222
  - ./spec/lib/http_stub/models/parameters_spec.rb
219
223
  - ./spec/lib/http_stub/models/registry_spec.rb
220
224
  - ./spec/lib/http_stub/models/stub_activator_spec.rb
@@ -246,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
250
  version: '0'
247
251
  segments:
248
252
  - 0
249
- hash: 3385338799402198881
253
+ hash: -2534473441515686622
250
254
  requirements: []
251
255
  rubyforge_project: http_stub
252
256
  rubygems_version: 1.8.25
@@ -258,6 +262,8 @@ test_files:
258
262
  - ./spec/lib/http_stub/configurer_integration_spec.rb
259
263
  - ./spec/lib/http_stub/controllers/stub_activator_controller_spec.rb
260
264
  - ./spec/lib/http_stub/controllers/stub_controller_spec.rb
265
+ - ./spec/lib/http_stub/hash_extensions_spec.rb
266
+ - ./spec/lib/http_stub/models/headers_spec.rb
261
267
  - ./spec/lib/http_stub/models/parameters_spec.rb
262
268
  - ./spec/lib/http_stub/models/registry_spec.rb
263
269
  - ./spec/lib/http_stub/models/stub_activator_spec.rb