http_stub 0.7.4 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. data/lib/http_stub.rb +1 -0
  2. data/lib/http_stub/configurer/request/stub.rb +2 -1
  3. data/lib/http_stub/models/request_pipeline.rb +10 -0
  4. data/lib/http_stub/models/response.rb +4 -1
  5. data/lib/http_stub/rake/server_tasks.rb +33 -0
  6. data/lib/http_stub/rake/task_generators.rb +1 -1
  7. data/lib/http_stub/server.rb +1 -0
  8. data/lib/http_stub/version.rb +1 -1
  9. data/spec/lib/http_stub/configurer/request/stub_activator_spec.rb +1 -1
  10. data/spec/lib/http_stub/configurer/request/stub_spec.rb +1 -1
  11. data/spec/lib/http_stub/configurer_integration_spec.rb +20 -1
  12. data/spec/lib/http_stub/controllers/stub_activator_controller_spec.rb +4 -4
  13. data/spec/lib/http_stub/controllers/stub_controller_spec.rb +4 -4
  14. data/spec/lib/http_stub/models/hash_with_regexpable_values_spec.rb +6 -6
  15. data/spec/lib/http_stub/models/registry_spec.rb +2 -2
  16. data/spec/lib/http_stub/models/request_pipeline_spec.rb +24 -0
  17. data/spec/lib/http_stub/models/stub_activator_spec.rb +1 -1
  18. data/spec/lib/http_stub/models/stub_headers_spec.rb +3 -3
  19. data/spec/lib/http_stub/models/stub_parameters_spec.rb +1 -1
  20. data/spec/lib/http_stub/models/stub_spec.rb +9 -9
  21. data/spec/lib/http_stub/models/stub_uri_spec.rb +1 -1
  22. data/spec/lib/http_stub/rake/server_tasks_integration_spec.rb +21 -0
  23. data/spec/lib/http_stub/rake/server_tasks_spec.rb +38 -0
  24. data/spec/lib/http_stub/server_integration_spec.rb +1 -1
  25. data/spec/lib/http_stub/server_spec.rb +30 -20
  26. data/spec/spec_helper.rb +2 -1
  27. metadata +52 -31
  28. data/lib/http_stub/rake/start_server_task.rb +0 -21
  29. data/spec/lib/http_stub/rake/start_server_rake_integration_spec.rb +0 -17
data/lib/http_stub.rb CHANGED
@@ -20,6 +20,7 @@ require File.expand_path('../http_stub/models/stub_parameters', __FILE__)
20
20
  require File.expand_path('../http_stub/models/stub', __FILE__)
21
21
  require File.expand_path('../http_stub/models/stub_activator', __FILE__)
22
22
  require File.expand_path('../http_stub/models/registry', __FILE__)
23
+ require File.expand_path('../http_stub/models/request_pipeline', __FILE__)
23
24
  require File.expand_path('../http_stub/controllers/stub_controller', __FILE__)
24
25
  require File.expand_path('../http_stub/controllers/stub_activator_controller', __FILE__)
25
26
  require File.expand_path('../http_stub/server', __FILE__)
@@ -14,7 +14,8 @@ module HttpStub
14
14
  "parameters" => HttpStub::Configurer::Request::Regexpable.format(options[:parameters] || {}),
15
15
  "response" => {
16
16
  "status" => options[:response][:status] || 200,
17
- "body" => options[:response][:body]
17
+ "body" => options[:response][:body],
18
+ "delay_in_seconds" => options[:response][:delay_in_seconds]
18
19
  }
19
20
  }.to_json
20
21
  end
@@ -0,0 +1,10 @@
1
+ module HttpStub
2
+ module Models
3
+ class RequestPipeline
4
+
5
+ def self.before_halt(response)
6
+ sleep response.delay_in_seconds if response.delay_in_seconds
7
+ end
8
+ end
9
+ end
10
+ end
@@ -19,10 +19,13 @@ module HttpStub
19
19
  @response_options["body"]
20
20
  end
21
21
 
22
+ def delay_in_seconds
23
+ @response_options["delay_in_seconds"]
24
+ end
25
+
22
26
  def empty?
23
27
  @response_options.empty?
24
28
  end
25
-
26
29
  end
27
30
 
28
31
  end
@@ -0,0 +1,33 @@
1
+ module HttpStub
2
+
3
+ module Rake
4
+
5
+ class ServerTasks < ::Rake::TaskLib
6
+
7
+ def initialize(options)
8
+ define_start_task(options)
9
+ define_initialize_task(options) if options[:configurer]
10
+ end
11
+
12
+ private
13
+
14
+ def define_start_task(options)
15
+ desc "Starts stub #{options[:name]}"
16
+ task "start_#{options[:name]}" do
17
+ HttpStub::Server.instance_eval do
18
+ set :port, options[:port]
19
+ run!
20
+ end
21
+ end
22
+ end
23
+
24
+ def define_initialize_task(options)
25
+ desc "Configures stub #{options[:name]}"
26
+ task("configure_#{options[:name]}") { options[:configurer].initialize! }
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -1,4 +1,4 @@
1
1
  require File.expand_path('../../../http_stub', __FILE__)
2
2
  require 'rake/tasklib' unless defined? (::Rake::TaskLib)
3
3
 
4
- require File.expand_path('../start_server_task', __FILE__)
4
+ require File.expand_path('../server_tasks', __FILE__)
@@ -95,6 +95,7 @@ module HttpStub
95
95
  response = @stub_controller.replay(request)
