http_stub 0.22.4 → 0.23.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.
- checksums.yaml +4 -4
- data/lib/http_stub.rb +15 -5
- data/lib/http_stub/configurer/dsl/request_attribute_referencer.rb +19 -0
- data/lib/http_stub/configurer/dsl/request_referencer.rb +24 -0
- data/lib/http_stub/configurer/dsl/scenario_activator.rb +2 -2
- data/lib/http_stub/configurer/dsl/scenario_builder.rb +2 -2
- data/lib/http_stub/configurer/dsl/server.rb +4 -4
- data/lib/http_stub/configurer/dsl/stub_builder.rb +5 -3
- data/lib/http_stub/configurer/request/controllable_value.rb +1 -3
- data/lib/http_stub/configurer/request/http/factory.rb +2 -2
- data/lib/http_stub/configurer/request/omittable.rb +2 -4
- data/lib/http_stub/configurer/request/regexpable.rb +3 -8
- data/lib/http_stub/configurer/server/command_processor.rb +5 -7
- data/lib/http_stub/configurer/server/facade.rb +2 -4
- data/lib/http_stub/extensions/core/hash.rb +4 -11
- data/lib/http_stub/extensions/core/hash/formatted.rb +23 -0
- data/lib/http_stub/extensions/core/hash/indifferent_and_insensitive_access.rb +24 -0
- data/lib/http_stub/extensions/core/hash/with_indifferent_and_insensitive_access.rb +18 -0
- data/lib/http_stub/extensions/rack/handler.rb +1 -1
- data/lib/http_stub/rake/task_generators.rb +1 -1
- data/lib/http_stub/server/application.rb +10 -11
- data/lib/http_stub/server/application_helpers.rb +3 -5
- data/lib/http_stub/server/daemon.rb +5 -6
- data/lib/http_stub/server/request.rb +3 -10
- data/lib/http_stub/server/request/headers.rb +25 -0
- data/lib/http_stub/server/request/parameters.rb +21 -0
- data/lib/http_stub/server/request/request.rb +21 -0
- data/lib/http_stub/server/scenario/links.rb +1 -1
- data/lib/http_stub/server/stub/controller.rb +1 -1
- data/lib/http_stub/server/stub/empty.rb +4 -0
- data/lib/http_stub/server/stub/match/hash_matcher.rb +19 -0
- data/lib/http_stub/server/stub/match/omitted_value_matcher.rb +1 -3
- data/lib/http_stub/server/stub/match/rule/body.rb +2 -4
- data/lib/http_stub/server/stub/match/rule/headers.rb +5 -11
- data/lib/http_stub/server/stub/match/rule/json_body.rb +3 -5
- data/lib/http_stub/server/stub/match/rule/method.rb +1 -1
- data/lib/http_stub/server/stub/match/rule/parameters.rb +4 -7
- data/lib/http_stub/server/stub/match/rule/simple_body.rb +3 -3
- data/lib/http_stub/server/stub/match/rule/truthy.rb +27 -0
- data/lib/http_stub/server/stub/match/rule/uri.rb +3 -3
- data/lib/http_stub/server/stub/match/string_value_matcher.rb +4 -13
- data/lib/http_stub/server/stub/response.rb +5 -2
- data/lib/http_stub/server/stub/response/attribute/body.rb +32 -0
- data/lib/http_stub/server/stub/response/attribute/headers.rb +26 -0
- data/lib/http_stub/server/stub/response/attribute/interpolator.rb +26 -0
- data/lib/http_stub/server/stub/response/attribute/interpolator/headers.rb +27 -0
- data/lib/http_stub/server/stub/response/attribute/interpolator/parameters.rb +27 -0
- data/lib/http_stub/server/stub/response/base.rb +5 -16
- data/lib/http_stub/server/stub/response/file.rb +6 -2
- data/lib/http_stub/server/stub/response/text.rb +12 -0
- data/lib/http_stub/server/stub/stub.rb +4 -0
- data/lib/http_stub/version.rb +1 -1
- data/spec/acceptance/request_reference_spec.rb +44 -0
- data/spec/lib/http_stub/configurer/dsl/request_attribute_referencer_spec.rb +37 -0
- data/spec/lib/http_stub/configurer/dsl/request_referencer_spec.rb +37 -0
- data/spec/lib/http_stub/configurer/dsl/scenario_activator_spec.rb +14 -14
- data/spec/lib/http_stub/configurer/dsl/server_spec.rb +2 -6
- data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +34 -8
- data/spec/lib/http_stub/{server/formatted_hash_spec.rb → extensions/core/hash/formatted_spec.rb} +4 -6
- data/spec/lib/http_stub/{hash_with_indifferent_and_insensitive_access_spec.rb → extensions/core/hash/indifferent_and_insensitive_access_spec.rb} +8 -4
- data/spec/lib/http_stub/extensions/core/hash/with_indifferent_and_insensitive_access_spec.rb +41 -0
- data/spec/lib/http_stub/extensions/core/hash_spec.rb +11 -129
- data/spec/lib/http_stub/server/application_spec.rb +1 -1
- data/spec/lib/http_stub/server/payload_file_consolidator_spec.rb +1 -1
- data/spec/lib/http_stub/server/request/headers_spec.rb +89 -0
- data/spec/lib/http_stub/server/request/parameters_spec.rb +60 -0
- data/spec/lib/http_stub/server/request/request_spec.rb +84 -0
- data/spec/lib/http_stub/server/request_spec.rb +9 -98
- data/spec/lib/http_stub/server/response_spec.rb +2 -6
- data/spec/lib/http_stub/server/scenario/controller_spec.rb +1 -1
- data/spec/lib/http_stub/server/scenario/parser_spec.rb +3 -1
- data/spec/lib/http_stub/server/stub/controller_spec.rb +11 -4
- data/spec/lib/http_stub/server/stub/empty_spec.rb +10 -0
- data/spec/lib/http_stub/server/stub/match/hash_matcher_spec.rb +122 -0
- data/spec/lib/http_stub/server/stub/match/rule/body_spec.rb +4 -4
- data/spec/lib/http_stub/server/stub/match/rule/headers_spec.rb +54 -45
- data/spec/lib/http_stub/server/stub/match/rule/json_body_spec.rb +5 -5
- data/spec/lib/http_stub/server/stub/match/rule/method_spec.rb +19 -17
- data/spec/lib/http_stub/server/stub/match/rule/parameters_spec.rb +26 -33
- data/spec/lib/http_stub/server/stub/match/rule/simple_body_spec.rb +16 -25
- data/spec/lib/http_stub/server/stub/match/{truthy_matcher_spec.rb → rule/truthy_spec.rb} +3 -5
- data/spec/lib/http_stub/server/stub/match/rule/uri_spec.rb +16 -25
- data/spec/lib/http_stub/server/stub/match/string_value_matcher_spec.rb +2 -12
- data/spec/lib/http_stub/server/stub/parser_spec.rb +5 -3
- data/spec/lib/http_stub/server/stub/response/attribute/body_spec.rb +98 -0
- data/spec/lib/http_stub/server/stub/response/attribute/headers_spec.rb +57 -0
- data/spec/lib/http_stub/server/stub/response/attribute/interpolator/headers_spec.rb +53 -0
- data/spec/lib/http_stub/server/stub/response/attribute/interpolator/parameters_spec.rb +53 -0
- data/spec/lib/http_stub/server/stub/response/attribute/interpolator_spec.rb +41 -0
- data/spec/lib/http_stub/server/stub/response/base_spec.rb +6 -53
- data/spec/lib/http_stub/server/stub/response/file_spec.rb +48 -7
- data/spec/lib/http_stub/server/stub/response/text_spec.rb +66 -1
- data/spec/lib/http_stub/server/stub/stub_spec.rb +25 -4
- data/spec/spec_helper.rb +1 -0
- data/spec/support/http_stub/server/request_fixture.rb +1 -1
- metadata +86 -26
- data/lib/http_stub/hash_with_indifferent_and_insensitive_access.rb +0 -18
- data/lib/http_stub/server/formatted_hash.rb +0 -18
- data/lib/http_stub/server/header_parser.rb +0 -17
- data/lib/http_stub/server/stub/match/hash_with_string_value_matchers.rb +0 -26
- data/lib/http_stub/server/stub/match/truthy_matcher.rb +0 -25
- data/spec/lib/http_stub/server/header_parser_spec.rb +0 -51
- data/spec/lib/http_stub/server/stub/match/hash_with_string_value_matchers_spec.rb +0 -166
@@ -0,0 +1,26 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
module Stub
|
4
|
+
module Response
|
5
|
+
module Attribute
|
6
|
+
|
7
|
+
class Headers < ::Hash
|
8
|
+
include HttpStub::Extensions::Core::Hash::Formatted
|
9
|
+
|
10
|
+
def initialize(stub_headers)
|
11
|
+
super(stub_headers, ":")
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_values_from(request)
|
15
|
+
self.each_with_object({}) do |(name, value), result|
|
16
|
+
result[name] = HttpStub::Server::Stub::Response::Attribute::Interpolator.interpolate(value, request)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
module Stub
|
4
|
+
module Response
|
5
|
+
module Attribute
|
6
|
+
|
7
|
+
module Interpolator
|
8
|
+
|
9
|
+
CHAIN = [
|
10
|
+
HttpStub::Server::Stub::Response::Attribute::Interpolator::Headers,
|
11
|
+
HttpStub::Server::Stub::Response::Attribute::Interpolator::Parameters
|
12
|
+
].freeze
|
13
|
+
|
14
|
+
private_constant :CHAIN
|
15
|
+
|
16
|
+
def self.interpolate(value, request)
|
17
|
+
CHAIN.reduce(value) { |result, interpolator| interpolator.interpolate(result, request) }
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
module Stub
|
4
|
+
module Response
|
5
|
+
module Attribute
|
6
|
+
module Interpolator
|
7
|
+
|
8
|
+
class Headers
|
9
|
+
|
10
|
+
CONTROL_VALUE_REGEXP = /control:request\.headers\[([^\]]+)\]/
|
11
|
+
|
12
|
+
private_constant :CONTROL_VALUE_REGEXP
|
13
|
+
|
14
|
+
def self.interpolate(stub_headers, request)
|
15
|
+
stub_headers.scan(CONTROL_VALUE_REGEXP).flatten.reduce(stub_headers) do |result, header_name|
|
16
|
+
result.gsub("control:request.headers[#{header_name}]", request.headers[header_name] || "")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module HttpStub
|
2
|
+
module Server
|
3
|
+
module Stub
|
4
|
+
module Response
|
5
|
+
module Attribute
|
6
|
+
module Interpolator
|
7
|
+
|
8
|
+
class Parameters
|
9
|
+
|
10
|
+
CONTROL_VALUE_REGEXP = /control:request\.parameters\[([^\]]+)\]/
|
11
|
+
|
12
|
+
private_constant :CONTROL_VALUE_REGEXP
|
13
|
+
|
14
|
+
def self.interpolate(stub_parameters, request)
|
15
|
+
stub_parameters.scan(CONTROL_VALUE_REGEXP).flatten.reduce(stub_parameters) do |result, parameter_name|
|
16
|
+
result.gsub("control:request.parameters[#{parameter_name}]", request.parameters[parameter_name] || "")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -5,11 +5,9 @@ module HttpStub
|
|
5
5
|
|
6
6
|
class Base
|
7
7
|
|
8
|
-
private
|
9
|
-
|
10
8
|
DEFAULT_ARGS = { "status" => 200, "delay_in_seconds" => 0 }.freeze
|
11
9
|
|
12
|
-
|
10
|
+
private_constant :DEFAULT_ARGS
|
13
11
|
|
14
12
|
class << self
|
15
13
|
|
@@ -20,7 +18,7 @@ module HttpStub
|
|
20
18
|
def merge_defaults(args)
|
21
19
|
args.clone.tap do |result|
|
22
20
|
headers = result["headers"] ||= {}
|
23
|
-
DEFAULT_ARGS.each { |key, value| result[key]
|
21
|
+
DEFAULT_ARGS.each { |key, value| result[key] = value if !result[key] || result[key] == "" }
|
24
22
|
default_headers.each { |key, value| headers[key] = value if !headers[key] || headers[key] == "" }
|
25
23
|
end
|
26
24
|
end
|
@@ -33,29 +31,20 @@ module HttpStub
|
|
33
31
|
|
34
32
|
end
|
35
33
|
|
36
|
-
attr_reader :status, :headers, :
|
34
|
+
attr_reader :status, :headers, :delay_in_seconds
|
37
35
|
|
38
36
|
def initialize(args={})
|
39
|
-
@original_args
|
37
|
+
@original_args = args
|
40
38
|
resolved_args = self.class.merge_defaults(args)
|
41
39
|
@status = resolved_args["status"]
|
42
|
-
@headers = HttpStub::Server::
|
43
|
-
@body = resolved_args["body"]
|
40
|
+
@headers = HttpStub::Server::Stub::Response::Attribute::Headers.new(resolved_args["headers"])
|
44
41
|
@delay_in_seconds = resolved_args["delay_in_seconds"]
|
45
42
|
end
|
46
43
|
|
47
|
-
def empty?
|
48
|
-
@original_args.empty?
|
49
|
-
end
|
50
|
-
|
51
44
|
def type
|
52
45
|
self.class.name.demodulize.underscore
|
53
46
|
end
|
54
47
|
|
55
|
-
def to_s
|
56
|
-
@original_args.to_s
|
57
|
-
end
|
58
|
-
|
59
48
|
end
|
60
49
|
|
61
50
|
end
|
@@ -11,8 +11,12 @@ module HttpStub
|
|
11
11
|
|
12
12
|
def initialize(args)
|
13
13
|
@file = args["body"][:tempfile]
|
14
|
-
@uri
|
15
|
-
super
|
14
|
+
@uri = "file://#{@file.path}"
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def with_values_from(request)
|
19
|
+
self.class.new(@original_args.merge("headers" => @headers.with_values_from(request)))
|
16
20
|
end
|
17
21
|
|
18
22
|
def serve_on(server)
|
@@ -7,6 +7,18 @@ module HttpStub
|
|
7
7
|
|
8
8
|
add_default_headers "content-type" => "application/json"
|
9
9
|
|
10
|
+
attr_reader :body
|
11
|
+
|
12
|
+
def initialize(args={})
|
13
|
+
super
|
14
|
+
@body = HttpStub::Server::Stub::Response::Attribute::Body.new(args["body"])
|
15
|
+
end
|
16
|
+
|
17
|
+
def with_values_from(request)
|
18
|
+
self.class.new(@original_args.merge("headers" => @headers.with_values_from(request),
|
19
|
+
"body" => @body.with_values_from(request)))
|
20
|
+
end
|
21
|
+
|
10
22
|
def serve_on(server)
|
11
23
|
server.halt(@status, @headers.to_hash, @body)
|
12
24
|
end
|
data/lib/http_stub/version.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
describe "Request references in response acceptance" do
|
2
|
+
include_context "configurer integration"
|
3
|
+
|
4
|
+
let(:configurer) { HttpStub::Examples::ConfigurerWithRequestReferences.new }
|
5
|
+
|
6
|
+
before(:example) { configurer.class.initialize! }
|
7
|
+
|
8
|
+
context "when a request is made matching a stub that references request attributes" do
|
9
|
+
|
10
|
+
let(:header_value) { "some header value" }
|
11
|
+
let(:parameter_value) { "some parameter value" }
|
12
|
+
|
13
|
+
let(:response) do
|
14
|
+
HTTParty.get("#{server_uri}/some_path", headers: { "header_name" => header_value },
|
15
|
+
query: { "parameter_name" => parameter_value })
|
16
|
+
end
|
17
|
+
|
18
|
+
context "the response headers" do
|
19
|
+
|
20
|
+
it "include request headers" do
|
21
|
+
expect(response.headers["header_referencing_header"]).to eql(header_value)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "include request parameters" do
|
25
|
+
expect(response.headers["header_referencing_parameter"]).to eql(parameter_value)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
context "the response body" do
|
31
|
+
|
32
|
+
it "include request headers" do
|
33
|
+
expect(response.body).to include(header_value)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "include request parameters" do
|
37
|
+
expect(response.body).to include(parameter_value)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
describe HttpStub::Configurer::DSL::RequestAttributeReferencer do
|
2
|
+
|
3
|
+
let(:attribute_type) { :some_attribute_type }
|
4
|
+
|
5
|
+
let(:request_attribute_referencer) { described_class.new(attribute_type) }
|
6
|
+
|
7
|
+
describe "#[]" do
|
8
|
+
|
9
|
+
let(:name) { "some_name" }
|
10
|
+
|
11
|
+
subject { request_attribute_referencer[name] }
|
12
|
+
|
13
|
+
it "returns a control value" do
|
14
|
+
expect(subject).to start_with("control:")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns a string referring to the referencer request attribute type" do
|
18
|
+
expect(subject).to include("request.some_attribute_type")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns a string that will resolve the value for the provided name" do
|
22
|
+
expect(subject).to end_with("[#{name}]")
|
23
|
+
end
|
24
|
+
|
25
|
+
context "when the name provided is a symbol" do
|
26
|
+
|
27
|
+
let(:name) { :some_name }
|
28
|
+
|
29
|
+
it "returns a string that resolves the value with the provided name" do
|
30
|
+
expect(subject).to end_with("[#{name}]")
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
describe HttpStub::Configurer::DSL::RequestReferencer do
|
2
|
+
|
3
|
+
let(:request_referencer) { described_class.new }
|
4
|
+
|
5
|
+
before(:example) { allow(HttpStub::Configurer::DSL::RequestAttributeReferencer).to receive(:new) }
|
6
|
+
|
7
|
+
describe "#parameters" do
|
8
|
+
|
9
|
+
subject { request_referencer.parameters }
|
10
|
+
|
11
|
+
it "returns an attribute request referencer for parameters" do
|
12
|
+
parameter_referencer = instance_double(HttpStub::Configurer::DSL::RequestAttributeReferencer)
|
13
|
+
allow(HttpStub::Configurer::DSL::RequestAttributeReferencer).to(
|
14
|
+
receive(:new).with(:parameters).and_return(parameter_referencer)
|
15
|
+
)
|
16
|
+
|
17
|
+
expect(subject).to eql(parameter_referencer)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "#headers" do
|
23
|
+
|
24
|
+
subject { request_referencer.headers }
|
25
|
+
|
26
|
+
it "returns an attribute request referencer for headers" do
|
27
|
+
header_referencer = instance_double(HttpStub::Configurer::DSL::RequestAttributeReferencer)
|
28
|
+
allow(HttpStub::Configurer::DSL::RequestAttributeReferencer).to(
|
29
|
+
receive(:new).with(:headers).and_return(header_referencer)
|
30
|
+
)
|
31
|
+
|
32
|
+
expect(subject).to eql(header_referencer)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -3,7 +3,7 @@ describe HttpStub::Configurer::DSL::ScenarioActivator do
|
|
3
3
|
class HttpStub::Configurer::DSL::TestableScenarioActivator
|
4
4
|
include HttpStub::Configurer::DSL::ScenarioActivator
|
5
5
|
|
6
|
-
def activate_all!(
|
6
|
+
def activate_all!(_names)
|
7
7
|
# Intentionally blank
|
8
8
|
end
|
9
9
|
|
@@ -13,30 +13,30 @@ describe HttpStub::Configurer::DSL::ScenarioActivator do
|
|
13
13
|
|
14
14
|
describe "#activate!" do
|
15
15
|
|
16
|
-
subject { activator.activate!(
|
16
|
+
subject { activator.activate!(name) }
|
17
17
|
|
18
|
-
context "when a
|
18
|
+
context "when a name is provided" do
|
19
19
|
|
20
|
-
let(:
|
20
|
+
let(:name) { "some name" }
|
21
21
|
|
22
|
-
it "delegates to activate all with the provided
|
23
|
-
expect(activator).to receive(:activate_all!).with([
|
22
|
+
it "delegates to activate all with the provided name" do
|
23
|
+
expect(activator).to receive(:activate_all!).with([ name ])
|
24
24
|
|
25
25
|
subject
|
26
26
|
end
|
27
27
|
|
28
28
|
end
|
29
29
|
|
30
|
-
context "when multiple
|
30
|
+
context "when multiple names are provided" do
|
31
31
|
|
32
|
-
let(:
|
32
|
+
let(:names) { (1..3).map { |i| "name #{i}" } }
|
33
33
|
|
34
34
|
context "as multiple arguments" do
|
35
35
|
|
36
|
-
subject { activator.activate!(*
|
36
|
+
subject { activator.activate!(*names) }
|
37
37
|
|
38
|
-
it "delegates to activate all the provided
|
39
|
-
expect(activator).to receive(:activate_all!).with(
|
38
|
+
it "delegates to activate all the provided names" do
|
39
|
+
expect(activator).to receive(:activate_all!).with(names)
|
40
40
|
|
41
41
|
subject
|
42
42
|
end
|
@@ -45,10 +45,10 @@ describe HttpStub::Configurer::DSL::ScenarioActivator do
|
|
45
45
|
|
46
46
|
context "as an array" do
|
47
47
|
|
48
|
-
subject { activator.activate!(
|
48
|
+
subject { activator.activate!(names) }
|
49
49
|
|
50
|
-
it "delegates to activate all the provided
|
51
|
-
expect(activator).to receive(:activate_all!).with(
|
50
|
+
it "delegates to activate all the provided names" do
|
51
|
+
expect(activator).to receive(:activate_all!).with(names)
|
52
52
|
|
53
53
|
subject
|
54
54
|
end
|
@@ -204,9 +204,7 @@ describe HttpStub::Configurer::DSL::Server do
|
|
204
204
|
end
|
205
205
|
|
206
206
|
it "yields the created builder to the provided block" do
|
207
|
-
expect(block).to
|
208
|
-
|
209
|
-
subject
|
207
|
+
expect { |block| server.add_scenario!(scenario_name, &block) }.to yield_with_args(scenario_builder)
|
210
208
|
end
|
211
209
|
|
212
210
|
it "builds the scenario request" do
|
@@ -335,9 +333,7 @@ describe HttpStub::Configurer::DSL::Server do
|
|
335
333
|
end
|
336
334
|
|
337
335
|
it "yields the created builder to the provided block" do
|
338
|
-
expect(block).to
|
339
|
-
|
340
|
-
subject
|
336
|
+
expect { |block| server.add_activator!(&block) }.to yield_with_args(stub_activator_builder)
|
341
337
|
end
|
342
338
|
|
343
339
|
it "builds a scenario request" do
|
@@ -6,10 +6,8 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
6
6
|
|
7
7
|
shared_context "triggers one stub" do
|
8
8
|
|
9
|
-
let(:trigger_stub)
|
10
|
-
let(:trigger_builder)
|
11
|
-
instance_double(HttpStub::Configurer::DSL::StubBuilder, build: trigger_stub)
|
12
|
-
end
|
9
|
+
let(:trigger_stub) { instance_double(HttpStub::Configurer::Request::Stub) }
|
10
|
+
let(:trigger_builder) { instance_double(HttpStub::Configurer::DSL::StubBuilder, build: trigger_stub) }
|
13
11
|
|
14
12
|
before(:example) { builder.trigger(trigger_builder) }
|
15
13
|
|
@@ -17,7 +15,7 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
17
15
|
|
18
16
|
shared_context "triggers many stubs" do
|
19
17
|
|
20
|
-
let(:trigger_stubs)
|
18
|
+
let(:trigger_stubs) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
|
21
19
|
let(:trigger_builders) do
|
22
20
|
trigger_stubs.map { |stub| instance_double(HttpStub::Configurer::DSL::StubBuilder, build: stub) }
|
23
21
|
end
|
@@ -103,10 +101,38 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
103
101
|
|
104
102
|
describe "#respond_with" do
|
105
103
|
|
106
|
-
|
104
|
+
context "when a block is provided referencing the matching request" do
|
105
|
+
|
106
|
+
let(:request_referencer) { instance_double(HttpStub::Configurer::DSL::RequestReferencer) }
|
107
|
+
|
108
|
+
subject { builder.respond_with { |request| { headers: request.headers[:some_header] } } }
|
109
|
+
|
110
|
+
it "includes the hash returned from the evaluated block in the response hash" do
|
111
|
+
subject
|
112
|
+
|
113
|
+
expect(builder.response).to include(headers: a_string_matching(/^control/))
|
114
|
+
end
|
115
|
+
|
116
|
+
it "returns the builder to support method chaining" do
|
117
|
+
expect(subject).to eql(builder)
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
context "when a block is not provided" do
|
123
|
+
|
124
|
+
subject { builder.respond_with(status: 201) }
|
125
|
+
|
126
|
+
it "includes the proivded hash in the response hash" do
|
127
|
+
subject
|
128
|
+
|
129
|
+
expect(builder.response).to include(status: 201)
|
130
|
+
end
|
131
|
+
|
132
|
+
it "returns the builder to support method chaining" do
|
133
|
+
expect(subject).to eql(builder)
|
134
|
+
end
|
107
135
|
|
108
|
-
it "returns the builder to support method chaining" do
|
109
|
-
expect(subject).to eql(builder)
|
110
136
|
end
|
111
137
|
|
112
138
|
end
|