http_stub 0.25.1 → 0.26.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 +32 -9
- data/lib/http_stub/configurer.rb +2 -10
- data/lib/http_stub/configurer/dsl/scenario_builder.rb +13 -11
- data/lib/http_stub/configurer/dsl/server.rb +32 -43
- data/lib/http_stub/configurer/dsl/server_endpoint_template.rb +23 -0
- data/lib/http_stub/configurer/dsl/session.rb +55 -0
- data/lib/http_stub/configurer/dsl/session_endpoint_template.rb +22 -0
- data/lib/http_stub/configurer/dsl/session_factory.rb +34 -0
- data/lib/http_stub/configurer/dsl/stub_builder.rb +18 -8
- data/lib/http_stub/configurer/dsl/stub_builder_template.rb +26 -0
- data/lib/http_stub/configurer/request/http/basic.rb +9 -3
- data/lib/http_stub/configurer/request/http/factory.rb +7 -16
- data/lib/http_stub/configurer/request/http/multipart.rb +5 -7
- data/lib/http_stub/configurer/request/stub.rb +3 -3
- data/lib/http_stub/configurer/request/triggers.rb +25 -0
- data/lib/http_stub/configurer/server/command_processor.rb +8 -10
- data/lib/http_stub/configurer/server/configuration.rb +33 -0
- data/lib/http_stub/configurer/server/facade.rb +21 -43
- data/lib/http_stub/configurer/server/request_processor.rb +2 -2
- data/lib/http_stub/configurer/server/session_facade.rb +64 -0
- data/lib/http_stub/extensions/core/uri.rb +28 -0
- data/lib/http_stub/extensions/rack/handler.rb +1 -0
- data/lib/http_stub/extensions/sinatra/namespace.rb +9 -0
- data/lib/http_stub/rake/server_tasks.rb +1 -4
- data/lib/http_stub/server/application/application.rb +17 -98
- data/lib/http_stub/server/application/configuration.rb +38 -0
- data/lib/http_stub/server/application/cross_origin_support.rb +7 -5
- data/lib/http_stub/server/application/request_support.rb +38 -0
- data/lib/http_stub/server/application/response_support.rb +19 -0
- data/lib/http_stub/server/application/routes/memory.rb +37 -0
- data/lib/http_stub/server/application/routes/resource.rb +23 -0
- data/lib/http_stub/server/application/routes/scenario.rb +52 -0
- data/lib/http_stub/server/application/routes/session.rb +65 -0
- data/lib/http_stub/server/application/routes/stub.rb +75 -0
- data/lib/http_stub/server/application/session_uri_support.rb +15 -0
- data/lib/http_stub/server/memory/controller.rb +25 -0
- data/lib/http_stub/server/memory/memory.rb +32 -0
- data/lib/http_stub/server/registry.rb +25 -8
- data/lib/http_stub/server/request/factory.rb +23 -0
- data/lib/http_stub/server/request/parameters.rb +2 -2
- data/lib/http_stub/server/request/request.rb +6 -11
- data/lib/http_stub/server/request/sinatra_request.rb +26 -0
- data/lib/http_stub/server/scenario/controller.rb +16 -11
- data/lib/http_stub/server/scenario/not_found_error.rb +15 -0
- data/lib/http_stub/server/session.rb +14 -0
- data/lib/http_stub/server/session/configuration.rb +32 -0
- data/lib/http_stub/server/session/controller.rb +40 -0
- data/lib/http_stub/server/session/empty.rb +15 -0
- data/lib/http_stub/server/session/identifier_strategy.rb +24 -0
- data/lib/http_stub/server/session/registry.rb +38 -0
- data/lib/http_stub/server/session/session.rb +80 -0
- data/lib/http_stub/server/stub/controller.rb +18 -12
- data/lib/http_stub/server/stub/empty.rb +1 -1
- data/lib/http_stub/server/stub/match/controller.rb +9 -5
- data/lib/http_stub/server/stub/payload/response_body_modifier.rb +3 -1
- data/lib/http_stub/server/stub/registry.rb +6 -13
- data/lib/http_stub/server/stub/triggers.rb +11 -9
- data/lib/http_stub/server/views/_home.haml +2 -0
- data/lib/http_stub/server/views/_post_link_function.haml +26 -0
- data/lib/http_stub/server/views/_session.haml +16 -0
- data/lib/http_stub/server/views/_stub.haml +8 -2
- data/lib/http_stub/server/views/_stubs.haml +4 -0
- data/lib/http_stub/server/views/application.sass +4 -1
- data/lib/http_stub/server/views/layout.haml +1 -0
- data/lib/http_stub/server/views/scenario.haml +4 -3
- data/lib/http_stub/server/views/scenarios.haml +7 -6
- data/lib/http_stub/server/views/session.haml +3 -0
- data/lib/http_stub/server/views/sessions.haml +6 -0
- data/lib/http_stub/server/views/stubs.haml +1 -4
- data/lib/http_stub/server/views/transactional_session.haml +2 -0
- data/lib/http_stub/version.rb +1 -1
- data/spec/acceptance/configurer_initialization_spec.rb +40 -51
- data/spec/acceptance/configurer_part_spec.rb +5 -7
- data/spec/acceptance/cross_origin_support_spec.rb +7 -13
- data/spec/acceptance/endpoint_template_spec.rb +2 -4
- data/spec/acceptance/request_reference_spec.rb +1 -3
- data/spec/acceptance/scenario_spec.rb +7 -9
- data/spec/acceptance/server_defaults_spec.rb +2 -4
- data/spec/acceptance/server_memory_spec.rb +20 -0
- data/spec/acceptance/session_spec.rb +125 -0
- data/spec/acceptance/stub_body_request_matching_spec.rb +2 -4
- data/spec/acceptance/stub_control_values_spec.rb +19 -18
- data/spec/acceptance/stub_match_last_spec.rb +0 -4
- data/spec/acceptance/stub_match_list_spec.rb +0 -4
- data/spec/acceptance/stub_miss_list_spec.rb +0 -4
- data/spec/acceptance/stub_spec.rb +11 -11
- data/spec/acceptance/stub_trigger_spec.rb +60 -13
- data/spec/lib/http_stub/configurer/dsl/scenario_builder_spec.rb +83 -30
- data/spec/lib/http_stub/configurer/dsl/server_endpoint_template_spec.rb +167 -0
- data/spec/lib/http_stub/configurer/dsl/server_spec.rb +306 -176
- data/spec/lib/http_stub/configurer/dsl/session_endpoint_template_spec.rb +150 -0
- data/spec/lib/http_stub/configurer/dsl/session_factory_spec.rb +97 -0
- data/spec/lib/http_stub/configurer/dsl/session_spec.rb +222 -0
- data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +209 -48
- data/spec/lib/http_stub/configurer/dsl/stub_builder_template_spec.rb +203 -0
- data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +80 -4
- data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +115 -56
- data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +39 -6
- data/spec/lib/http_stub/configurer/request/stub_spec.rb +50 -108
- data/spec/lib/http_stub/configurer/request/triggers_spec.rb +101 -0
- data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +11 -10
- data/spec/lib/http_stub/configurer/server/configuration_spec.rb +139 -0
- data/spec/lib/http_stub/configurer/server/facade_spec.rb +65 -142
- data/spec/lib/http_stub/configurer/server/request_processor_spec.rb +7 -6
- data/spec/lib/http_stub/configurer/server/session_facade_spec.rb +336 -0
- data/spec/lib/http_stub/configurer_spec.rb +105 -0
- data/spec/lib/http_stub/extensions/core/uri_spec.rb +75 -0
- data/spec/lib/http_stub/extensions/rack/handler_spec.rb +1 -1
- data/spec/lib/http_stub/extensions/sinatra/namespace_spec.rb +36 -0
- data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +4 -3
- data/spec/lib/http_stub/rake/server_tasks_spec.rb +47 -10
- data/spec/lib/http_stub/server/application/application_spec.rb +44 -301
- data/spec/lib/http_stub/server/application/configuration_spec.rb +59 -0
- data/spec/lib/http_stub/server/application/cross_origin_support_spec.rb +23 -20
- data/spec/lib/http_stub/server/application/request_support_integration_spec.rb +93 -0
- data/spec/lib/http_stub/server/application/request_support_spec.rb +61 -0
- data/spec/lib/http_stub/server/application/response_support_spec.rb +30 -0
- data/spec/lib/http_stub/server/application/routes/memory_spec.rb +41 -0
- data/spec/lib/http_stub/server/application/routes/resource_spec.rb +16 -0
- data/spec/lib/http_stub/server/application/routes/scenario_spec.rb +117 -0
- data/spec/lib/http_stub/server/application/routes/session_integration_spec.rb +46 -0
- data/spec/lib/http_stub/server/application/routes/session_spec.rb +186 -0
- data/spec/lib/http_stub/server/application/{application_integration_spec.rb → routes/stub_integration_spec.rb} +16 -38
- data/spec/lib/http_stub/server/application/routes/stub_spec.rb +202 -0
- data/spec/lib/http_stub/server/application/session_uri_support_spec.rb +48 -0
- data/spec/lib/http_stub/server/application/text_formatting_support_spec.rb +3 -3
- data/spec/lib/http_stub/server/memory/controller_spec.rb +47 -0
- data/spec/lib/http_stub/server/memory/memory_spec.rb +122 -0
- data/spec/lib/http_stub/server/registry_spec.rb +153 -34
- data/spec/lib/http_stub/server/request/factory_spec.rb +74 -0
- data/spec/lib/http_stub/server/request/parameters_spec.rb +5 -8
- data/spec/lib/http_stub/server/request/request_spec.rb +52 -52
- data/spec/lib/http_stub/server/request/sinatra_request_spec.rb +132 -0
- data/spec/lib/http_stub/server/scenario/controller_spec.rb +121 -35
- data/spec/lib/http_stub/server/scenario/not_found_error_spec.rb +25 -0
- data/spec/lib/http_stub/server/session/configuration_spec.rb +94 -0
- data/spec/lib/http_stub/server/session/controller_spec.rb +106 -0
- data/spec/lib/http_stub/server/session/empty_spec.rb +13 -0
- data/spec/lib/http_stub/server/session/identifier_strategy_spec.rb +126 -0
- data/spec/lib/http_stub/server/session/registry_spec.rb +214 -0
- data/spec/lib/http_stub/server/session/session_spec.rb +444 -0
- data/spec/lib/http_stub/server/stub/controller_spec.rb +89 -37
- data/spec/lib/http_stub/server/stub/empty_spec.rb +2 -2
- data/spec/lib/http_stub/server/stub/match/controller_spec.rb +59 -16
- data/spec/lib/http_stub/server/stub/payload/response_body_modifier_spec.rb +7 -8
- data/spec/lib/http_stub/server/stub/registry_integration_spec.rb +42 -15
- data/spec/lib/http_stub/server/stub/registry_spec.rb +38 -59
- data/spec/lib/http_stub/server/stub/triggers_spec.rb +93 -34
- data/spec/spec_helper.rb +13 -1
- data/spec/support/contain_file.rb +23 -0
- data/spec/support/cross_origin_server/application.rb +1 -1
- data/spec/support/cross_origin_server/index_page.rb +2 -2
- data/spec/support/cross_origin_server/integration.rb +3 -2
- data/spec/support/cross_origin_server/public/index.html +2 -1
- data/spec/support/http_stub/configurer_integration.rb +12 -14
- data/spec/support/http_stub/server/application/http_stub_rack_application_test.rb +47 -0
- data/spec/support/http_stub/server/driver.rb +56 -0
- data/spec/support/http_stub/server/memory_fixture.rb +17 -0
- data/spec/support/http_stub/server/request_fixture.rb +7 -6
- data/spec/support/http_stub/server/scenario_fixture.rb +13 -0
- data/spec/support/http_stub/server/session_fixture.rb +27 -0
- data/spec/support/http_stub/server_integration.rb +12 -17
- data/spec/support/http_stub/stub_fixture.rb +19 -6
- data/spec/support/include_in_json.rb +4 -4
- data/spec/support/rack/rack_application_test.rb +9 -0
- data/spec/support/rack/request_fixture.rb +13 -0
- data/spec/support/surpressed_output.rb +10 -0
- metadata +149 -36
- data/lib/http_stub/configurer/dsl/deprecated.rb +0 -60
- data/lib/http_stub/configurer/dsl/endpoint_template.rb +0 -38
- data/lib/http_stub/configurer/dsl/scenario_activator.rb +0 -15
- data/lib/http_stub/configurer/dsl/stub_activator_builder.rb +0 -24
- data/lib/http_stub/configurer/dsl/stub_builder_producer.rb +0 -21
- data/lib/http_stub/server/request.rb +0 -12
- data/lib/http_stub/server/scenario/activator.rb +0 -25
- data/lib/http_stub/server/views/_activate_scenario.haml +0 -23
- data/lib/http_stub/server/views/index.haml +0 -8
- data/spec/acceptance/activator_spec.rb +0 -81
- data/spec/lib/http_stub/configurer/dsl/deprecated_spec.rb +0 -240
- data/spec/lib/http_stub/configurer/dsl/endpoint_template_spec.rb +0 -255
- data/spec/lib/http_stub/configurer/dsl/scenario_activator_spec.rb +0 -62
- data/spec/lib/http_stub/configurer/dsl/stub_activator_builder_spec.rb +0 -120
- data/spec/lib/http_stub/configurer/dsl/stub_builder_producer_spec.rb +0 -85
- data/spec/lib/http_stub/server/request_spec.rb +0 -24
- data/spec/lib/http_stub/server/scenario/activator_spec.rb +0 -111
- data/spec/support/http_stub/server/scenario/scenario_fixture.rb +0 -15
@@ -4,23 +4,39 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
4
4
|
|
5
5
|
let(:builder) { HttpStub::Configurer::DSL::StubBuilder.new(default_builder) }
|
6
6
|
|
7
|
+
shared_context "triggers one scenario" do
|
8
|
+
|
9
|
+
let(:trigger_scenario) { "Some triggered scenario" }
|
10
|
+
|
11
|
+
before(:example) { builder.trigger(scenario: trigger_scenario) }
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
shared_context "triggers many scenarios" do
|
16
|
+
|
17
|
+
let(:trigger_scenarios) { (1..3).map { |i| "Some triggered scenario #{i}" } }
|
18
|
+
|
19
|
+
before(:example) { builder.trigger(scenarios: trigger_scenarios) }
|
20
|
+
|
21
|
+
end
|
22
|
+
|
7
23
|
shared_context "triggers one stub" do
|
8
24
|
|
9
|
-
let(:trigger_stub)
|
10
|
-
let(:
|
25
|
+
let(:trigger_stub) { instance_double(HttpStub::Configurer::Request::Stub) }
|
26
|
+
let(:trigger_stub_builder) { instance_double(described_class, build: trigger_stub) }
|
11
27
|
|
12
|
-
before(:example) { builder.trigger(
|
28
|
+
before(:example) { builder.trigger(stub: trigger_stub_builder) }
|
13
29
|
|
14
30
|
end
|
15
31
|
|
16
32
|
shared_context "triggers many stubs" do
|
17
33
|
|
18
|
-
let(:trigger_stubs)
|
19
|
-
let(:
|
20
|
-
trigger_stubs.map { |stub| instance_double(
|
34
|
+
let(:trigger_stubs) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
|
35
|
+
let(:trigger_stub_builders) do
|
36
|
+
trigger_stubs.map { |stub| instance_double(described_class, build: stub) }
|
21
37
|
end
|
22
38
|
|
23
|
-
before(:example) { builder.trigger(
|
39
|
+
before(:example) { builder.trigger(stubs: trigger_stub_builders) }
|
24
40
|
|
25
41
|
end
|
26
42
|
|
@@ -30,9 +46,9 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
30
46
|
|
31
47
|
attr_reader :merged_stub_builders
|
32
48
|
|
33
|
-
def initialize(
|
49
|
+
def initialize(parent_builder=nil, &block)
|
34
50
|
@merged_stub_builders = []
|
35
|
-
super(
|
51
|
+
super(parent_builder, &block)
|
36
52
|
end
|
37
53
|
|
38
54
|
def merge!(stub_builder)
|
@@ -41,34 +57,56 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
41
57
|
|
42
58
|
end
|
43
59
|
|
44
|
-
context "when a
|
60
|
+
context "when a parent builder is provided" do
|
45
61
|
|
46
|
-
let(:
|
62
|
+
let(:parent_builder) { instance_double(described_class) }
|
47
63
|
|
48
|
-
let(:builder) { HttpStub::Configurer::DSL::StubBuilderWithObservedMerge.new(
|
64
|
+
let(:builder) { HttpStub::Configurer::DSL::StubBuilderWithObservedMerge.new(parent_builder) }
|
49
65
|
|
50
|
-
it "merges the
|
66
|
+
it "merges the parent builder" do
|
51
67
|
builder
|
52
68
|
|
53
|
-
expect(builder.merged_stub_builders).to eql([
|
69
|
+
expect(builder.merged_stub_builders).to eql([ parent_builder ])
|
54
70
|
end
|
55
71
|
|
56
72
|
end
|
57
73
|
|
58
|
-
|
74
|
+
context "when a block is provided" do
|
75
|
+
|
76
|
+
let(:block_verifier) { double("BlockVerifier", verify: nil) }
|
77
|
+
let(:block) { lambda { |builder| block_verifier.verify(builder) } }
|
78
|
+
|
79
|
+
let(:builder) { HttpStub::Configurer::DSL::StubBuilderWithObservedMerge.new(&block) }
|
59
80
|
|
60
|
-
|
81
|
+
it "creates a builder that is yielded to the provided block" do
|
82
|
+
expect(block_verifier).to receive(:verify).with(a_kind_of(described_class))
|
61
83
|
|
62
|
-
|
84
|
+
builder
|
85
|
+
end
|
86
|
+
|
87
|
+
it "does not merge any parent builders" do
|
88
|
+
builder
|
89
|
+
|
90
|
+
expect(builder.merged_stub_builders).to eql([])
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
context "when neither a parent builder or block is provided" do
|
96
|
+
|
97
|
+
let(:builder) { HttpStub::Configurer::DSL::StubBuilderWithObservedMerge.new(nil) }
|
98
|
+
|
99
|
+
it "does not merge any parent builder" do
|
100
|
+
builder
|
63
101
|
|
64
|
-
|
65
|
-
|
102
|
+
expect(builder.merged_stub_builders).to eql([])
|
103
|
+
end
|
66
104
|
|
67
|
-
expect(builder.merged_stub_builders).to eql([])
|
68
105
|
end
|
69
106
|
|
70
107
|
end
|
71
108
|
|
109
|
+
|
72
110
|
describe "#match_requests" do
|
73
111
|
|
74
112
|
let(:fixture) { HttpStub::StubFixture.new }
|
@@ -139,12 +177,70 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
139
177
|
|
140
178
|
describe "#trigger" do
|
141
179
|
|
142
|
-
|
180
|
+
let(:args) { {} }
|
181
|
+
|
182
|
+
subject { builder.trigger(args) }
|
143
183
|
|
144
184
|
it "returns the builder to support method chaining" do
|
145
185
|
expect(subject).to eql(builder)
|
146
186
|
end
|
147
187
|
|
188
|
+
context "when scenarios are provided" do
|
189
|
+
|
190
|
+
let(:scenarios) { (1..3).map { |i| "Scenario name #{i}" } }
|
191
|
+
|
192
|
+
let(:args) { { scenarios: scenarios } }
|
193
|
+
|
194
|
+
it "adds the scenarios" do
|
195
|
+
subject
|
196
|
+
|
197
|
+
expect(builder.triggers).to include(scenarios: scenarios)
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
context "when a scenario is provided" do
|
203
|
+
|
204
|
+
let(:scenario) { "Some scenario name" }
|
205
|
+
|
206
|
+
let(:args) { { scenario: scenario } }
|
207
|
+
|
208
|
+
it "adds the scenario" do
|
209
|
+
subject
|
210
|
+
|
211
|
+
expect(builder.triggers).to include(scenarios: [ scenario ])
|
212
|
+
end
|
213
|
+
|
214
|
+
end
|
215
|
+
|
216
|
+
context "when stubs are provided" do
|
217
|
+
|
218
|
+
let(:stubs) { (1..3).map { instance_double(described_class) } }
|
219
|
+
|
220
|
+
let(:args) { { stubs: stubs } }
|
221
|
+
|
222
|
+
it "adds the stubs" do
|
223
|
+
subject
|
224
|
+
|
225
|
+
expect(builder.triggers).to include(stubs: stubs)
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
context "when a stub is provided" do
|
231
|
+
|
232
|
+
let(:stub) { instance_double(described_class) }
|
233
|
+
|
234
|
+
let(:args) { { stub: stub } }
|
235
|
+
|
236
|
+
it "adds the stub" do
|
237
|
+
subject
|
238
|
+
|
239
|
+
expect(builder.triggers).to include(stubs: [ stub ])
|
240
|
+
end
|
241
|
+
|
242
|
+
end
|
243
|
+
|
148
244
|
end
|
149
245
|
|
150
246
|
describe "#invoke" do
|
@@ -181,10 +277,11 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
181
277
|
|
182
278
|
shared_context "a completely configured provided builder" do
|
183
279
|
|
184
|
-
let(:
|
280
|
+
let(:provided_trigger_scenarios) { (1..3).map { |i| "Triggered scenario #{i}" } }
|
281
|
+
let(:provided_trigger_stub_builders) { (1..3).map { instance_double(described_class) } }
|
185
282
|
|
186
283
|
let(:provided_builder) do
|
187
|
-
|
284
|
+
described_class.new.tap do |builder|
|
188
285
|
builder.match_requests(uri: "/replacement_uri", method: :put,
|
189
286
|
headers: { request_header_key: "replacement request header value",
|
190
287
|
other_request_header_key: "other request header value" },
|
@@ -195,7 +292,8 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
195
292
|
other_response_header_key: "other response header value" },
|
196
293
|
body: "replacement body value",
|
197
294
|
delay_in_seconds: 3)
|
198
|
-
builder.trigger(
|
295
|
+
builder.trigger(scenarios: provided_trigger_scenarios,
|
296
|
+
stubs: provided_trigger_stub_builders)
|
199
297
|
end
|
200
298
|
end
|
201
299
|
|
@@ -203,7 +301,8 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
203
301
|
|
204
302
|
context "when the builder has been completely configured" do
|
205
303
|
|
206
|
-
let(:
|
304
|
+
let(:original_trigger_scenarios) { (1..3).map { |i| "Original trigger scenario #{i}" } }
|
305
|
+
let(:original_trigger_stub_builders) { (1..3).map { instance_double(described_class) } }
|
207
306
|
|
208
307
|
before(:example) do
|
209
308
|
builder.match_requests(uri: "/original_uri", method: :get,
|
@@ -213,7 +312,8 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
213
312
|
headers: { response_header_key: "original response header value" },
|
214
313
|
body: "original body",
|
215
314
|
delay_in_seconds: 2)
|
216
|
-
builder.trigger(
|
315
|
+
builder.trigger(scenarios: original_trigger_scenarios,
|
316
|
+
stubs: original_trigger_stub_builders)
|
217
317
|
end
|
218
318
|
|
219
319
|
context "and a builder that is completely configured is provided" do
|
@@ -272,17 +372,23 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
272
372
|
expect(builder.response).to include(delay_in_seconds: 3)
|
273
373
|
end
|
274
374
|
|
275
|
-
it "adds to the
|
375
|
+
it "adds to the triggered scenarios" do
|
376
|
+
subject
|
377
|
+
|
378
|
+
expect(builder.triggers).to include(scenarios: original_trigger_scenarios + provided_trigger_scenarios)
|
379
|
+
end
|
380
|
+
|
381
|
+
it "adds to the triggered stubs" do
|
276
382
|
subject
|
277
383
|
|
278
|
-
expect(builder.triggers).to
|
384
|
+
expect(builder.triggers).to include(stubs: original_trigger_stub_builders + provided_trigger_stub_builders)
|
279
385
|
end
|
280
386
|
|
281
387
|
end
|
282
388
|
|
283
389
|
context "and a builder that is empty is provided" do
|
284
390
|
|
285
|
-
let(:provided_builder) {
|
391
|
+
let(:provided_builder) { described_class.new }
|
286
392
|
|
287
393
|
it "preserves the uri" do
|
288
394
|
subject
|
@@ -332,10 +438,16 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
332
438
|
expect(builder.response).to include(delay_in_seconds: 2)
|
333
439
|
end
|
334
440
|
|
335
|
-
it "preserves the
|
441
|
+
it "preserves the triggered scenarios" do
|
442
|
+
subject
|
443
|
+
|
444
|
+
expect(builder.triggers).to include(scenarios: original_trigger_scenarios)
|
445
|
+
end
|
446
|
+
|
447
|
+
it "preserves the triggered stubs" do
|
336
448
|
subject
|
337
449
|
|
338
|
-
expect(builder.triggers).to
|
450
|
+
expect(builder.triggers).to include(stubs: original_trigger_stub_builders)
|
339
451
|
end
|
340
452
|
|
341
453
|
end
|
@@ -398,10 +510,16 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
398
510
|
expect(builder.response).to include(delay_in_seconds: 3)
|
399
511
|
end
|
400
512
|
|
401
|
-
it "assumes the provided
|
513
|
+
it "assumes the provided triggered scenarios" do
|
402
514
|
subject
|
403
515
|
|
404
|
-
expect(builder.triggers).to
|
516
|
+
expect(builder.triggers).to include(scenarios: provided_trigger_scenarios)
|
517
|
+
end
|
518
|
+
|
519
|
+
it "assumes the provided triggered stubs" do
|
520
|
+
subject
|
521
|
+
|
522
|
+
expect(builder.triggers).to include(stubs: provided_trigger_stub_builders)
|
405
523
|
end
|
406
524
|
|
407
525
|
end
|
@@ -411,7 +529,7 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
411
529
|
describe "#build" do
|
412
530
|
|
413
531
|
let(:fixture) { HttpStub::StubFixture.new }
|
414
|
-
let(:triggers) { [] }
|
532
|
+
let(:triggers) { { scenarios: [], stubs: [] } }
|
415
533
|
let(:stub) { instance_double(HttpStub::Configurer::Request::Stub) }
|
416
534
|
|
417
535
|
subject do
|
@@ -440,22 +558,44 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
440
558
|
|
441
559
|
describe "creates a stub payload with triggers that" do
|
442
560
|
|
443
|
-
context "when a trigger is added" do
|
561
|
+
context "when a scenario trigger is added" do
|
562
|
+
include_context "triggers one scenario"
|
563
|
+
|
564
|
+
it "contains the provided trigger scenario name" do
|
565
|
+
expect_stub_to_be_created_with_triggers(scenario_names: [ trigger_scenario ])
|
566
|
+
|
567
|
+
subject
|
568
|
+
end
|
569
|
+
|
570
|
+
end
|
571
|
+
|
572
|
+
context "when many scenario triggers are added" do
|
573
|
+
include_context "triggers many scenarios"
|
574
|
+
|
575
|
+
it "contains the provided trigger scenario names" do
|
576
|
+
expect_stub_to_be_created_with_triggers(scenario_names: trigger_scenarios)
|
577
|
+
|
578
|
+
subject
|
579
|
+
end
|
580
|
+
|
581
|
+
end
|
582
|
+
|
583
|
+
context "when a stub trigger is added" do
|
444
584
|
include_context "triggers one stub"
|
445
585
|
|
446
|
-
it "
|
447
|
-
|
586
|
+
it "contains the provided trigger builder" do
|
587
|
+
expect_stub_to_be_created_with_triggers(stubs: [ trigger_stub ])
|
448
588
|
|
449
589
|
subject
|
450
590
|
end
|
451
591
|
|
452
592
|
end
|
453
593
|
|
454
|
-
context "when many triggers are added" do
|
594
|
+
context "when many stub triggers are added" do
|
455
595
|
include_context "triggers many stubs"
|
456
596
|
|
457
|
-
it "
|
458
|
-
|
597
|
+
it "contains the provided trigger builders" do
|
598
|
+
expect_stub_to_be_created_with_triggers(stubs: trigger_stubs)
|
459
599
|
|
460
600
|
subject
|
461
601
|
end
|
@@ -485,12 +625,17 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
485
625
|
delay_in_seconds: 8
|
486
626
|
}
|
487
627
|
end
|
488
|
-
let(:
|
628
|
+
let(:trigger_scenario_defaults) { (1..3).map { |i| "Default trigger scenario #{i}" } }
|
629
|
+
let(:trigger_stub_defaults) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
|
630
|
+
let(:trigger_stub_builder_defaults) do
|
631
|
+
trigger_stub_defaults.map { |stub| instance_double(described_class, build: stub) }
|
632
|
+
end
|
489
633
|
|
490
634
|
let(:default_builder) do
|
491
|
-
instance_double(
|
492
|
-
|
493
|
-
|
635
|
+
instance_double(described_class, request: request_defaults,
|
636
|
+
response: response_defaults,
|
637
|
+
triggers: { scenarios: trigger_scenario_defaults,
|
638
|
+
stubs: trigger_stub_builder_defaults })
|
494
639
|
end
|
495
640
|
|
496
641
|
describe "the built request payload" do
|
@@ -557,12 +702,24 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
557
702
|
|
558
703
|
end
|
559
704
|
|
560
|
-
describe "the built
|
705
|
+
describe "the built triggers payload" do
|
706
|
+
|
707
|
+
let(:trigger_scenarios) { (1..3).map { |i| "Trigger scenario #{i}" } }
|
708
|
+
let(:trigger_stubs) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
|
709
|
+
let(:trigger_stub_builders) do
|
710
|
+
trigger_stubs.map { |stub| instance_double(described_class, build: stub) }
|
711
|
+
end
|
712
|
+
|
713
|
+
let(:triggers) { { scenarios: trigger_scenarios, stubs: trigger_stub_builders } }
|
714
|
+
|
715
|
+
it "combines any scenario defaults with values established in the stub" do
|
716
|
+
expect_stub_to_be_created_with_triggers(scenario_names: trigger_scenario_defaults + trigger_scenarios)
|
561
717
|
|
562
|
-
|
718
|
+
subject
|
719
|
+
end
|
563
720
|
|
564
|
-
it "combines any defaults with values
|
565
|
-
|
721
|
+
it "combines any stub defaults with values established in the stub" do
|
722
|
+
expect_stub_to_be_created_with_triggers(stubs: trigger_stub_defaults + trigger_stubs)
|
566
723
|
|
567
724
|
subject
|
568
725
|
end
|
@@ -581,6 +738,10 @@ describe HttpStub::Configurer::DSL::StubBuilder do
|
|
581
738
|
expect(HttpStub::Configurer::Request::Stub).to receive(:new).with(hash_including(args))
|
582
739
|
end
|
583
740
|
|
741
|
+
def expect_stub_to_be_created_with_triggers(args)
|
742
|
+
expect_stub_to_be_created_with(triggers: hash_including(args))
|
743
|
+
end
|
744
|
+
|
584
745
|
end
|
585
746
|
|
586
747
|
end
|
@@ -0,0 +1,203 @@
|
|
1
|
+
describe HttpStub::Configurer::DSL::StubBuilderTemplate do
|
2
|
+
|
3
|
+
let(:parent_uri) { "/some/parent/uri" }
|
4
|
+
let(:parent_template) do
|
5
|
+
described_class.new.tap do |template|
|
6
|
+
template.match_requests(uri: parent_uri)
|
7
|
+
template.respond_with(body: "parent template body")
|
8
|
+
end
|
9
|
+
end
|
10
|
+
let(:initial_request_method) { :put }
|
11
|
+
let(:initial_block) { lambda { |stub| stub.match_requests(method: initial_request_method) } }
|
12
|
+
|
13
|
+
let(:stub_builder_template) { described_class.new }
|
14
|
+
|
15
|
+
shared_context "mocked stub builder" do
|
16
|
+
|
17
|
+
let(:stub_builder) { instance_double(HttpStub::Configurer::DSL::StubBuilder) }
|
18
|
+
|
19
|
+
before(:example) { allow(HttpStub::Configurer::DSL::StubBuilder).to receive(:new).and_return(stub_builder) }
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
it "creates a stub builder to hold values established on the template" do
|
24
|
+
allow(HttpStub::Configurer::DSL::StubBuilder).to receive(:new)
|
25
|
+
|
26
|
+
stub_builder_template
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#match_requests" do
|
30
|
+
include_context "mocked stub builder"
|
31
|
+
|
32
|
+
let(:request_matching_rules) { { uri: "/some/stub/uri", method: :get } }
|
33
|
+
|
34
|
+
subject { stub_builder_template.match_requests(request_matching_rules) }
|
35
|
+
|
36
|
+
it "delegates to the templates stub builder" do
|
37
|
+
expect(stub_builder).to receive(:match_requests).with(request_matching_rules)
|
38
|
+
|
39
|
+
subject
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "#schema" do
|
45
|
+
include_context "mocked stub builder"
|
46
|
+
|
47
|
+
let(:type) { :some_schema_type }
|
48
|
+
let(:definition) { "some schema definition" }
|
49
|
+
|
50
|
+
subject { stub_builder_template.schema(type, definition) }
|
51
|
+
|
52
|
+
it "delegates to the templates stub builder" do
|
53
|
+
expect(stub_builder).to receive(:schema).with(type, definition)
|
54
|
+
|
55
|
+
subject
|
56
|
+
end
|
57
|
+
|
58
|
+
it "returns the created schema" do
|
59
|
+
schema = { schema: :some_schema }
|
60
|
+
expect(stub_builder).to receive(:schema).and_return(schema)
|
61
|
+
|
62
|
+
expect(subject).to eql(schema)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#respond_with" do
|
68
|
+
include_context "mocked stub builder"
|
69
|
+
|
70
|
+
let(:response_settings) { { status: 204 } }
|
71
|
+
|
72
|
+
subject { stub_builder_template.respond_with(response_settings) }
|
73
|
+
|
74
|
+
it "delegates to the templates stub builder" do
|
75
|
+
expect(stub_builder).to receive(:respond_with).with(response_settings)
|
76
|
+
|
77
|
+
subject
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
describe "#trigger" do
|
83
|
+
include_context "mocked stub builder"
|
84
|
+
|
85
|
+
let(:trigger_settings) { { scenario: "some scenario name" } }
|
86
|
+
|
87
|
+
subject { stub_builder_template.trigger(trigger_settings) }
|
88
|
+
|
89
|
+
it "delegates to the templates stub builder" do
|
90
|
+
expect(stub_builder).to receive(:trigger).with(trigger_settings)
|
91
|
+
|
92
|
+
subject
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#invoke" do
|
98
|
+
include_context "mocked stub builder"
|
99
|
+
|
100
|
+
let(:block_verifier) { double("BlockVerifier") }
|
101
|
+
let(:block) do
|
102
|
+
lambda do |stub|
|
103
|
+
@yielded_stub = stub
|
104
|
+
block_verifier.verify
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
let(:stub_builder) { HttpStub::Configurer::DSL::StubBuilder.new }
|
109
|
+
|
110
|
+
subject { stub_builder_template.invoke(&block) }
|
111
|
+
|
112
|
+
it "invokes the block with the templates stub builder" do
|
113
|
+
expect(block_verifier).to receive(:verify)
|
114
|
+
|
115
|
+
subject
|
116
|
+
|
117
|
+
expect(@yielded_stub).to eql(stub_builder)
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
describe "#build_stub" do
|
123
|
+
|
124
|
+
let(:stub_builder_template) { described_class.new(parent_template) }
|
125
|
+
let(:response_overrides) { { status: 201, body: "response overrides body" } }
|
126
|
+
let(:block) do
|
127
|
+
lambda do |stub|
|
128
|
+
stub.match_requests(uri: "/some/block/uri")
|
129
|
+
stub.respond_with(body: "block body")
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
let(:stub_builder_template) { described_class.new(parent_template) }
|
134
|
+
|
135
|
+
subject { stub_builder_template.build_stub }
|
136
|
+
|
137
|
+
context "when a parent template had been provided" do
|
138
|
+
|
139
|
+
it "creates a stub capable of containing values established in the parent template" do
|
140
|
+
expect(subject.request[:uri]).to eql(parent_uri)
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
|
145
|
+
context "when an initial block had been provided" do
|
146
|
+
|
147
|
+
let(:stub_builder_template) { described_class.new(&initial_block) }
|
148
|
+
|
149
|
+
it "creates a stub capable of containing values established in the initial block" do
|
150
|
+
expect(subject.request[:method]).to eql(initial_request_method)
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
context "when response overrides are provided upon building the stub" do
|
156
|
+
|
157
|
+
subject { stub_builder_template.build_stub(response_overrides) }
|
158
|
+
|
159
|
+
it "creates a stub containing the overrides" do
|
160
|
+
expect(subject.response[:status]).to eql(201)
|
161
|
+
end
|
162
|
+
|
163
|
+
it "overrides any values initially established" do
|
164
|
+
expect(subject.response[:body]).to eql("response overrides body")
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
context "when a block is provided upon building the stub" do
|
170
|
+
|
171
|
+
subject { stub_builder_template.build_stub(&block) }
|
172
|
+
|
173
|
+
it "creates a stub that is modified by the block" do
|
174
|
+
expect(subject.request[:uri]).to eql("/some/block/uri")
|
175
|
+
end
|
176
|
+
|
177
|
+
it "overrides any values initially established" do
|
178
|
+
expect(subject.response[:body]).to eql("block body")
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
context "when both response overrides and a block are provided" do
|
184
|
+
|
185
|
+
subject { stub_builder_template.build_stub(response_overrides, &block) }
|
186
|
+
|
187
|
+
it "creates a stub containing response overrides" do
|
188
|
+
expect(subject.response[:status]).to eql(201)
|
189
|
+
end
|
190
|
+
|
191
|
+
it "creates a stub that is modified by the block" do
|
192
|
+
expect(subject.request[:uri]).to eql("/some/block/uri")
|
193
|
+
end
|
194
|
+
|
195
|
+
it "creates a stub with values established in the block taking precedence over response overrides" do
|
196
|
+
expect(subject.response[:body]).to eql("block body")
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|