96
96
  response = @stub_activator_controller.activate(request) if response.empty?
97
97
  response = HttpStub::Models::Response::ERROR if response.empty?
98
+ HttpStub::Models::RequestPipeline.before_halt(response)
98
99
  halt(response.status, response.body)
99
100
  end
100
101
 
@@ -1,3 +1,3 @@
1
1
  module HttpStub
2
- VERSION = "0.7.4"
2
+ VERSION = "0.8.0"
3
3
  end
@@ -6,7 +6,7 @@ describe HttpStub::Configurer::Request::StubActivator do
6
6
  let(:stub_request_content_type) { "Some content type" }
7
7
  let(:stub_request) { double("StubRequest", :content_type => stub_request_content_type, :body => stub_request_body) }
8
8
 
9
- before(:each) { HttpStub::Configurer::Request::Stub.stub!(:new).and_return(stub_request) }
9
+ before(:each) { HttpStub::Configurer::Request::Stub.stub(:new).and_return(stub_request) }
10
10
 
11
11
  describe "when provided an activation uri, stub uri and stub options" do
12
12
 
@@ -26,7 +26,7 @@ describe HttpStub::Configurer::Request::Stub do
26
26
  let(:request) { HttpStub::Configurer::Request::Stub.new(uri, stub_options) }
27
27
  let(:request_body) { JSON.parse(request.body) }
28
28
 
29
- before(:each) { HttpStub::Configurer::Request::Regexpable.stub!(:format) }
29
+ before(:each) { HttpStub::Configurer::Request::Regexpable.stub(:format) }
30
30
 
31
31
  it "should create a HTTP POST request" do
32
32
  request.method.should eql("POST")
@@ -377,7 +377,7 @@ describe HttpStub::Configurer, "when the server is running" do
377
377
  describe "and an attempt is made to register a stub" do
378
378
 
379
379
  before(:each) do
380
- configurer.stub_response!("/some_stub_path", method: :get, response: { body: "Some stub body" })
380
+ configurer.stub_response!("/some_stub_path", method: :get, response: { body: "Some stub body"})
381
381
  end
382
382
 
383
383
  it "should register the stub" do
@@ -389,6 +389,25 @@ describe HttpStub::Configurer, "when the server is running" do
389
389
 
390
390
  end
391
391
 
392
+ describe "and an attempt is made to register a stub with a timeout" do
393
+
394
+ before(:each) do
395
+ configurer.stub_response!("/some_stub_path", method: :get, response: {:delay_in_seconds => 2})
396
+ end
397
+
398
+ it "should delegate to request pipeline" do
399
+ before = Time.new
400
+
401
+ response = Net::HTTP.get_response("localhost", "/some_stub_path", 8001)
402
+ response.code.should eql("200")
403
+
404
+ after = Time.now
405
+
406
+ (after - before).round().should be >= 2
407
+ end
408
+
409
+ end
410
+
392
411
  end
393
412
 
394
413
  describe "and the configurer has not been informed that the server has started" do
@@ -9,12 +9,12 @@ describe HttpStub::Controllers::StubActivatorController do
9
9
  let(:stub_registry) { double("HttpStub::Models::StubRegistry").as_null_object }
10
10
  let(:controller) { HttpStub::Controllers::StubActivatorController.new(stub_activator_registry, stub_registry) }
11
11
 
12
- before(:each) { JSON.stub!(:parse).and_return(stub_activator_options) }
12
+ before(:each) { JSON.stub(:parse).and_return(stub_activator_options) }
13
13
 
14
14
  describe "#register" do
15
15
 
16
16
  before(:each) do
17
- HttpStub::Models::StubActivator.stub!(:new).and_return(stub_activator)
17
+ HttpStub::Models::StubActivator.stub(:new).and_return(stub_activator)
18
18
  end
19
19
 
20
20
  it "should parse an options hash from the JSON request body" do
@@ -46,7 +46,7 @@ describe HttpStub::Controllers::StubActivatorController do
46
46
  describe "when a stub activator has been registered that is activated by the request" do
47
47
 
48
48
  before(:each) do
49
- stub_activator_registry.stub!(:find_for).with(request).and_return(stub_activator)
49
+ stub_activator_registry.stub(:find_for).with(request).and_return(stub_activator)
50
50
  end
51
51
 
52
52
  it "should add the activators stub to the stub registry" do
@@ -64,7 +64,7 @@ describe HttpStub::Controllers::StubActivatorController do
64
64
  describe "when no stub activator is activated by the request" do
65
65
 
66
66
  before(:each) do
67
- stub_activator_registry.stub!(:find_for).with(request).and_return(nil)
67
+ stub_activator_registry.stub(:find_for).with(request).and_return(nil)
68
68
  end
69
69
 
70
70
  it "should not add a stub to the registry" do
@@ -8,12 +8,12 @@ describe HttpStub::Controllers::StubController do
8
8
  let(:registry) { double(HttpStub::Models::Registry).as_null_object }
9
9
  let(:controller) { HttpStub::Controllers::StubController.new(registry) }
10
10
 
11
- before(:each) { JSON.stub!(:parse).and_return(stub_options) }
11
+ before(:each) { JSON.stub(:parse).and_return(stub_options) }
12
12
 
13
13
  describe "#register" do
14
14
 
15
15
  before(:each) do
16
- HttpStub::Models::Stub.stub!(:new).and_return(the_stub)
16
+ HttpStub::Models::Stub.stub(:new).and_return(the_stub)
17
17
  end
18
18
 
19
19
  it "should parse an options hash from the JSON request body" do
