http_stub 0.7.4 → 0.8.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.
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