http_stub 0.1.4 → 0.2.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.
@@ -4,7 +4,7 @@ describe HttpStub::StartServerRakeTask do
4
4
  describe("when the generated task is invoked") do
5
5
 
6
6
  it "should start a stub server that responds to stub requests" do
7
- request = Net::HTTP::Post.new("/stub")
7
+ request = Net::HTTP::Post.new("/stubs")
8
8
  request.body = { "response" => { "status" => 302, "body" => "Some Body" } }.to_json
9
9
 
10
10
  response = Net::HTTP.new("localhost", 8001).start { |http| http.request(request) }
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.1.4
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -147,19 +147,27 @@ executables: []
147
147
  extensions: []
148
148
  extra_rdoc_files: []
149
149
  files:
150
- - ./lib/http_stub/client.rb
151
- - ./lib/http_stub/registry.rb
150
+ - ./lib/http_stub/configurer.rb
151
+ - ./lib/http_stub/controllers/alias_controller.rb
152
+ - ./lib/http_stub/controllers/stub_controller.rb
153
+ - ./lib/http_stub/models/alias.rb
154
+ - ./lib/http_stub/models/registry.rb
155
+ - ./lib/http_stub/models/stub.rb
156
+ - ./lib/http_stub/response.rb
152
157
  - ./lib/http_stub/server.rb
153
158
  - ./lib/http_stub/start_server_rake_task.rb
154
- - ./lib/http_stub/stub.rb
155
159
  - ./lib/http_stub/version.rb
156
160
  - ./lib/http_stub.rb
157
161
  - ./spec/curl_samples.txt
158
- - ./spec/lib/http_stub/client_integration_spec.rb
159
- - ./spec/lib/http_stub/registry_spec.rb
162
+ - ./spec/lib/http_stub/configurer_integration_spec.rb
163
+ - ./spec/lib/http_stub/controllers/alias_controller_spec.rb
164
+ - ./spec/lib/http_stub/controllers/stub_controller_spec.rb
165
+ - ./spec/lib/http_stub/models/alias_spec.rb
166
+ - ./spec/lib/http_stub/models/registry_spec.rb
167
+ - ./spec/lib/http_stub/models/stub_spec.rb
168
+ - ./spec/lib/http_stub/response_spec.rb
160
169
  - ./spec/lib/http_stub/server_spec.rb
161
170
  - ./spec/lib/http_stub/start_server_rake_task_integration_spec.rb
162
- - ./spec/lib/http_stub/stub_spec.rb
163
171
  - ./spec/spec_helper.rb
164
172
  - ./spec/support/server_integration.rb
165
173
  homepage: http://github.com/MYOB-Technology/http_stub
@@ -183,7 +191,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
191
  version: '0'
184
192
  segments:
185
193
  - 0
186
- hash: 3567633725069526050
194
+ hash: 3377634729008532417
187
195
  requirements: []
188
196
  rubyforge_project: http_stub
189
197
  rubygems_version: 1.8.25
@@ -192,10 +200,14 @@ specification_version: 3
192
200
  summary: A HTTP Server replaying configured stub responses
193
201
  test_files:
194
202
  - ./spec/curl_samples.txt
195
- - ./spec/lib/http_stub/client_integration_spec.rb
196
- - ./spec/lib/http_stub/registry_spec.rb
203
+ - ./spec/lib/http_stub/configurer_integration_spec.rb
204
+ - ./spec/lib/http_stub/controllers/alias_controller_spec.rb
205
+ - ./spec/lib/http_stub/controllers/stub_controller_spec.rb
206
+ - ./spec/lib/http_stub/models/alias_spec.rb
207
+ - ./spec/lib/http_stub/models/registry_spec.rb
208
+ - ./spec/lib/http_stub/models/stub_spec.rb
209
+ - ./spec/lib/http_stub/response_spec.rb
197
210
  - ./spec/lib/http_stub/server_spec.rb
198
211
  - ./spec/lib/http_stub/start_server_rake_task_integration_spec.rb
199
- - ./spec/lib/http_stub/stub_spec.rb
200
212
  - ./spec/spec_helper.rb
201
213
  - ./spec/support/server_integration.rb