@@ -45,7 +45,7 @@ describe HttpStub::Controllers::StubController do
45
45
  describe "when a stub has been registered that should be replayed for the request" do
46
46
 
47
47
  before(:each) do
48
- registry.stub!(:find_for).with(request).and_return(the_stub)
48
+ registry.stub(:find_for).with(request).and_return(the_stub)
49
49
  end
50
50
 
51
51
  it "should return the stubs response" do
@@ -59,7 +59,7 @@ describe HttpStub::Controllers::StubController do
59
59
  describe "when no stub should be replayed for the request" do
60
60
 
61
61
  before(:each) do
62
- registry.stub!(:find_for).with(request).and_return(nil)
62
+ registry.stub(:find_for).with(request).and_return(nil)
63
63
  end
64
64
 
65
65
  it "should return an empty response" do
@@ -14,7 +14,7 @@ describe HttpStub::Models::HashWithRegexpableValues do
14
14
  let(:regexpable_hash) { HttpStub::Models::HashWithRegexpableValues.new(stubbed_hash) }
15
15
 
16
16
  before(:each) do
17
- regexpable_values.each { |value| HttpStub::Models::RegexpableValue.stub!(:new).with(value.to_s).and_return(value) }
17
+ regexpable_values.each { |value| HttpStub::Models::RegexpableValue.stub(:new).with(value.to_s).and_return(value) }
18
18
  end
19
19
 
20
20
  it "should be hash" do
@@ -51,7 +51,7 @@ describe HttpStub::Models::HashWithRegexpableValues do
51
51
  describe "and the values match" do
52
52
 
53
53
  before(:each) do
54
- regexpable_values.each { |value| value.stub!(:match?).with("another #{value}").and_return(true) }
54
+ regexpable_values.each { |value| value.stub(:match?).with("another #{value}").and_return(true) }
55
55
  end
56
56
 
57
57
  it "should return true" do
@@ -63,10 +63,10 @@ describe HttpStub::Models::HashWithRegexpableValues do
63
63
  describe "and a value does not match" do
64
64
 
65
65
  before(:each) do
66
- regexpable_values.each { |value| value.stub!(:match?).with("another #{value}").and_return(true) }
66
+ regexpable_values.each { |value| value.stub(:match?).with("another #{value}").and_return(true) }
67
67
 
68
68
  non_matching_value = regexpable_values[1]
69
- non_matching_value.stub!(:match?).with("another #{non_matching_value}").and_return(false)
69
+ non_matching_value.stub(:match?).with("another #{non_matching_value}").and_return(false)
70
70
  end
71
71
 
72
72
  it "should return false" do
@@ -82,7 +82,7 @@ describe HttpStub::Models::HashWithRegexpableValues do
82
82
  let(:provided_hash) { { "key1" => "value1", "differentkey2" => "another value2", "key3" => "value3" } }
83
83
 
84
84
  before(:each) do
85
- regexpable_values.each { |value| value.stub!(:match?).with(value.to_s).and_return(true) }
85
+ regexpable_values.each { |value| value.stub(:match?).with(value.to_s).and_return(true) }
86
86
  end
87
87
 
88
88
  it "should return false" do
@@ -105,7 +105,7 @@ describe HttpStub::Models::HashWithRegexpableValues do
105
105
  describe "and it has matching keys and values" do
106
106
 
107
107
  before(:each) do
108
- regexpable_values.each { |value| value.stub!(:match?).with("another #{value}").and_return(true) }
108
+ regexpable_values.each { |value| value.stub(:match?).with("another #{value}").and_return(true) }
109
109
  end
110
110
 
111
111
  it "should return true" do
@@ -32,7 +32,7 @@ describe HttpStub::Models::Registry do
32
32
 
33
33
  let(:matching_model) { models[1] }
34
34
 
35
- before(:each) { matching_model.stub!(:satisfies?).and_return(true) }
35
+ before(:each) { matching_model.stub(:satisfies?).and_return(true) }
36
36
 
37
37
  it "should return the model" do
38
38
  registry.find_for(request).should eql(matching_model)
@@ -53,7 +53,7 @@ describe HttpStub::Models::Registry do
53
53
  describe "and multiple registered models satisfy the request" do
54
54
 
55
55
  before(:each) do
56
- [0, 2].each { |i| models[i].stub!(:satisfies?).and_return(true) }
56
+ [0, 2].each { |i| models[i].stub(:satisfies?).and_return(true) }
57
57
  end
58
58
 
59
59
  it "should support model overrides by returning the last model registered" do
@@ -0,0 +1,24 @@
1
+ describe HttpStub::Models::RequestPipeline do
2
+
3
+ describe '.before_halt' do
4
+
5
+ let(:response) { double(HttpStub::Models::Response) }
6
+ let(:request_pipeline) { HttpStub::Models::RequestPipeline }
7
+
8
+ before(:each) do
9
+ request_pipeline.stub(:sleep)
10
+ response.stub(:delay_in_seconds).and_return(5)
11
+ end
12
+
13
+ it 'should sleep for specified duration' do
14
+ request_pipeline.should_receive(:sleep).with(5)
15
+ request_pipeline.before_halt(response)
16
+ end
17
+
18
+ it 'should skip sleep if not specified' do
19
+ request_pipeline.should_not_receive(:sleep)
20
+ response.stub(:delay_in_seconds).and_return(nil)
21
+ request_pipeline.before_halt(response)
22
+ end
23
+ end
24
+ end
@@ -6,7 +6,7 @@ describe HttpStub::Models::StubActivator do
6
6
  end
