http_stub 0.3.0 → 0.3.1

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.
@@ -10,6 +10,7 @@ require 'net/http'
10
10
  require 'json'
11
11
 
12
12
  require File.expand_path('../http_stub/response', __FILE__)
13
+ require File.expand_path('../http_stub/models/parameters', __FILE__)
13
14
  require File.expand_path('../http_stub/models/stub', __FILE__)
14
15
  require File.expand_path('../http_stub/models/alias', __FILE__)
15
16
  require File.expand_path('../http_stub/models/registry', __FILE__)
@@ -0,0 +1,23 @@
1
+ module HttpStub
2
+ module Models
3
+
4
+ class Parameters
5
+
6
+ def initialize(parameters)
7
+ @parameters = parameters
8
+ end
9
+
10
+ def match?(request)
11
+ @parameters.nil? || @parameters.reduce(true) do |result, parameter|
12
+ result && (request.params[parameter[0]] == parameter[1])
13
+ end
14
+ end
15
+
16
+ def to_s
17
+ @parameters ? @parameters.map { |param| "#{param[0]}=#{param[1]}" }.join("&") : ""
18
+ end
19
+
20
+ end
21
+
22
+ end
23
+ end
@@ -6,35 +6,29 @@ module HttpStub
6
6
  attr_reader :response
7
7
 
8
8
  def initialize(options)
9
- @alias_options = options
9
+ @stub_options = options
10
+ @parameters = HttpStub::Models::Parameters.new(options["parameters"])
10
11
  @response = HttpStub::Response.new(options["response"])
11
12
  end
12
13
 
13
14
  def satisfies?(request)
14
- uri == request.path_info &&
15
- method.downcase == request.request_method.downcase &&
16
- parameters_match?(request)
15
+ uri == request.path_info && method.downcase == request.request_method.downcase && @parameters.match?(request)
17
16
  end
18
17
 
19
18
  def uri
20
- @alias_options["uri"]
19
+ @stub_options["uri"]
21
20
  end
22
21
 
23
22
  def method
24
- @alias_options["method"]
23
+ @stub_options["method"]
25
24
  end
26
25
 
27
- def to_s
28
- @alias_options.to_s
26
+ def parameters
27
+ @parameters
29
28
  end
30
29
 
31
- private
32
-
33
- def parameters_match?(request)
34
- parameters = @alias_options["parameters"]
35
- parameters.nil? || parameters.reduce(true) do |result, parameter|
36
- result && (request.params[parameter[0]] == parameter[1])
37
- end
30
+ def to_s
31
+ @stub_options.to_s
38
32
  end
39
33
 
40
34
  end
@@ -42,6 +42,10 @@ module HttpStub
42
42
  halt(response.status, response.body)
43
43
  end
44
44
 
45
+ get "/stubs" do
46
+ haml :stubs, {}, stubs: @stub_registry.all
47
+ end
48
+
45
49
  delete "/stubs" do
46
50
  @stub_controller.clear(request)
47
51
  halt 200
@@ -1,3 +1,3 @@
1
1
  module HttpStub
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -5,6 +5,9 @@
5
5
  %tr
6
6
  %td Method:
7
7
  %td=the_stub.method
8
+ %tr
9
+ %td Parameters:
10
+ %td=h(the_stub.parameters)
8
11
  %tr
9
12
  %td Response Status:
10
13
  %td=the_stub.response.status