@@ -1,61 +0,0 @@
1
- module HttpStub
2
-
3
- module Client
4
-
5
- def self.included(mod)
6
- mod.extend(HttpStub::Client::ClassMethods)
7
- mod.send(:include, HttpStub::Client::InstanceMethods)
8
- end
9
-
10
- module ClassMethods
11
-
12
- attr_reader :host_value, :port_value
13
-
14
- def host(host)
15
- @host_value = host
16
- end
17
-
18
- def port(port)
19
- @port_value = port
20
- end
21
-
22
- end
23
-
24
- module InstanceMethods
25
-
26
- def stub!(uri, options)
27
- response_options = options[:response]
28
- request = Net::HTTP::Post.new("/stub")
29
- request.content_type = "application/json"
30
- request.body = {
31
- "uri" => uri,
32
- "method" => options[:method],
33
- "parameters" => options[:parameters] || {},
34
- "response" => {
35
- "status" => response_options[:status] || "200",
36
- "body" => response_options[:body]
37
- }
38
- }.to_json
39
- response = submit(request)
40
- raise "Unable to stub request: #{response.message}" unless response.code == "200"
41
- end
42
-
43
- alias_method :stub_response!, :stub!
44
-
45
- def clear!
46
- request = Net::HTTP::Delete.new("/stubs")
47
- response = submit(request)
48
- raise "Unable to clear stubs: #{response.message}" unless response.code == "200"
49
- end
50
-
51
- private
52
-
53
- def submit(request)
54
- Net::HTTP.new(self.class.host_value, self.class.port_value).start { |http| http.request(request) }
55
- end
56
-
57
- end
58
-
59
- end
60
-
61
- end
@@ -1,26 +0,0 @@
1
- module HttpStub
2
-
3
- class Registry
4
-
5
- def initialize
6
- @stubs = []
7
- end
8
-
9
- def add(stub, request)
10
- @stubs.unshift(stub)
11
- request.logger.info "Stub registered: #{stub}"
12
- end
13
-
14
- def find_for(request)
15
- request.logger.info "Finding stub fulfilling: #{request.inspect}"
16
- @stubs.find { |stub| stub.stubs?(request) }
17
- end
18
-
19
- def clear(request)
20
- request.logger.info "Clearing stubs"
21
- @stubs.clear
22
- end
23
-
24
- end
25
-
26
- end
@@ -1,35 +0,0 @@
1
- module HttpStub
2
-
3
- class Stub
4
-
5
- Response = ImmutableStruct.new(:status, :body)
6
-
7
- attr_reader :response
8
-
9
- def initialize(request)
10
- @data = JSON.parse(request.body.read)
11
- @response = Response.new(status: @data["response"]["status"], body: @data["response"]["body"])
12
- end
13
-
14
- def stubs?(request)
15
- @data["uri"] == request.path_info &&
16
- @data["method"].downcase == request.request_method.downcase &&
17
- parameters_match?(request)
18
- end
19
-
20
- def to_s
21
- @data.to_s
22
- end
23
-
24
- private
25
-
26
- def parameters_match?(request)
27
- parameters = @data["parameters"]
28
- parameters.nil? || parameters.reduce(true) do |result, parameter|
29
- result && (request.params[parameter[0]] == parameter[1])
30
- end
31
- end
32
-
33
- end
34
-
35
- end
@@ -1,81 +0,0 @@
1
- describe HttpStub::Client do
2
- include_context "server integration"
3
-
4
- class TestClient
5
- include HttpStub::Client
6
-
7
- host "localhost"
8
- port 8001
9
- end
10
-
11
- let(:client) { TestClient.new }
12
-
13
- after(:each) { client.clear! }
14
-
15
- describe "when a response for a request is stubbed" do
16
-
17
- describe "that contains no parameters" do
18
-
19
- before(:each) { client.stub_response!("/a_path", method: :get,
20
- response: { status: 200, body: "Some body" }) }
21
-
22
- describe "and that request is made" do
23
-
24
- let(:response) { Net::HTTP.get_response("localhost", "/a_path", 8001) }
25
-
26
- it "should replay the stubbed response" do
27
- response.code.should eql("200")
28
- response.body.should eql("Some body")
29
- end
30
-
31
- end
32
-
33
- describe "and the stub is cleared" do
34
-
35
- before(:each) { client.clear! }
36
-
37
- describe "and the original request is made" do
38
-
39
- let(:response) { Net::HTTP.get_response("localhost", "/a_path", 8001) }
40
-
41
- it "should respond with a 404 status code" do
42
- response.code.should eql("404")
43
- end
44
-
45
- end
46
-
47
- end
48
-
49
- end
50
-
51
- describe "that contains parameters" do
52
-
53
- before(:each) { client.stub_response!("/a_path", method: :get, parameters: { key: "value" },
54
- response: { status: 200, body: "Some body" }) }
55
-
56
- describe "and that request is made" do
57
-
58
- let(:response) { Net::HTTP.get_response("localhost", "/a_path?key=value", 8001) }
59
-
60
- it "should replay the stubbed response" do
61
- response.code.should eql("200")
62
- response.body.should eql("Some body")
63
- end
64
-
65
- end
66
-
67
- describe "and a request with different parameters is made" do
68
-
69
- let(:response) { Net::HTTP.get_response("localhost", "/a_path?key=another_value", 8001) }
70
-
71
- it "should respond with a 404 status code" do
72
- response.code.should eql("404")
73
- end
74
-
75
- end
76
-
77
- end
78
-
79
- end
80
-
81
- end
@@ -1,99 +0,0 @@
1
- describe HttpStub::Registry do
2
-
3
- let(:registry) { HttpStub::Registry.new }
4
-
5
- let(:logger) { double("Logger").as_null_object }
6
- let(:request) { double("HttpRequest", logger: logger, inspect: "Request inspect result") }
7
-
8
- describe "#add" do
9
-
10
- it "should log that the stub has been registered" do
11
- stub = double(HttpStub::Stub, to_s: "Stub as String")
12
- logger.should_receive(:info).with(/Stub as String/)
13
-
14
- registry.add(stub, request)
15
- end
16
-
17
- end
18
-
19
- describe "#find_for" do
20
-
21
- describe "when multiple stubs have been registered" do
22
-
23
- let(:stubs) do
24
- (1..3).map { |i| double("#{HttpStub::Stub}#{i}", :stubs? => false) }
25
- end
26
-
27
- before(:each) do
28
- stubs.each { |stub| registry.add(stub, request) }
29
- end
30
-
31
- describe "and one registered stub matches the request" do
32
-
33
- before(:each) { stubs[1].stub!(:stubs?).and_return(true) }
34
-
35
- it "should return the stub" do
36
- registry.find_for(request).should eql(stubs[1])
37
- end
38
-
39
- describe "and the registry is subsequently cleared" do
40
-
41
- before(:each) { registry.clear(request) }
42
-
43
- it "should return nil" do
44
- registry.find_for(request).should be_nil
45
- end
46
-
47
- end
48
-
49
- end
50
-
51
- describe "and multiple registered stubs match the request" do
52
-
53
- before(:each) do
54
- [0, 2].each { |i| stubs[i].stub!(:stubs?).and_return(true) }
55
- end
56
-
57
- it "should support stub overrides by returning the last stub registered" do
58
- registry.find_for(request).should eql(stubs[2])
59
- end
60
-
61
- end
62
-
63
- describe "and no registered stubs match the request" do
64
-
65
- it "should return nil" do
66
- registry.find_for(request).should be_nil
67
- end
68
-
69
- end
70
-
71
- end
72
-
73
- describe "when no stub has been registered" do
74
-
75
- it "should return nil" do
76
- registry.find_for(request).should be_nil
77
- end
78
-
79
- end
80
-
81
- it "it should log stub discovery diagnostics that includes the complete details of the request" do
82
- logger.should_receive(:info).with(/Request inspect result/)
83
-
84
- registry.find_for(request)
85
- end
86
-
87
- end
88
-
89
- describe "#clear" do
90
-
91
- it "should log that the stubs are being cleared" do
92
- logger.should_receive(:info).with(/clearing stubs/i)
93
-
94
- registry.clear(request)
95
- end
96
-
97
- end
98
-
99
- end