http_stub 0.5.2 → 0.5.4
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/configurer.rb +46 -36
- data/lib/http_stub/configurer_request.rb +18 -0
- data/lib/http_stub/version.rb +1 -1
- data/lib/http_stub.rb +1 -0
- data/spec/lib/http_stub/configurer_integration_spec.rb +19 -4
- data/spec/lib/http_stub/configurer_request_integration_spec.rb +30 -0
- data/spec/lib/http_stub/models/request_header_parser_spec.rb +20 -6
- data/spec/spec_helper.rb +4 -3
- metadata +6 -3
data/lib/http_stub/configurer.rb
CHANGED
|
@@ -32,36 +32,9 @@ module HttpStub
|
|
|
32
32
|
"body" => response_options[:body]
|
|
33
33
|
}
|
|
34
34
|
}.to_json
|
|
35
|
-
|
|
35
|
+
handle(request, "registering activator '#{activation_uri}'")
|
|
36
36
|
end
|
|
37
37
|
|
|
38
|
-
def initialize!
|
|
39
|
-
activator_requests.each do |request|
|
|
40
|
-
response = submit(request)
|
|
41
|
-
raise "Unable to initialize stub activator: #{response.message}" unless response.code == "200"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def clear_activators!
|
|
46
|
-
request = Net::HTTP::Delete.new("/stubs/activators")
|
|
47
|
-
response = submit(request)
|
|
48
|
-
raise "Unable to clear stub activators: #{response.message}" unless response.code == "200"
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def submit(request)
|
|
52
|
-
Net::HTTP.new(@host, @port).start { |http| http.request(request) }
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
private
|
|
56
|
-
|
|
57
|
-
def activator_requests
|
|
58
|
-
@activator_requests ||= []
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
module InstanceMethods
|
|
64
|
-
|
|
65
38
|
def stub!(uri, options)
|
|
66
39
|
response_options = options[:response]
|
|
67
40
|
request = Net::HTTP::Post.new("/stubs")
|
|
@@ -76,24 +49,61 @@ module HttpStub
|
|
|
76
49
|
"body" => response_options[:body]
|
|
77
50
|
}
|
|
78
51
|
}.to_json
|
|
79
|
-
|
|
80
|
-
raise "Unable to establish stub: #{response.message}" unless response.code == "200"
|
|
52
|
+
handle(request, "stubbing '#{uri}'")
|
|
81
53
|
end
|
|
82
54
|
|
|
83
55
|
alias_method :stub_response!, :stub!
|
|
84
56
|
|
|
85
57
|
def activate!(uri)
|
|
86
|
-
|
|
87
|
-
response = self.class.submit(request)
|
|
88
|
-
raise "Activator #{uri} not configured: #{response.message}" unless response.code == "200"
|
|
58
|
+
handle(Net::HTTP::Get.new(uri), "activating '#{uri}'")
|
|
89
59
|
end
|
|
90
60
|
|
|
91
61
|
alias_method :activate_stub!, :activate!
|
|
92
62
|
|
|
63
|
+
def initialize!
|
|
64
|
+
pending_requests.each { |request| request.submit() }
|
|
65
|
+
@initialized = true
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def clear_activators!
|
|
69
|
+
handle(Net::HTTP::Delete.new("/stubs/activators"), "clearing activators")
|
|
70
|
+
end
|
|
71
|
+
|
|
93
72
|
def clear!
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
73
|
+
handle(Net::HTTP::Delete.new("/stubs"), "clearing stubs")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
alias_method :clear_stubs!, :clear!
|
|
77
|
+
|
|
78
|
+
private
|
|
79
|
+
|
|
80
|
+
def handle(http_request, description)
|
|
81
|
+
request = HttpStub::ConfigurerRequest.new(@host, @port, http_request, description)
|
|
82
|
+
initialized? ? request.submit() : pending_requests << request
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def pending_requests
|
|
86
|
+
@activator_requests ||= []
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def initialized?
|
|
90
|
+
@initialized ||= false
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
module InstanceMethods
|
|
96
|
+
|
|
97
|
+
DELEGATE_METHODS = %w{ stub_activator stub! stub_response! activate! activate_stub! clear_activators! clear! clear_stubs! }
|
|
98
|
+
|
|
99
|
+
def self.included(mod)
|
|
100
|
+
DELEGATE_METHODS.each do |method_name|
|
|
101
|
+
mod.class_eval <<-METHOD_DEF
|
|
102
|
+
def #{method_name}(*args)
|
|
103
|
+
self.class.#{method_name}(*args)
|
|
104
|
+
end
|
|
105
|
+
METHOD_DEF
|
|
106
|
+
end
|
|
97
107
|
end
|
|
98
108
|
|
|
99
109
|
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module HttpStub
|
|
2
|
+
|
|
3
|
+
class ConfigurerRequest
|
|
4
|
+
|
|
5
|
+
def initialize(host, port, request, description)
|
|
6
|
+
@host = host
|
|
7
|
+
@port = port
|
|
8
|
+
@request = request
|
|
9
|
+
@description = description
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def submit
|
|
13
|
+
response = Net::HTTP.new(@host, @port).start { |http| http.request(@request) }
|
|
14
|
+
raise "Error occurred #{@description}: #{response.message}" unless response.code == "200"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/http_stub/version.rb
CHANGED
data/lib/http_stub.rb
CHANGED
|
@@ -20,4 +20,5 @@ require File.expand_path('../http_stub/models/registry', __FILE__)
|
|
|
20
20
|
require File.expand_path('../http_stub/controllers/stub_controller', __FILE__)
|
|
21
21
|
require File.expand_path('../http_stub/controllers/stub_activator_controller', __FILE__)
|
|
22
22
|
require File.expand_path('../http_stub/server', __FILE__)
|
|
23
|
+
require File.expand_path('../http_stub/configurer_request', __FILE__)
|
|
23
24
|
require File.expand_path('../http_stub/configurer', __FILE__)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
describe HttpStub::Configurer, "when the server is running" do
|
|
2
2
|
include_context "server integration"
|
|
3
3
|
|
|
4
|
-
let(:configurer) { HttpStub::Examples::
|
|
4
|
+
let(:configurer) { HttpStub::Examples::ConfigurerWithClassActivator.new }
|
|
5
5
|
|
|
6
6
|
after(:each) do
|
|
7
|
-
configurer.
|
|
7
|
+
configurer.clear_stubs!
|
|
8
8
|
configurer.class.clear_activators!
|
|
9
9
|
end
|
|
10
10
|
|
|
@@ -43,6 +43,19 @@ describe HttpStub::Configurer, "when the server is running" do
|
|
|
43
43
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
+
describe "and an class stub is defined" do
|
|
47
|
+
|
|
48
|
+
let(:configurer) { HttpStub::Examples::ConfigurerWithClassStub.new }
|
|
49
|
+
|
|
50
|
+
it "the stub should be registered" do
|
|
51
|
+
response = Net::HTTP.get_response("localhost", "/a_class_stub", 8001)
|
|
52
|
+
|
|
53
|
+
response.code.should eql("201")
|
|
54
|
+
response.body.should eql("Class stub body")
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
|
|
46
59
|
end
|
|
47
60
|
|
|
48
61
|
describe "and the configurer is uninitialized" do
|
|
@@ -51,8 +64,10 @@ describe HttpStub::Configurer, "when the server is running" do
|
|
|
51
64
|
|
|
52
65
|
let(:response) { Net::HTTP.get_response("localhost", "/path1", 8001) }
|
|
53
66
|
|
|
54
|
-
it "should
|
|
55
|
-
lambda { configurer.activate!("/an_activator") }
|
|
67
|
+
it "should raise an exception indicating an error occurred during activation" do
|
|
68
|
+
activation_lambda = lambda { configurer.activate!("/an_activator") }
|
|
69
|
+
|
|
70
|
+
activation_lambda.should raise_error(/error occurred activating '\/an_activator'/i)
|
|
56
71
|
end
|
|
57
72
|
|
|
58
73
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
describe HttpStub::ConfigurerRequest, "when the server is running" do
|
|
2
|
+
include_context "server integration"
|
|
3
|
+
|
|
4
|
+
let(:configurer_request) { HttpStub::ConfigurerRequest.new("localhost", 8001, request, "performing some operation") }
|
|
5
|
+
|
|
6
|
+
describe "#submit" do
|
|
7
|
+
|
|
8
|
+
describe "when the server responds with a 200 response" do
|
|
9
|
+
|
|
10
|
+
let(:request) { Net::HTTP::Get.new("/stubs") }
|
|
11
|
+
|
|
12
|
+
it "should execute without error" do
|
|
13
|
+
lambda { configurer_request.submit() }.should_not raise_error
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "when the server responds with a non-200 response" do
|
|
19
|
+
|
|
20
|
+
let(:request) { Net::HTTP::Get.new("/causes_error") }
|
|
21
|
+
|
|
22
|
+
it "should raise an exception that includes the description" do
|
|
23
|
+
lambda { configurer_request.submit() }.should raise_error(/performing some operation/)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -9,17 +9,31 @@ describe HttpStub::Models::RequestHeaderParser do
|
|
|
9
9
|
"SERVER_NAME" => "localhost",
|
|
10
10
|
}
|
|
11
11
|
end
|
|
12
|
-
let(:env) { non_http_env_elements.merge(
|
|
12
|
+
let(:env) { non_http_env_elements.merge(http_env_elements) }
|
|
13
13
|
let(:request) { double("HttpRequest", env: env) }
|
|
14
14
|
|
|
15
15
|
describe ".parse" do
|
|
16
|
+
|
|
17
|
+
describe "when the request contains request environment entries prefixed with 'HTTP_'" do
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
let(:http_env_elements) { { "HTTP_KEY1" => "value1", "HTTP_KEY2" => "value2", "HTTP_KEY3" => "value3" } }
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
it "should return a hash containing only those entries with the prefix removed" do
|
|
22
|
+
HttpStub::Models::RequestHeaderParser.parse(request).should eql({ "KEY1" => "value1",
|
|
23
|
+
"KEY2" => "value2",
|
|
24
|
+
"KEY3" => "value3" })
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe "when the request does not contain request environment entries prefixed with 'HTTP_'" do
|
|
30
|
+
|
|
31
|
+
let(:http_env_elements) { {} }
|
|
32
|
+
|
|
33
|
+
it "should return an empty hash" do
|
|
34
|
+
HttpStub::Models::RequestHeaderParser.parse(request).should eql({})
|
|
35
|
+
end
|
|
36
|
+
|
|
23
37
|
end
|
|
24
38
|
|
|
25
39
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require 'simplecov'
|
|
2
2
|
SimpleCov.start do
|
|
3
3
|
add_filter "/spec/"
|
|
4
|
-
minimum_coverage 96.
|
|
4
|
+
minimum_coverage 96.8
|
|
5
5
|
refuse_coverage_drop
|
|
6
6
|
end if ENV["coverage"]
|
|
7
7
|
|
|
@@ -11,7 +11,8 @@ require 'nokogiri'
|
|
|
11
11
|
|
|
12
12
|
require File.expand_path('../../lib/http_stub/start_server_rake_task', __FILE__)
|
|
13
13
|
require File.expand_path('../../lib/http_stub', __FILE__)
|
|
14
|
-
require File.expand_path('../../examples/
|
|
15
|
-
require File.expand_path('../../examples/
|
|
14
|
+
require File.expand_path('../../examples/configurer_with_class_activator', __FILE__)
|
|
15
|
+
require File.expand_path('../../examples/configurer_with_class_stub', __FILE__)
|
|
16
|
+
require File.expand_path('../../examples/configurer_with_many_class_activators', __FILE__)
|
|
16
17
|
|
|
17
18
|
Dir[File.expand_path('../support/**/*.rb', __FILE__)].each { |file| require 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.5.
|
|
4
|
+
version: 0.5.4
|
|
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-
|
|
13
|
+
date: 2013-03-12 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: sinatra
|
|
@@ -195,6 +195,7 @@ extensions: []
|
|
|
195
195
|
extra_rdoc_files: []
|
|
196
196
|
files:
|
|
197
197
|
- ./lib/http_stub/configurer.rb
|
|
198
|
+
- ./lib/http_stub/configurer_request.rb
|
|
198
199
|
- ./lib/http_stub/controllers/stub_activator_controller.rb
|
|
199
200
|
- ./lib/http_stub/controllers/stub_controller.rb
|
|
200
201
|
- ./lib/http_stub/hash_extensions.rb
|
|
@@ -216,6 +217,7 @@ files:
|
|
|
216
217
|
- ./lib/http_stub.rb
|
|
217
218
|
- ./spec/curl_samples.txt
|
|
218
219
|
- ./spec/lib/http_stub/configurer_integration_spec.rb
|
|
220
|
+
- ./spec/lib/http_stub/configurer_request_integration_spec.rb
|
|
219
221
|
- ./spec/lib/http_stub/controllers/stub_activator_controller_spec.rb
|
|
220
222
|
- ./spec/lib/http_stub/controllers/stub_controller_spec.rb
|
|
221
223
|
- ./spec/lib/http_stub/hash_extensions_spec.rb
|
|
@@ -252,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
252
254
|
version: '0'
|
|
253
255
|
segments:
|
|
254
256
|
- 0
|
|
255
|
-
hash: -
|
|
257
|
+
hash: -301953160599297370
|
|
256
258
|
requirements: []
|
|
257
259
|
rubyforge_project: http_stub
|
|
258
260
|
rubygems_version: 1.8.25
|
|
@@ -262,6 +264,7 @@ summary: A HTTP Server replaying configured stub responses.
|
|
|
262
264
|
test_files:
|
|
263
265
|
- ./spec/curl_samples.txt
|
|
264
266
|
- ./spec/lib/http_stub/configurer_integration_spec.rb
|
|
267
|
+
- ./spec/lib/http_stub/configurer_request_integration_spec.rb
|
|
265
268
|
- ./spec/lib/http_stub/controllers/stub_activator_controller_spec.rb
|
|
266
269
|
- ./spec/lib/http_stub/controllers/stub_controller_spec.rb
|
|
267
270
|
- ./spec/lib/http_stub/hash_extensions_spec.rb
|