7
7
  let(:stub_activator) { HttpStub::Models::StubActivator.new(options) }
8
8
 
9
- before(:each) { HttpStub::Models::Stub.stub!(:new).and_return(double(HttpStub::Models::Stub)) }
9
+ before(:each) { HttpStub::Models::Stub.stub(:new).and_return(double(HttpStub::Models::Stub)) }
10
10
 
11
11
  describe "#satisfies?" do
12
12
 
@@ -35,8 +35,8 @@ describe HttpStub::Models::StubHeaders do
35
35
  let(:regexpable_stubbed_headers) { double(HttpStub::Models::HashWithRegexpableValues).as_null_object }
36
36
 
37
37
  before(:each) do
38
- HttpStub::Models::HashWithRegexpableValues.stub!(:new).and_return(regexpable_stubbed_headers)
39
- HttpStub::Models::RequestHeaderParser.stub!(:parse).with(request).and_return(request_headers)
38
+ HttpStub::Models::HashWithRegexpableValues.stub(:new).and_return(regexpable_stubbed_headers)
39
+ HttpStub::Models::RequestHeaderParser.stub(:parse).with(request).and_return(request_headers)
40
40
  end
41
41
 
42
42
  it "should parse the requests headers into a hash" do
@@ -53,7 +53,7 @@ describe HttpStub::Models::StubHeaders do
53
53
 
54
54
  it "should delegate to the regexpable representation of the stubbed headers to determine a match" do
55
55
  downcased_and_underscored_hash = { "another_request_key" => "value" }