@@ -1,12 +1,6 @@
1
- !!!
2
- %html
3
- %head
4
- %title http_stub server configuration
5
- %link{ "rel" => "stylesheet", "href" => "/application.css", "type" => "text/css" }
6
- %body
7
- - aliases.each do |the_alias|
8
- %div
9
- %span Response Activation URI:
10
- %a{ href: the_alias.alias_uri }= the_alias.alias_uri
11
- = partial :stub, locals: { the_stub: the_alias.the_stub }
12
- %br
1
+ - aliases.each do |the_alias|
2
+ %div
3
+ %span Response Activation URI:
4
+ %a{ href: the_alias.alias_uri }= the_alias.alias_uri
5
+ = partial :stub, locals: { the_stub: the_alias.the_stub }
6
+ %br
@@ -0,0 +1,7 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title http_stub server configuration
5
+ %link{ "rel" => "stylesheet", "href" => "/application.css", "type" => "text/css" }
6
+ %body
7
+ =yield
@@ -0,0 +1,3 @@
1
+ - stubs.each do |the_stub|
2
+ = partial :stub, locals: { the_stub: the_stub }
3
+ %br
@@ -0,0 +1,159 @@
1
+ describe HttpStub::Models::Parameters do
2
+
3
+ let(:request) { double("HttpRequest", params: request_params) }
4
+
5
+ let(:parameters) { HttpStub::Models::Parameters.new(params) }
6
+
7
+ describe "#match?" do
8
+
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
32
+
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
60
+
61
+ end
62
+
63
+ end
64
+
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" } }
108
+
109
+ it "should return true" do
110
+ parameters.match?(request).should be(true)
111
+ end
112
+
113
+ end
114
+
115
+ end
116
+
117
+ end
118
+
119
+ describe "#to_s" do
120
+
121
+ describe "when multiple parameters are provided" do
122
+
123
+ let(:params) { { "key1" => "value1", "key2" => "value2", "key3" => "value3" } }
124
+
125
+ it "should return a string containing each parameter formatted as a conventional request parameter" do
126
+ result = parameters.to_s
127
+
128
+ params.each { |key, value| result.should match(/#{key}=#{value}/) }
129
+ end
130
+
131
+ 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/)
133
+ end
134
+
135
+ end
136
+
137
+ describe "when empty parameters are provided" do
138
+
139
+ let(:params) { {} }
140
+
141
+ it "should return an empty string" do
142
+ parameters.to_s.should eql("")
143
+ end
144
+
145
+ end
146
+
147
+ describe "when nil parameters are provided" do
148
+
149
+ let(:params) { nil }
150
+
151
+ it "should return an empty string" do
152
+ parameters.to_s.should eql("")
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+
159
+ end
@@ -2,7 +2,9 @@ describe HttpStub::Models::Stub do
2
2
 
3
3
  let(:stub_uri) { "/a_path" }
4
4
  let(:stub_method) { "get" }
5
- let(:stub_parameters) { {} }
5
+ let(:stub_parameters) do
6
+ { "param" => "value" }
7
+ end
6
8
  let(:stub_options) do
7
9
  {
8
10
  "uri" => stub_uri,
@@ -15,57 +17,35 @@ describe HttpStub::Models::Stub do
15
17
  }
16
18
  end
17
19
  let(:the_stub) { HttpStub::Models::Stub.new(stub_options) }
20
+ let(:parameters_model) { double(HttpStub::Models::Parameters, match?: true) }
21
+
22
+ before(:each) { HttpStub::Models::Parameters.stub!(:new).and_return(parameters_model) }
18
23
 
19
24
  describe "#satisfies?" do
20
25
 
21
26
  let(:request_uri) { stub_uri }
22
27
  let(:request_method) { stub_method }
23
- let(:request_parameters) { stub_parameters }
24
- let(:request) do
25
- double("HttpRequest", :path_info => request_uri, :request_method => request_method, :params => request_parameters)
26
- end
28
+ let(:request) { double("HttpRequest", :path_info => request_uri, :request_method => request_method) }
27
29
 
28
30
  describe "when the request uri matches" do
29
31
 
30
32
  describe "and the request method matches" do
31
33
 
32
34
  describe "and a parameter match is configured" do
33
-
34
- let(:stub_parameters) do
35
- {
36
- "param1" => "value1",
37
- "param2" => "value2",
38
- "param3" => "value3"
39
- }
40
- end
41
-
42
- describe "and the request parameters are identical" do
43
-
44
- it "should return true" do
45
- the_stub.satisfies?(request).should be_true
46
- end
47
-
48
- end
49
-
50
- describe "and the request parameters match the stub parameters and contain additional parameters" do
51
-
52
- let(:request_parameters) { stub_parameters.merge("param4" => "value4") }
35
+
36
+ describe "that matches" do
37
+
38
+ before(:each) { parameters_model.stub!(:match?).with(request).and_return(true) }
53
39
 
54
40
  it "should return true" do
55
41
  the_stub.satisfies?(request).should be_true
56
42
  end
57
-
43
+
58
44
  end
45
+
46
+ describe "that does not match" do
59
47
 
60
- describe "and the requests parameter values do not match" do
61
-
62
- let(:request_parameters) do
63
- {
64
- "param1" => "value1",
65
- "param2" => "aDifferentValue",
66
- "param3" => "value3"
67
- }
68
- end
48
+ before(:each) { parameters_model.stub!(:match?).with(request).and_return(false) }
69
49
 
70
50
  it "should return false" do
71
51
  the_stub.satisfies?(request).should be_false
@@ -73,37 +53,6 @@ describe HttpStub::Models::Stub do
73
53
 
74
54
  end
75
55
 
76
- describe "and the request parameters do not contain all stub parameters" do
77
-
78
- let(:request_parameters) do
79
- {
80
- "param1" => "value1",
81
- "param3" => "value3"
82
- }
83
- end
84
-
85
- it "should be false" do
86
- the_stub.satisfies?(request).should be_false
87
- end
88
-
89
- end
90
-
91
- end
92
-
93
- describe "and a parameter match is not configured" do
94
-
95
- describe "and parameters are provided in the request" do
96
-
97
- let(:request_parameters) do
98
- { "param1" => "value1" }
99
- end
100
-
101
- it "should be true" do
102
- the_stub.satisfies?(request).should be_true
103
- end
104
-
105
- end
106
-
107
56
  end
108
57
 
109
58
  end
@@ -148,6 +97,14 @@ describe HttpStub::Models::Stub do
148
97
 
149
98
  end
150
99
 
100
+ describe "#parameters" do
101
+
102
+ it "should return the parameters model encapsulating the parameters provided in the request body" do
103
+ the_stub.parameters.should eql(parameters_model)
104
+ end
105
+
106
+ end
107
+
151
108
  describe "#response" do
152
109
 
153
110
  it "should expose the provided response status" do
@@ -27,6 +27,10 @@ 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 parameters of each alias stub" do
31
+ (1..3).each { |i| response.body.should match(/param#{i}=value#{i}/) }
32
+ end
33
+
30
34
  it "should return a response whose body contains the response status of each alias stub" do
31
35
  (1..3).each { |i| response.body.should match(/20#{i}/) }
32
36
  end
@@ -39,6 +43,43 @@ describe HttpStub::Server, "when the server is running" do
39
43
 
40
44
  end
41
45
 
46
+ describe "GET #stubs" do
47
+
48
+ describe "when multiple stubs are configured" do
49
+
50
+ before(:all) do
51
+ (1..3).each { |i| Net::HTTP.get_response("localhost", "/alias#{i}", 8001) }
52
+ end
53
+
54
+ let(:response) { Net::HTTP.get_response("localhost", "/stubs", 8001) }
55
+ let(:response_document) { Nokogiri::HTML(response.body) }
56
+
57
+ it "should return a 200 response code" do
58
+ response.code.should eql("200")
59
+ end
60
+
61
+ it "should return a response whose body contains the uri of each stub" do
62
+ (1..3).each { |i| response.body.should match(/#{escape_html("/path#{i}")}/) }
63
+ end
64
+
65
+ it "should return a response whose body contains the parameters of each alias stub" do
66
+ (1..3).each { |i| response.body.should match(/param#{i}=value#{i}/) }
67
+ end
68
+
69
+ it "should return a response whose body contains the response status of each alias stub" do
70
+ (1..3).each { |i| response.body.should match(/20#{i}/) }
71
+ end
72
+
73
+ it "should return a response whose body contains the response body of each alias stub" do
74
+ response.body.should match(/Plain text body/)
75
+ response.body.should match(/#{escape_html({ "key" => "JSON body" }.to_json)}/)
76
+ response.body.should match(/#{escape_html("<html><body>HTML body</body></html>")}/)
77
+ end
78
+
79
+ end
80
+
81
+ end
82
+
42
83
  end
43
84
 
44
85
  end
@@ -1,7 +1,7 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start do
3
3
  add_filter "/spec/"
4
- minimum_coverage 96.4
4
+ minimum_coverage 96.1
5
5
  refuse_coverage_drop
6
6
  end if ENV["coverage"]
7
7
 
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.3.0
4
+ version: 0.3.1
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-02-26 00:00:00.000000000 Z
13
+ date: 2013-02-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sinatra
@@ -199,6 +199,7 @@ files:
199
199
  - ./lib/http_stub/controllers/alias_controller.rb
200
200
  - ./lib/http_stub/controllers/stub_controller.rb
201
201
  - ./lib/http_stub/models/alias.rb
202
+ - ./lib/http_stub/models/parameters.rb
202
203
  - ./lib/http_stub/models/registry.rb
203
204
  - ./lib/http_stub/models/stub.rb
204
205
  - ./lib/http_stub/response.rb
@@ -208,12 +209,15 @@ files:
208
209
  - ./lib/http_stub/views/_stub.haml
209
210
  - ./lib/http_stub/views/aliases.haml
210
211
  - ./lib/http_stub/views/application.sass
212
+ - ./lib/http_stub/views/layout.haml
213
+ - ./lib/http_stub/views/stubs.haml
211
214
  - ./lib/http_stub.rb
212
215
  - ./spec/curl_samples.txt
213
216
  - ./spec/lib/http_stub/configurer_integration_spec.rb
214
217
  - ./spec/lib/http_stub/controllers/alias_controller_spec.rb
215
218
  - ./spec/lib/http_stub/controllers/stub_controller_spec.rb
216
219
  - ./spec/lib/http_stub/models/alias_spec.rb
220
+ - ./spec/lib/http_stub/models/parameters_spec.rb
217
221
  - ./spec/lib/http_stub/models/registry_spec.rb
218
222
  - ./spec/lib/http_stub/models/stub_spec.rb
219
223
  - ./spec/lib/http_stub/response_spec.rb
@@ -243,7 +247,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
243
247
  version: '0'
244
248
  segments:
245
249
  - 0
246
- hash: 3062143665725502315
250
+ hash: -3825897115098639918
247
251
  requirements: []
248
252
  rubyforge_project: http_stub
249
253
  rubygems_version: 1.8.25
@@ -256,6 +260,7 @@ test_files:
256
260
  - ./spec/lib/http_stub/controllers/alias_controller_spec.rb
257
261
  - ./spec/lib/http_stub/controllers/stub_controller_spec.rb
258
262
  - ./spec/lib/http_stub/models/alias_spec.rb
263
+ - ./spec/lib/http_stub/models/parameters_spec.rb
259
264
  - ./spec/lib/http_stub/models/registry_spec.rb
260
265
  - ./spec/lib/http_stub/models/stub_spec.rb
261
266
  - ./spec/lib/http_stub/response_spec.rb