56
- request_headers.stub!(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
56
+ request_headers.stub(:downcase_and_underscore_keys).and_return(downcased_and_underscored_hash)
57
57
  regexpable_stubbed_headers.should_receive(:match?).with(downcased_and_underscored_hash).and_return(true)
58
58
 
59
59
  stub_headers.match?(request).should be_true
@@ -33,7 +33,7 @@ describe HttpStub::Models::StubParameters do
33
33
  describe "#match?" do
34
34
 
35
35
  it "should delegate to the regexpable representation of the stubbed parameters to determine a match" do
36
- HttpStub::Models::HashWithRegexpableValues.stub!(:new).and_return(regexpable_stubbed_paremeters)
36
+ HttpStub::Models::HashWithRegexpableValues.stub(:new).and_return(regexpable_stubbed_paremeters)
37
37
  regexpable_stubbed_paremeters.should_receive(:match?).with(request_parameters).and_return(true)
38
38
 
39
39
  stub_parameters.match?(request).should be(true)
@@ -34,9 +34,9 @@ describe HttpStub::Models::Stub do
34
34
  let(:the_stub) { HttpStub::Models::Stub.new(stub_options) }
35
35
 
36
36
  before(:each) do
37
- HttpStub::Models::StubUri.stub!(:new).and_return(stub_uri)
38
- HttpStub::Models::StubParameters.stub!(:new).and_return(stub_parameters)
39
- HttpStub::Models::StubHeaders.stub!(:new).and_return(stub_headers)
37
+ HttpStub::Models::StubUri.stub(:new).and_return(stub_uri)
38
+ HttpStub::Models::StubParameters.stub(:new).and_return(stub_parameters)
39
+ HttpStub::Models::StubHeaders.stub(:new).and_return(stub_headers)
40
40
  end
41
41
 
42
42
  describe "#satisfies?" do
@@ -47,7 +47,7 @@ describe HttpStub::Models::Stub do
47
47
 
48
48
  describe "when the request uri matches" do
49
49
 
50
- before(:each) { stub_uri.stub!(:match?).with(request).and_return(true) }
50
+ before(:each) { stub_uri.stub(:match?).with(request).and_return(true) }
51
51
 
52
52
  describe "and the request method matches" do
53
53
 
@@ -55,13 +55,13 @@ describe HttpStub::Models::Stub do
55
55
 
56
56
  describe "that matches" do
57
57
 
58
- before(:each) { stub_headers.stub!(:match?).with(request).and_return(true) }
58
+ before(:each) { stub_headers.stub(:match?).with(request).and_return(true) }
59
59
 
60
60
  describe "and a parameter match is configured" do
61
61
 
62
62
  describe "that matches" do
63
63
 
64
- before(:each) { stub_parameters.stub!(:match?).with(request).and_return(true) }
64
+ before(:each) { stub_parameters.stub(:match?).with(request).and_return(true) }
65
65
 
66
66
  it "should return true" do
67
67
  the_stub.satisfies?(request).should be_true
@@ -81,7 +81,7 @@ describe HttpStub::Models::Stub do
81
81
 
82
82
  describe "when the request uri does not match" do
83
83
 
84
- before(:each) { stub_uri.stub!(:match?).with(request).and_return(false) }
84
+ before(:each) { stub_uri.stub(:match?).with(request).and_return(false) }
85
85
 
86
86
  it "should return false" do
87
87
  the_stub.satisfies?(request).should be_false
@@ -101,7 +101,7 @@ describe HttpStub::Models::Stub do
101
101
 
102
102
  describe "when the headers do not match" do
103
103
 
104
- before(:each) { stub_headers.stub!(:match?).with(request).and_return(false) }
104
+ before(:each) { stub_headers.stub(:match?).with(request).and_return(false) }
105
105
 
106
106
  it "should return false" do
107
107
  the_stub.satisfies?(request).should be_false
@@ -111,7 +111,7 @@ describe HttpStub::Models::Stub do
111
111
 
112
112
  describe "when the parameters do not match" do
113
113
 
114
- before(:each) { stub_parameters.stub!(:match?).with(request).and_return(false) }
114
+ before(:each) { stub_parameters.stub(:match?).with(request).and_return(false) }
115
115
 
116
116
  it "should return false" do
117
117
  the_stub.satisfies?(request).should be_false
@@ -5,7 +5,7 @@ describe HttpStub::Models::StubUri do
5
5
  let(:regexpable_value) { double(HttpStub::Models::RegexpableValue).as_null_object }
6
6
  let(:stub_uri) { HttpStub::Models::StubUri.new(stubbed_uri) }
7
7
 
8
- before(:each) { HttpStub::Models::RegexpableValue.stub!(:new).and_return(regexpable_value) }
8
+ before(:each) { HttpStub::Models::RegexpableValue.stub(:new).and_return(regexpable_value) }
9
9
 
10
10
  describe "constructor" do
11
11
 
@@ -0,0 +1,21 @@
1
+ describe HttpStub::Rake::ServerTasks do
2
+ include_context "server integration"
3
+
4
+ describe "the start task" do
5
+
6
+ context "when invoked" do
7
+
8
+ it "should start a stub server that responds to stub requests" do
9
+ request = Net::HTTP::Post.new("/stubs")
10
+ request.body = { "response" => { "status" => 302, "body" => "Some Body" } }.to_json
11
+
12
+ response = Net::HTTP.new("localhost", 8001).start { |http| http.request(request) }
13
+
14
+ response.code.should eql("200")
15
+ end
16
+
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,38 @@
1
+ describe HttpStub::Rake::ServerTasks do
2
+
3
+ describe "the configure task" do
4
+
5
+ context "when a configurer is provided" do
6
+
7
+ let(:configurer) { double(HttpStub::Configurer) }
8
+
9
+ before(:each) do
10
+ HttpStub::Rake::ServerTasks.new(name: :tasks_configurer_provided_test, port: 8001, configurer: configurer)
11
+ end
12
+
13
+ context "and the task is executed" do
14
+
15
+ it "should initialize the provided configurer" do
16
+ configurer.should_receive(:initialize!)
17
+
18
+ Rake::Task[:configure_tasks_configurer_provided_test].execute
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ context "when a configurer is not provided" do
26
+
27
+ before(:each) { HttpStub::Rake::ServerTasks.new(name: :tasks_configurer_not_provided_test, port: 8001) }
28
+
29
+ it "should not generate a task" do
30
+ lambda { Rake::Task[:configure_tasks_configurer_not_provided_test] }.should
31
+ raise_error(/Don't know how to build task/)
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -6,7 +6,7 @@ describe HttpStub::Server, "when the server is running" do
6
6
 
7
7
  describe "and a configurer with multiple stub activators is initialized" do
8
8
 
9
- before(:all) { configurer.class.initialize! }
9
+ before(:all) { HttpStub::Examples::ConfigurerWithManyActivators.initialize! }
10
10
 
11
11
  describe "GET #stubs/activators" do
12
12
 
@@ -10,16 +10,16 @@ describe HttpStub::Server do
10
10
  let(:stub_controller) { double(HttpStub::Controllers::StubController).as_null_object }
11
11
  let(:stub_activator_controller) { double(HttpStub::Controllers::StubActivatorController).as_null_object }
12
12
 
13
- let(:app) { HttpStub::Server.new }
13
+ let(:app) { HttpStub::Server.new! }
14
14
 
15
15
  before(:each) do
16
- HttpStub::Models::Registry.stub!(:new).with("stub").and_return(stub_registry)
17
- HttpStub::Models::Registry.stub!(:new).with("stub_activator").and_return(stub_activator_registry)
18
- HttpStub::Controllers::StubController.stub!(:new).and_return(stub_controller)
19
- HttpStub::Controllers::StubActivatorController.stub!(:new).and_return(stub_activator_controller)
16
+ HttpStub::Models::Registry.stub(:new).with("stub").and_return(stub_registry)
17
+ HttpStub::Models::Registry.stub(:new).with("stub_activator").and_return(stub_activator_registry)
18
+ HttpStub::Controllers::StubController.stub(:new).and_return(stub_controller)
19
+ HttpStub::Controllers::StubActivatorController.stub(:new).and_return(stub_activator_controller)
20
20
  end
21
21
 
22
- describe "when a stub insertion is received" do
22
+ context "when a stub insertion is received" do
23
23
 
24
24
  it "should register the insertion via the stub controller" do
25
25
  stub_controller.should_receive(:register).and_return(HttpStub::Models::Response::SUCCESS)
@@ -28,7 +28,7 @@ describe HttpStub::Server do
28
28
  end
29
29
 
30
30
  it "should respond with the response provided by the controller" do
31
- stub_controller.stub!(:register).and_return(HttpStub::Models::Response.new("status" => 202, "body" => ""))
31
+ stub_controller.stub(:register).and_return(HttpStub::Models::Response.new("status" => 202, "body" => ""))
32
32
 
33
33
  issue_stub_request
34
34
 
@@ -48,7 +48,7 @@ describe HttpStub::Server do
48
48
 
49
49
  end
50
50
 
51
- describe "when a stub activator insertion request is received" do
51
+ context "when a stub activator insertion request is received" do
52
52
 
53
53
  it "should register the insertion via the stub activator controller" do
54
54
  stub_activator_controller.should_receive(:register).and_return(HttpStub::Models::Response::SUCCESS)
@@ -57,7 +57,7 @@ describe HttpStub::Server do
57
57
  end
58
58
 
59
59
  it "should respond with the response provided by the controller" do
60
- stub_activator_controller.stub!(:register).and_return(HttpStub::Models::Response.new("status" => 302, "body" => ""))
60
+ stub_activator_controller.stub(:register).and_return(HttpStub::Models::Response.new("status" => 302, "body" => ""))
61
61
 
62
62
  issue_stub_activator_request
63
63
 
@@ -78,7 +78,7 @@ describe HttpStub::Server do
78
78
 
79
79
  end
80
80
 
81
- describe "when a request to clear the stubs has been received" do
81
+ context "when a request to clear the stubs has been received" do
82
82
 
83
83
  it "should delegate clearing to the stub controller" do
84
84
  stub_controller.should_receive(:clear)
@@ -94,7 +94,7 @@ describe HttpStub::Server do
94
94
 
95
95
  end
96
96
 
97
- describe "when a request to clear the stub activators has been received" do
97
+ context "when a request to clear the stub activators has been received" do
98
98
 
99
99
  it "should delegate clearing to the stub activator controller" do
100
100
  stub_activator_controller.should_receive(:clear)
@@ -110,12 +110,12 @@ describe HttpStub::Server do
110
110
 
111
111
  end
112
112
 
113
- describe "when another type of request is received" do
113
+ context "when another type of request is received" do
114
114
 
115
- describe "and the stub controller replays a response" do
115
+ context "and the stub controller replays a response" do
116
116
 
117
117
  before(:each) do
118
- stub_controller.stub!(:replay).and_return(HttpStub::Models::Response.new("status" => 222, "body" => "Some body"))
118
+ stub_controller.stub(:replay).and_return(HttpStub::Models::Response.new("status" => 222, "body" => "Some body"))
119
119
  end
120
120
 
121
121
  it "should respond with the replay status code" do
@@ -132,16 +132,16 @@ describe HttpStub::Server do
132
132
 
133
133
  end
134
134
 
135
- describe "and the stub controller does not replay a response" do
135
+ context "and the stub controller does not replay a response" do
136
136
 
137
137
  before(:each) do
138
- stub_controller.stub!(:replay).and_return(HttpStub::Models::Response::EMPTY)
138
+ stub_controller.stub(:replay).and_return(HttpStub::Models::Response::EMPTY)
139
139
  end
140
140
 
141
- describe "but the stub activator controller activates a stub" do
141
+ context "but the stub activator controller activates a stub" do
142
142
 
143
143
  before(:each) do
144
- stub_activator_controller.stub!(:activate).and_return(HttpStub::Models::Response.new("status" => 300, "body" => "A body"))
144
+ stub_activator_controller.stub(:activate).and_return(HttpStub::Models::Response.new("status" => 300, "body" => "A body"))
145
145
  end
146
146
 
147
147
  it "should respond with the activation response status code" do
@@ -158,10 +158,10 @@ describe HttpStub::Server do
158
158
 
159
159
  end
160
160
 
161
- describe "and the stub activator controller does not activate a stub" do
161
+ context "and the stub activator controller does not activate a stub" do
162
162
 
163
163
  before(:each) do
164
- stub_activator_controller.stub!(:activate).and_return(HttpStub::Models::Response::EMPTY)
164
+ stub_activator_controller.stub(:activate).and_return(HttpStub::Models::Response::EMPTY)
165
165
  end
166
166
 
167
167
  it "should respond with a 404 status code" do
@@ -176,4 +176,14 @@ describe HttpStub::Server do
176
176
 
177
177
  end
178
178
 
179
+ context "when a request to replay a stub is received" do
180
+
181
+ it "should handle processing of the response via the request pipeline" do
182
+ HttpStub::Models::RequestPipeline.should_receive(:before_halt).with(duck_type(:status, :body))
183
+
184
+ get "/some/stubbed/uri"
185
+ end
186
+
187
+ end
188
+
179
189
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start do
3
3
  add_filter "/spec/"
4
- minimum_coverage 97.6
4
+ add_filter "/vendor/"
5
+ minimum_coverage 98.28
5
6
  refuse_coverage_drop
6
7
  end if ENV["coverage"]
7
8
 
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.7.4
4
+ version: 0.8.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-05-16 00:00:00.000000000 Z
13
+ date: 2013-09-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: sinatra
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 1.3.6
22
+ version: '1.4'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,7 +27,7 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- version: 1.3.6
30
+ version: '1.4'
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: sinatra-partial
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -35,7 +35,7 @@ dependencies:
35
35
  requirements:
36
36
  - - ~>
37
37
  - !ruby/object:Gem::Version
38
- version: 0.4.0
38
+ version: '0.4'
39
39
  type: :runtime
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,7 +43,7 @@ dependencies:
43
43
  requirements:
44
44
  - - ~>
45
45
  - !ruby/object:Gem::Version
46
- version: 0.4.0
46
+ version: '0.4'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: haml
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -51,7 +51,7 @@ dependencies:
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 4.0.2
54
+ version: '4.0'
55
55
  type: :runtime
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
@@ -59,7 +59,7 @@ dependencies:
59
59
  requirements:
60
60
  - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: 4.0.2
62
+ version: '4.0'
63
63
  - !ruby/object:Gem::Dependency
64
64
  name: sass
65
65
  requirement: !ruby/object:Gem::Requirement
@@ -67,7 +67,7 @@ dependencies:
67
67
  requirements:
68
68
  - - ~>
69
69
  - !ruby/object:Gem::Version
70
- version: 3.2.9
70
+ version: '3.2'
71
71
  type: :runtime
72
72
  prerelease: false
73
73
  version_requirements: !ruby/object:Gem::Requirement
@@ -75,7 +75,7 @@ dependencies:
75
75
  requirements:
76
76
  - - ~>
77
77
  - !ruby/object:Gem::Version
78
- version: 3.2.9
78
+ version: '3.2'
79
79
  - !ruby/object:Gem::Dependency
80
80
  name: rspec
81
81
  requirement: !ruby/object:Gem::Requirement
@@ -83,7 +83,7 @@ dependencies:
83
83
  requirements:
84
84
  - - ~>
85
85
  - !ruby/object:Gem::Version
86
- version: '2.13'
86
+ version: '2.14'
87
87
  type: :development
88
88
  prerelease: false
89
89
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,7 +91,7 @@ dependencies:
91
91
  requirements:
92
92
  - - ~>
93
93
  - !ruby/object:Gem::Version
94
- version: '2.13'
94
+ version: '2.14'
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: simplecov
97
97
  requirement: !ruby/object:Gem::Requirement
@@ -99,7 +99,7 @@ dependencies:
99
99
  requirements:
100
100
  - - ~>
101
101
  - !ruby/object:Gem::Version
102
- version: 0.7.1
102
+ version: '0.7'
103
103
  type: :development
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
@@ -107,7 +107,7 @@ dependencies:
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- version: 0.7.1
110
+ version: '0.7'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: flog
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +115,7 @@ dependencies:
115
115
  requirements:
116
116
  - - ~>
117
117
  - !ruby/object:Gem::Version
118
- version: 3.2.3
118
+ version: '4.1'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
@@ -123,7 +123,7 @@ dependencies:
123
123
  requirements:
124
124
  - - ~>
125
125
  - !ruby/object:Gem::Version
126
- version: 3.2.3
126
+ version: '4.1'
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: travis-lint
129
129
  requirement: !ruby/object:Gem::Requirement
@@ -131,7 +131,7 @@ dependencies:
131
131
  requirements:
132
132
  - - ~>
133
133
  - !ruby/object:Gem::Version
134
- version: 1.6.0
134
+ version: '1.7'
135
135
  type: :development
136
136
  prerelease: false
137
137
  version_requirements: !ruby/object:Gem::Requirement
@@ -139,7 +139,7 @@ dependencies:
139
139
  requirements:
140
140
  - - ~>
141
141
  - !ruby/object:Gem::Version
142
- version: 1.6.0
142
+ version: '1.7'
143
143
  - !ruby/object:Gem::Dependency
144
144
  name: rake
145
145
  requirement: !ruby/object:Gem::Requirement
@@ -147,7 +147,7 @@ dependencies:
147
147
  requirements:
148
148
  - - ~>
149
149
  - !ruby/object:Gem::Version
150
- version: 10.0.4
150
+ version: '10.1'
151
151
  type: :development
152
152
  prerelease: false
153
153
  version_requirements: !ruby/object:Gem::Requirement
@@ -155,7 +155,7 @@ dependencies:
155
155
  requirements:
156
156
  - - ~>
157
157
  - !ruby/object:Gem::Version
158
- version: 10.0.4
158
+ version: '10.1'
159
159
  - !ruby/object:Gem::Dependency
160
160
  name: rack-test
161
161
  requirement: !ruby/object:Gem::Requirement
@@ -163,7 +163,7 @@ dependencies:
163
163
  requirements:
164
164
  - - ~>
165
165
  - !ruby/object:Gem::Version
166
- version: 0.6.2
166
+ version: '0.6'
167
167
  type: :development
168
168
  prerelease: false
169
169
  version_requirements: !ruby/object:Gem::Requirement
@@ -171,7 +171,7 @@ dependencies:
171
171
  requirements:
172
172
  - - ~>
173
173
  - !ruby/object:Gem::Version
174
- version: 0.6.2
174
+ version: '0.6'
175
175
  - !ruby/object:Gem::Dependency
176
176
  name: nokogiri
177
177
  requirement: !ruby/object:Gem::Requirement
@@ -179,7 +179,7 @@ dependencies:
179
179
  requirements:
180
180
  - - ~>
181
181
  - !ruby/object:Gem::Version
182
- version: 1.5.9
182
+ version: '1.6'
183
183
  type: :development
184
184
  prerelease: false
185
185
  version_requirements: !ruby/object:Gem::Requirement
@@ -187,7 +187,23 @@ dependencies:
187
187
  requirements:
188
188
  - - ~>
189
189
  - !ruby/object:Gem::Version
190
- version: 1.5.9
190
+ version: '1.6'
191
+ - !ruby/object:Gem::Dependency
192
+ name: httparty
193
+ requirement: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ~>
197
+ - !ruby/object:Gem::Version
198
+ version: '0.11'
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ~>
205
+ - !ruby/object:Gem::Version
206
+ version: '0.11'
191
207
  - !ruby/object:Gem::Dependency
192
208
  name: wait_until
193
209
  requirement: !ruby/object:Gem::Requirement
@@ -211,7 +227,7 @@ dependencies:
211
227
  requirements:
212
228
  - - ~>
213
229
  - !ruby/object:Gem::Version
214
- version: 1.8.0
230
+ version: '1.8'
215
231
  type: :development
216
232
  prerelease: false
217
233
  version_requirements: !ruby/object:Gem::Requirement
@@ -219,7 +235,7 @@ dependencies:
219
235
  requirements:
220
236
  - - ~>
221
237
  - !ruby/object:Gem::Version
222
- version: 1.8.0
238
+ version: '1.8'
223
239
  description: fakeweb for a HTTP server, informing it to stub / fake responses.
224
240
  email: matthew.ueckerman@myob.com
225
241
  executables: []
@@ -240,13 +256,14 @@ files:
240
256
  - ./lib/http_stub/models/regexpable_value.rb
241
257
  - ./lib/http_stub/models/registry.rb
242
258
  - ./lib/http_stub/models/request_header_parser.rb
259
+ - ./lib/http_stub/models/request_pipeline.rb
243
260
  - ./lib/http_stub/models/response.rb
244
261
  - ./lib/http_stub/models/stub.rb
245
262
  - ./lib/http_stub/models/stub_activator.rb
246
263
  - ./lib/http_stub/models/stub_headers.rb
247
264
  - ./lib/http_stub/models/stub_parameters.rb
248
265
  - ./lib/http_stub/models/stub_uri.rb
249
- - ./lib/http_stub/rake/start_server_task.rb
266
+ - ./lib/http_stub/rake/server_tasks.rb
250
267
  - ./lib/http_stub/rake/task_generators.rb
251
268
  - ./lib/http_stub/server.rb
252
269
  - ./lib/http_stub/version.rb
@@ -272,13 +289,15 @@ files:
272
289
  - ./spec/lib/http_stub/models/regexpable_value_spec.rb
273
290
  - ./spec/lib/http_stub/models/registry_spec.rb
274
291
  - ./spec/lib/http_stub/models/request_header_parser_spec.rb
292
+ - ./spec/lib/http_stub/models/request_pipeline_spec.rb
275
293
  - ./spec/lib/http_stub/models/response_spec.rb
276
294
  - ./spec/lib/http_stub/models/stub_activator_spec.rb
277
295
  - ./spec/lib/http_stub/models/stub_headers_spec.rb
278
296
  - ./spec/lib/http_stub/models/stub_parameters_spec.rb
279
297
  - ./spec/lib/http_stub/models/stub_spec.rb
280
298
  - ./spec/lib/http_stub/models/stub_uri_spec.rb
281
- - ./spec/lib/http_stub/rake/start_server_rake_integration_spec.rb
299
+ - ./spec/lib/http_stub/rake/server_tasks_integration_spec.rb
300
+ - ./spec/lib/http_stub/rake/server_tasks_spec.rb
282
301
  - ./spec/lib/http_stub/server_integration_spec.rb
283
302
  - ./spec/lib/http_stub/server_spec.rb
284
303
  - ./spec/spec_helper.rb
@@ -304,10 +323,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
304
323
  version: '0'
305
324
  segments:
306
325
  - 0
307
- hash: -1119833046664050459
326
+ hash: -2870927875364426759
308
327
  requirements: []
309
328
  rubyforge_project: http_stub
310
- rubygems_version: 1.8.24
329
+ rubygems_version: 1.8.25
311
330
  signing_key:
312
331
  specification_version: 3
313
332
  summary: A HTTP Server replaying configured stub responses.
@@ -328,13 +347,15 @@ test_files:
328
347
  - ./spec/lib/http_stub/models/regexpable_value_spec.rb
329
348
  - ./spec/lib/http_stub/models/registry_spec.rb
330
349
  - ./spec/lib/http_stub/models/request_header_parser_spec.rb
350
+ - ./spec/lib/http_stub/models/request_pipeline_spec.rb
331
351
  - ./spec/lib/http_stub/models/response_spec.rb
332
352
  - ./spec/lib/http_stub/models/stub_activator_spec.rb
333
353
  - ./spec/lib/http_stub/models/stub_headers_spec.rb
334
354
  - ./spec/lib/http_stub/models/stub_parameters_spec.rb
335
355
  - ./spec/lib/http_stub/models/stub_spec.rb
336
356
  - ./spec/lib/http_stub/models/stub_uri_spec.rb
337
- - ./spec/lib/http_stub/rake/start_server_rake_integration_spec.rb
357
+ - ./spec/lib/http_stub/rake/server_tasks_integration_spec.rb
358
+ - ./spec/lib/http_stub/rake/server_tasks_spec.rb
338
359
  - ./spec/lib/http_stub/server_integration_spec.rb
339
360
  - ./spec/lib/http_stub/server_spec.rb
340
361
  - ./spec/spec_helper.rb
@@ -1,21 +0,0 @@
1
- module HttpStub
2
-
3
- module Rake
4
-
5
- class StartServerTask < ::Rake::TaskLib
6
-
7
- def initialize(options)
8
- desc "Starts stub #{options[:name]}"
9
- task "start_#{options[:name]}" do
10
- HttpStub::Server.instance_eval do
11
- set :port, options[:port]
12
- run!
13
- end
14
- end
15
- end
16
-
17
- end
18
-
19
- end
20
-
21
- end
@@ -1,17 +0,0 @@
1
- describe HttpStub::Rake::StartServerTask do
2
- include_context "server integration"
3
-
4
- describe("when the generated task is invoked") do
5
-
6
- it "should start a stub server that responds to stub requests" do
7
- request = Net::HTTP::Post.new("/stubs")
8
- request.body = { "response" => { "status" => 302, "body" => "Some Body" } }.to_json
9
-
10
- response = Net::HTTP.new("localhost", 8001).start { |http| http.request(request) }
11
-
12
- response.code.should eql("200")
13
- end
14
-
15
- end
16
-
17
- end