http_stub 0.25.1 → 0.26.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (187) hide show
  1. checksums.yaml +4 -4
  2. data/lib/http_stub.rb +32 -9
  3. data/lib/http_stub/configurer.rb +2 -10
  4. data/lib/http_stub/configurer/dsl/scenario_builder.rb +13 -11
  5. data/lib/http_stub/configurer/dsl/server.rb +32 -43
  6. data/lib/http_stub/configurer/dsl/server_endpoint_template.rb +23 -0
  7. data/lib/http_stub/configurer/dsl/session.rb +55 -0
  8. data/lib/http_stub/configurer/dsl/session_endpoint_template.rb +22 -0
  9. data/lib/http_stub/configurer/dsl/session_factory.rb +34 -0
  10. data/lib/http_stub/configurer/dsl/stub_builder.rb +18 -8
  11. data/lib/http_stub/configurer/dsl/stub_builder_template.rb +26 -0
  12. data/lib/http_stub/configurer/request/http/basic.rb +9 -3
  13. data/lib/http_stub/configurer/request/http/factory.rb +7 -16
  14. data/lib/http_stub/configurer/request/http/multipart.rb +5 -7
  15. data/lib/http_stub/configurer/request/stub.rb +3 -3
  16. data/lib/http_stub/configurer/request/triggers.rb +25 -0
  17. data/lib/http_stub/configurer/server/command_processor.rb +8 -10
  18. data/lib/http_stub/configurer/server/configuration.rb +33 -0
  19. data/lib/http_stub/configurer/server/facade.rb +21 -43
  20. data/lib/http_stub/configurer/server/request_processor.rb +2 -2
  21. data/lib/http_stub/configurer/server/session_facade.rb +64 -0
  22. data/lib/http_stub/extensions/core/uri.rb +28 -0
  23. data/lib/http_stub/extensions/rack/handler.rb +1 -0
  24. data/lib/http_stub/extensions/sinatra/namespace.rb +9 -0
  25. data/lib/http_stub/rake/server_tasks.rb +1 -4
  26. data/lib/http_stub/server/application/application.rb +17 -98
  27. data/lib/http_stub/server/application/configuration.rb +38 -0
  28. data/lib/http_stub/server/application/cross_origin_support.rb +7 -5
  29. data/lib/http_stub/server/application/request_support.rb +38 -0
  30. data/lib/http_stub/server/application/response_support.rb +19 -0
  31. data/lib/http_stub/server/application/routes/memory.rb +37 -0
  32. data/lib/http_stub/server/application/routes/resource.rb +23 -0
  33. data/lib/http_stub/server/application/routes/scenario.rb +52 -0
  34. data/lib/http_stub/server/application/routes/session.rb +65 -0
  35. data/lib/http_stub/server/application/routes/stub.rb +75 -0
  36. data/lib/http_stub/server/application/session_uri_support.rb +15 -0
  37. data/lib/http_stub/server/memory/controller.rb +25 -0
  38. data/lib/http_stub/server/memory/memory.rb +32 -0
  39. data/lib/http_stub/server/registry.rb +25 -8
  40. data/lib/http_stub/server/request/factory.rb +23 -0
  41. data/lib/http_stub/server/request/parameters.rb +2 -2
  42. data/lib/http_stub/server/request/request.rb +6 -11
  43. data/lib/http_stub/server/request/sinatra_request.rb +26 -0
  44. data/lib/http_stub/server/scenario/controller.rb +16 -11
  45. data/lib/http_stub/server/scenario/not_found_error.rb +15 -0
  46. data/lib/http_stub/server/session.rb +14 -0
  47. data/lib/http_stub/server/session/configuration.rb +32 -0
  48. data/lib/http_stub/server/session/controller.rb +40 -0
  49. data/lib/http_stub/server/session/empty.rb +15 -0
  50. data/lib/http_stub/server/session/identifier_strategy.rb +24 -0
  51. data/lib/http_stub/server/session/registry.rb +38 -0
  52. data/lib/http_stub/server/session/session.rb +80 -0
  53. data/lib/http_stub/server/stub/controller.rb +18 -12
  54. data/lib/http_stub/server/stub/empty.rb +1 -1
  55. data/lib/http_stub/server/stub/match/controller.rb +9 -5
  56. data/lib/http_stub/server/stub/payload/response_body_modifier.rb +3 -1
  57. data/lib/http_stub/server/stub/registry.rb +6 -13
  58. data/lib/http_stub/server/stub/triggers.rb +11 -9
  59. data/lib/http_stub/server/views/_home.haml +2 -0
  60. data/lib/http_stub/server/views/_post_link_function.haml +26 -0
  61. data/lib/http_stub/server/views/_session.haml +16 -0
  62. data/lib/http_stub/server/views/_stub.haml +8 -2
  63. data/lib/http_stub/server/views/_stubs.haml +4 -0
  64. data/lib/http_stub/server/views/application.sass +4 -1
  65. data/lib/http_stub/server/views/layout.haml +1 -0
  66. data/lib/http_stub/server/views/scenario.haml +4 -3
  67. data/lib/http_stub/server/views/scenarios.haml +7 -6
  68. data/lib/http_stub/server/views/session.haml +3 -0
  69. data/lib/http_stub/server/views/sessions.haml +6 -0
  70. data/lib/http_stub/server/views/stubs.haml +1 -4
  71. data/lib/http_stub/server/views/transactional_session.haml +2 -0
  72. data/lib/http_stub/version.rb +1 -1
  73. data/spec/acceptance/configurer_initialization_spec.rb +40 -51
  74. data/spec/acceptance/configurer_part_spec.rb +5 -7
  75. data/spec/acceptance/cross_origin_support_spec.rb +7 -13
  76. data/spec/acceptance/endpoint_template_spec.rb +2 -4
  77. data/spec/acceptance/request_reference_spec.rb +1 -3
  78. data/spec/acceptance/scenario_spec.rb +7 -9
  79. data/spec/acceptance/server_defaults_spec.rb +2 -4
  80. data/spec/acceptance/server_memory_spec.rb +20 -0
  81. data/spec/acceptance/session_spec.rb +125 -0
  82. data/spec/acceptance/stub_body_request_matching_spec.rb +2 -4
  83. data/spec/acceptance/stub_control_values_spec.rb +19 -18
  84. data/spec/acceptance/stub_match_last_spec.rb +0 -4
  85. data/spec/acceptance/stub_match_list_spec.rb +0 -4
  86. data/spec/acceptance/stub_miss_list_spec.rb +0 -4
  87. data/spec/acceptance/stub_spec.rb +11 -11
  88. data/spec/acceptance/stub_trigger_spec.rb +60 -13
  89. data/spec/lib/http_stub/configurer/dsl/scenario_builder_spec.rb +83 -30
  90. data/spec/lib/http_stub/configurer/dsl/server_endpoint_template_spec.rb +167 -0
  91. data/spec/lib/http_stub/configurer/dsl/server_spec.rb +306 -176
  92. data/spec/lib/http_stub/configurer/dsl/session_endpoint_template_spec.rb +150 -0
  93. data/spec/lib/http_stub/configurer/dsl/session_factory_spec.rb +97 -0
  94. data/spec/lib/http_stub/configurer/dsl/session_spec.rb +222 -0
  95. data/spec/lib/http_stub/configurer/dsl/stub_builder_spec.rb +209 -48
  96. data/spec/lib/http_stub/configurer/dsl/stub_builder_template_spec.rb +203 -0
  97. data/spec/lib/http_stub/configurer/request/http/basic_spec.rb +80 -4
  98. data/spec/lib/http_stub/configurer/request/http/factory_spec.rb +115 -56
  99. data/spec/lib/http_stub/configurer/request/http/multipart_spec.rb +39 -6
  100. data/spec/lib/http_stub/configurer/request/stub_spec.rb +50 -108
  101. data/spec/lib/http_stub/configurer/request/triggers_spec.rb +101 -0
  102. data/spec/lib/http_stub/configurer/server/command_processor_integration_spec.rb +11 -10
  103. data/spec/lib/http_stub/configurer/server/configuration_spec.rb +139 -0
  104. data/spec/lib/http_stub/configurer/server/facade_spec.rb +65 -142
  105. data/spec/lib/http_stub/configurer/server/request_processor_spec.rb +7 -6
  106. data/spec/lib/http_stub/configurer/server/session_facade_spec.rb +336 -0
  107. data/spec/lib/http_stub/configurer_spec.rb +105 -0
  108. data/spec/lib/http_stub/extensions/core/uri_spec.rb +75 -0
  109. data/spec/lib/http_stub/extensions/rack/handler_spec.rb +1 -1
  110. data/spec/lib/http_stub/extensions/sinatra/namespace_spec.rb +36 -0
  111. data/spec/lib/http_stub/rake/server_tasks_smoke_spec.rb +4 -3
  112. data/spec/lib/http_stub/rake/server_tasks_spec.rb +47 -10
  113. data/spec/lib/http_stub/server/application/application_spec.rb +44 -301
  114. data/spec/lib/http_stub/server/application/configuration_spec.rb +59 -0
  115. data/spec/lib/http_stub/server/application/cross_origin_support_spec.rb +23 -20
  116. data/spec/lib/http_stub/server/application/request_support_integration_spec.rb +93 -0
  117. data/spec/lib/http_stub/server/application/request_support_spec.rb +61 -0
  118. data/spec/lib/http_stub/server/application/response_support_spec.rb +30 -0
  119. data/spec/lib/http_stub/server/application/routes/memory_spec.rb +41 -0
  120. data/spec/lib/http_stub/server/application/routes/resource_spec.rb +16 -0
  121. data/spec/lib/http_stub/server/application/routes/scenario_spec.rb +117 -0
  122. data/spec/lib/http_stub/server/application/routes/session_integration_spec.rb +46 -0
  123. data/spec/lib/http_stub/server/application/routes/session_spec.rb +186 -0
  124. data/spec/lib/http_stub/server/application/{application_integration_spec.rb → routes/stub_integration_spec.rb} +16 -38
  125. data/spec/lib/http_stub/server/application/routes/stub_spec.rb +202 -0
  126. data/spec/lib/http_stub/server/application/session_uri_support_spec.rb +48 -0
  127. data/spec/lib/http_stub/server/application/text_formatting_support_spec.rb +3 -3
  128. data/spec/lib/http_stub/server/memory/controller_spec.rb +47 -0
  129. data/spec/lib/http_stub/server/memory/memory_spec.rb +122 -0
  130. data/spec/lib/http_stub/server/registry_spec.rb +153 -34
  131. data/spec/lib/http_stub/server/request/factory_spec.rb +74 -0
  132. data/spec/lib/http_stub/server/request/parameters_spec.rb +5 -8
  133. data/spec/lib/http_stub/server/request/request_spec.rb +52 -52
  134. data/spec/lib/http_stub/server/request/sinatra_request_spec.rb +132 -0
  135. data/spec/lib/http_stub/server/scenario/controller_spec.rb +121 -35
  136. data/spec/lib/http_stub/server/scenario/not_found_error_spec.rb +25 -0
  137. data/spec/lib/http_stub/server/session/configuration_spec.rb +94 -0
  138. data/spec/lib/http_stub/server/session/controller_spec.rb +106 -0
  139. data/spec/lib/http_stub/server/session/empty_spec.rb +13 -0
  140. data/spec/lib/http_stub/server/session/identifier_strategy_spec.rb +126 -0
  141. data/spec/lib/http_stub/server/session/registry_spec.rb +214 -0
  142. data/spec/lib/http_stub/server/session/session_spec.rb +444 -0
  143. data/spec/lib/http_stub/server/stub/controller_spec.rb +89 -37
  144. data/spec/lib/http_stub/server/stub/empty_spec.rb +2 -2
  145. data/spec/lib/http_stub/server/stub/match/controller_spec.rb +59 -16
  146. data/spec/lib/http_stub/server/stub/payload/response_body_modifier_spec.rb +7 -8
  147. data/spec/lib/http_stub/server/stub/registry_integration_spec.rb +42 -15
  148. data/spec/lib/http_stub/server/stub/registry_spec.rb +38 -59
  149. data/spec/lib/http_stub/server/stub/triggers_spec.rb +93 -34
  150. data/spec/spec_helper.rb +13 -1
  151. data/spec/support/contain_file.rb +23 -0
  152. data/spec/support/cross_origin_server/application.rb +1 -1
  153. data/spec/support/cross_origin_server/index_page.rb +2 -2
  154. data/spec/support/cross_origin_server/integration.rb +3 -2
  155. data/spec/support/cross_origin_server/public/index.html +2 -1
  156. data/spec/support/http_stub/configurer_integration.rb +12 -14
  157. data/spec/support/http_stub/server/application/http_stub_rack_application_test.rb +47 -0
  158. data/spec/support/http_stub/server/driver.rb +56 -0
  159. data/spec/support/http_stub/server/memory_fixture.rb +17 -0
  160. data/spec/support/http_stub/server/request_fixture.rb +7 -6
  161. data/spec/support/http_stub/server/scenario_fixture.rb +13 -0
  162. data/spec/support/http_stub/server/session_fixture.rb +27 -0
  163. data/spec/support/http_stub/server_integration.rb +12 -17
  164. data/spec/support/http_stub/stub_fixture.rb +19 -6
  165. data/spec/support/include_in_json.rb +4 -4
  166. data/spec/support/rack/rack_application_test.rb +9 -0
  167. data/spec/support/rack/request_fixture.rb +13 -0
  168. data/spec/support/surpressed_output.rb +10 -0
  169. metadata +149 -36
  170. data/lib/http_stub/configurer/dsl/deprecated.rb +0 -60
  171. data/lib/http_stub/configurer/dsl/endpoint_template.rb +0 -38
  172. data/lib/http_stub/configurer/dsl/scenario_activator.rb +0 -15
  173. data/lib/http_stub/configurer/dsl/stub_activator_builder.rb +0 -24
  174. data/lib/http_stub/configurer/dsl/stub_builder_producer.rb +0 -21
  175. data/lib/http_stub/server/request.rb +0 -12
  176. data/lib/http_stub/server/scenario/activator.rb +0 -25
  177. data/lib/http_stub/server/views/_activate_scenario.haml +0 -23
  178. data/lib/http_stub/server/views/index.haml +0 -8
  179. data/spec/acceptance/activator_spec.rb +0 -81
  180. data/spec/lib/http_stub/configurer/dsl/deprecated_spec.rb +0 -240
  181. data/spec/lib/http_stub/configurer/dsl/endpoint_template_spec.rb +0 -255
  182. data/spec/lib/http_stub/configurer/dsl/scenario_activator_spec.rb +0 -62
  183. data/spec/lib/http_stub/configurer/dsl/stub_activator_builder_spec.rb +0 -120
  184. data/spec/lib/http_stub/configurer/dsl/stub_builder_producer_spec.rb +0 -85
  185. data/spec/lib/http_stub/server/request_spec.rb +0 -24
  186. data/spec/lib/http_stub/server/scenario/activator_spec.rb +0 -111
  187. data/spec/support/http_stub/server/scenario/scenario_fixture.rb +0 -15
@@ -1,11 +1,9 @@
1
1
  describe "Scenario acceptance" do
2
- include_context "configurer integration"
3
2
 
4
3
  context "when a configurer that contains a stub matching a request body" do
4
+ include_context "configurer integration"
5
5
 
6
- let(:configurer) { HttpStub::Examples::ConfigurerWithStubRequestBody.new }
7
-
8
- before(:example) { configurer.class.initialize! }
6
+ let(:configurer_specification) { { class: HttpStub::Examples::ConfigurerWithStubRequestBody } }
9
7
 
10
8
  context "against an exact match" do
11
9
 
@@ -1,16 +1,17 @@
1
1
  describe "Stub control value acceptance" do
2
2
  include_context "configurer integration"
3
3
 
4
- let(:configurer) { HttpStub::Examples::ConfigurerWithTrivialStub.new }
5
-
6
- before(:example) { configurer.class.initialize! }
4
+ let(:configurer_specification) { { class: HttpStub::Examples::ConfigurerWithTrivialStub } }
7
5
 
8
6
  context "when a stub is submitted" do
9
7
 
10
8
  context "with a stub uri that is regular expression containing meta characters" do
11
9
 
12
10
  before(:example) do
13
- configurer.stub_response!(/\/stub\/regexp\/\$key=value/, method: :get, response: { body: "Stub body" })
11
+ stub_server.add_stub! do |stub|
12
+ stub.match_requests(uri: /\/stub\/regexp\/\$key=value/, method: :get)
13
+ stub.respond_with(body: "Stub body")
14
+ end
14
15
  end
15
16
 
16
17
  context "and a request is made whose uri matches the regular expression" do
@@ -38,10 +39,10 @@ describe "Stub control value acceptance" do
38
39
  context "with headers whose values are regular expressions" do
39
40
 
40
41
  before(:example) do
41
- configurer.stub_response!(
42
- "/stub_with_headers", method: :get, headers: { key: /^match.*/ },
43
- response: { status: 202, body: "Another stub body" }
44
- )
42
+ stub_server.add_stub! do |stub|
43
+ stub.match_requests(uri: "/stub_with_headers", method: :get, headers: { key: /^match.*/ })
44
+ stub.respond_with(status: 202, body: "Another stub body")
45
+ end
45
46
  end
46
47
 
47
48
  context "and a request that matches is made" do
@@ -76,10 +77,10 @@ describe "Stub control value acceptance" do
76
77
  context "whose values are regular expressions" do
77
78
 
78
79
  before(:example) do
79
- configurer.stub_response!(
80
- "/stub_with_parameters", method: :get, parameters: { key: /^match.*/ },
81
- response: { status: 202, body: "Another stub body" }
82
- )
80
+ stub_server.add_stub! do |stub|
81
+ stub.match_requests(uri: "/stub_with_parameters", method: :get, parameters: { key: /^match.*/ })
82
+ stub.respond_with(status: 202, body: "Another stub body")
83
+ end
83
84
  end
84
85
 
85
86
  context "and a request that matches is made" do
@@ -110,10 +111,10 @@ describe "Stub control value acceptance" do
110
111
  context "whose values indicate the parameters must be omitted" do
111
112
 
112
113
  before(:example) do
113
- configurer.stub_response!(
114
- "/stub_with_omitted_parameters", method: :get, parameters: { key: :omitted },
115
- response: { status: 202, body: "Omitted parameter stub body" }
116
- )
114
+ stub_server.add_stub! do |stub|
115
+ stub.match_requests(uri: "/stub_with_omitted_parameters", method: :get, parameters: { key: :omitted })
116
+ stub.respond_with(status: 202, body: "Omitted parameter stub body")
117
+ end
117
118
  end
118
119
 
119
120
  context "and a request that matches is made" do
@@ -145,7 +146,7 @@ describe "Stub control value acceptance" do
145
146
  context "with a response delay" do
146
147
 
147
148
  before(:example) do
148
- configurer.stub_response!("/some_stub_path", method: :get, response: { delay_in_seconds: 2 })
149
+ stub_server.add_stub! { match_requests(uri: "/some_stub_path", method: :get).respond_with(delay_in_seconds: 1) }
149
150
  end
150
151
 
151
152
  it "delays the response by the time provided" do
@@ -153,7 +154,7 @@ describe "Stub control value acceptance" do
153
154
 
154
155
  response = HTTParty.get("#{server_uri}/some_stub_path")
155
156
 
156
- expect(Time.now - start_time).to be >= 2.0
157
+ expect(Time.now - start_time).to be >= 1.0
157
158
  end
158
159
 
159
160
  end
@@ -1,10 +1,6 @@
1
1
  describe "Stub matches last acceptance" do
2
2
  include_context "configurer integration"
3
3
 
4
- before(:example) { configurer.initialize! }
5
-
6
- after(:example) { configurer.clear_stubs! }
7
-
8
4
  describe "GET /http_stub/stubs/matches/last" do
9
5
 
10
6
  let(:request_uri) { stub_registrator.request_uri }
@@ -1,10 +1,6 @@
1
1
  describe "Stub match list acceptance" do
2
2
  include_context "configurer integration"
3
3
 
4
- before(:example) { configurer.initialize! }
5
-
6
- after(:example) { configurer.clear_stubs! }
7
-
8
4
  describe "GET /http_stub/stubs/matches" do
9
5
 
10
6
  let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs/matches") }
@@ -1,10 +1,6 @@
1
1
  describe "Stub miss list acceptance" do
2
2
  include_context "configurer integration"
3
3
 
4
- before(:example) { configurer.initialize! }
5
-
6
- after(:example) { configurer.clear_stubs! }
7
-
8
4
  describe "GET /http_stub/stubs/misses" do
9
5
 
10
6
  let(:response) { HTTParty.get("#{server_uri}/http_stub/stubs/misses") }
@@ -1,10 +1,6 @@
1
1
  describe "Stub basics acceptance" do
2
2
  include_context "configurer integration"
3
3
 
4
- let(:configurer) { HttpStub::Examples::ConfigurerWithTrivialStub.new }
5
-
6
- before(:example) { configurer.class.initialize! }
7
-
8
4
  context "when a stub is submitted" do
9
5
 
10
6
  context "that contains no request headers or parameters" do
@@ -12,8 +8,9 @@ describe "Stub basics acceptance" do
12
8
  context "and it contains a response status" do
13
9
 
14
10
  before(:example) do
15
- stub_server.add_stub! do
16
- match_requests(uri: "/stub_with_status", method: :get).respond_with(status: 201, body: "Stub body")
11
+ stub_server.add_stub! do |stub|
12
+ stub.match_requests(uri: "/stub_with_status", method: :get)
13
+ stub.respond_with(status: 201, body: "Stub body")
17
14
  end
18
15
  end
19
16
 
@@ -33,7 +30,7 @@ describe "Stub basics acceptance" do
33
30
 
34
31
  context "and stubs are cleared" do
35
32
 
36
- before(:example) { configurer.clear_stubs! }
33
+ before(:example) { stub_server.clear_stubs! }
37
34
 
38
35
  context "and a matching request is made" do
39
36
 
@@ -52,7 +49,10 @@ describe "Stub basics acceptance" do
52
49
  context "and it does not contain a response status" do
53
50
 
54
51
  before(:example) do
55
- stub_server.add_stub! { match_requests(uri: "/stub_without_status", method: :get).respond_with(body: "Stub body") }
52
+ stub_server.add_stub! do |stub|
53
+ stub.match_requests(uri: "/stub_without_status", method: :get)
54
+ stub.respond_with(body: "Stub body")
55
+ end
56
56
  end
57
57
 
58
58
  context "and a matching request is made" do
@@ -233,7 +233,7 @@ describe "Stub basics acceptance" do
233
233
 
234
234
  context "that contains a response body that is a file" do
235
235
 
236
- let(:configurer) { HttpStub::Examples::ConfigurerWithFileResponses.new }
236
+ let(:configurer_specification) { { class: HttpStub::Examples::ConfigurerWithFileResponses } }
237
237
 
238
238
  context "and a request that matches is made" do
239
239
 
@@ -250,7 +250,7 @@ describe "Stub basics acceptance" do
250
250
  end
251
251
 
252
252
  it "responds with the configured file" do
253
- expect_response_to_contain_file(HttpStub::Examples::ConfigurerWithFileResponses::FILE_PATH)
253
+ expect(response).to contain_file(HttpStub::Examples::ConfigurerWithFileResponses::FILE_PATH)
254
254
  end
255
255
 
256
256
  context "and a subsequent request is made that requests the file if it has been modified" do
@@ -289,7 +289,7 @@ describe "Stub basics acceptance" do
289
289
  end
290
290
 
291
291
  it "responds with the configured response" do
292
- expect_response_to_contain_file(HttpStub::Examples::ConfigurerWithFileResponses::FILE_PATH)
292
+ expect(response).to contain_file(HttpStub::Examples::ConfigurerWithFileResponses::FILE_PATH)
293
293
  end
294
294
 
295
295
  end
@@ -1,13 +1,60 @@
1
1
  describe "Stub trigger acceptance" do
2
2
  include_context "configurer integration"
3
3
 
4
- let(:configurer) { HttpStub::Examples::ConfigurerWithStubTriggers.new }
5
-
6
- before(:example) { configurer.class.initialize! }
4
+ let(:configurer_specification) { { class: HttpStub::Examples::ConfigurerWithStubTriggers } }
7
5
 
8
6
  context "when a stub is submitted that contains triggers" do
9
7
 
10
- context "with simple response bodies" do
8
+ context "that trigger scenarios" do
9
+
10
+ let(:triggered_scenario_names) do
11
+ (1..3).map do |scenario_number|
12
+ "Triggered Scenario #{scenario_number}".tap do |scenario_name|
13
+ stub_server.add_scenario_with_one_stub!(scenario_name) do |stub|
14
+ stub.match_requests(uri: "/triggered_scenario_#{scenario_number}", method: :get)
15
+ stub.respond_with(status: 200 + scenario_number, body: "Triggered scenario body #{scenario_number}")
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ before(:example) do
22
+ stub_server.add_stub! do |stub|
23
+ stub.match_requests(uri: "/triggers_scenarios", method: :get)
24
+ stub.respond_with(body: "Stub triggering scenarios body")
25
+ stub.trigger(scenarios: triggered_scenario_names)
26
+ end
27
+ end
28
+
29
+ context "and a request is made matching the stub" do
30
+
31
+ before(:example) { @stub_with_triggers_response = HTTParty.get("#{server_uri}/triggers_scenarios") }
32
+
33
+ it "replays the stubbed response" do
34
+ expect(@stub_with_triggers_response.code).to eql(200)
35
+ expect(@stub_with_triggers_response.body).to eql("Stub triggering scenarios body")
36
+ end
37
+
38
+ (1..3).each do |scenario_number|
39
+
40
+ context "and then a request matching triggered scenario ##{scenario_number} is made" do
41
+
42
+ let(:response) { HTTParty.get("#{server_uri}/triggered_scenario_#{scenario_number}") }
43
+
44
+ it "replays the triggered response" do
45
+ expect(response.code).to eql("20#{scenario_number}".to_i)
46
+ expect(response.body).to eql("Triggered scenario body #{scenario_number}")
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
56
+
57
+ context "that trigger stubs" do
11
58
 
12
59
  let(:triggered_stubs) do
13
60
  (1..3).map do |trigger_number|
@@ -20,24 +67,24 @@ describe "Stub trigger acceptance" do
20
67
 
21
68
  before(:example) do
22
69
  stub_server.add_stub! do |stub|
23
- stub.match_requests(uri: "/stub_with_triggers", method: :get)
24
- stub.respond_with(body: "Trigger stub body")
25
- stub.trigger(triggered_stubs)
70
+ stub.match_requests(uri: "/triggers_stubs", method: :get)
71
+ stub.respond_with(body: "Stub triggering stubs body")
72
+ stub.trigger(stubs: triggered_stubs)
26
73
  end
27
74
  end
28
75
 
29
76
  context "and a request is made matching the stub" do
30
77
 
31
- before(:example) { @stub_with_triggers_response = HTTParty.get("#{server_uri}/stub_with_triggers") }
78
+ before(:example) { @stub_with_triggers_response = HTTParty.get("#{server_uri}/triggers_stubs") }
32
79
 
33
80
  it "replays the stubbed response" do
34
81
  expect(@stub_with_triggers_response.code).to eql(200)
35
- expect(@stub_with_triggers_response.body).to eql("Trigger stub body")
82
+ expect(@stub_with_triggers_response.body).to eql("Stub triggering stubs body")
36
83
  end
37
84
 
38
85
  (1..3).each do |trigger_number|
39
86
 
40
- context "and then a request matching triggered stub ##{trigger_number} is made" do
87
+ context "and then a request matching a triggered stub ##{trigger_number} is made" do
41
88
 
42
89
  let(:response) { HTTParty.get("#{server_uri}/triggered_stub_#{trigger_number}") }
43
90
 
@@ -54,7 +101,7 @@ describe "Stub trigger acceptance" do
54
101
 
55
102
  end
56
103
 
57
- context "with a mix of text and file responses" do
104
+ context "that contain a mix of text and file responses" do
58
105
 
59
106
  let(:pdf_file_path) { "#{HttpStub::Spec::RESOURCES_DIR}/sample.pdf" }
60
107
  let(:pdf_file_trigger) do
@@ -92,7 +139,7 @@ describe "Stub trigger acceptance" do
92
139
  stub_server.add_stub! do |stub|
93
140
  stub.match_requests(uri: "/stub_with_triggers", method: :get)
94
141
  stub.respond_with(body: "Trigger stub body")
95
- stub.trigger(triggered_stubs)
142
+ stub.trigger(stubs: triggered_stubs)
96
143
  end
97
144
  end
98
145
 
@@ -106,7 +153,7 @@ describe "Stub trigger acceptance" do
106
153
 
107
154
  it "replays the triggered response" do
108
155
  expect(response.code).to eql(200)
109
- expect_response_to_contain_file(pdf_file_path)
156
+ expect(response).to contain_file(pdf_file_path)
110
157
  end
111
158
 
112
159
  end
@@ -2,40 +2,50 @@ describe HttpStub::Configurer::DSL::ScenarioBuilder do
2
2
 
3
3
  let(:stub_fixture) { HttpStub::StubFixture.new }
4
4
 
5
- let(:response_defaults) { { some_default_key: "some default value" } }
6
- let(:scenario_name) { "some/scenario/name" }
5
+ let(:scenario_name) { "some scenario name" }
6
+ let(:default_stub_template) { instance_double(HttpStub::Configurer::DSL::StubBuilderTemplate) }
7
7
 
8
- let(:scenario_builder) { HttpStub::Configurer::DSL::ScenarioBuilder.new(response_defaults, scenario_name) }
8
+ let(:scenario_builder) { HttpStub::Configurer::DSL::ScenarioBuilder.new(scenario_name, default_stub_template) }
9
9
 
10
- it "activates scenarios" do
11
- expect(scenario_builder).to be_a(HttpStub::Configurer::DSL::ScenarioActivator)
12
- end
10
+ describe "#build_stub" do
11
+
12
+ let(:response_overrides) { { status: 201 } }
13
+ let(:block_verifier) { double("BlockVerifier") }
14
+ let(:block) { lambda { block_verifier.verify } }
15
+
16
+ subject { scenario_builder.build_stub(response_overrides, &block) }
17
+
18
+ it "delegates to the provided default stub template" do
19
+ expect(default_stub_template).to receive(:build_stub).with(response_overrides).and_yield
20
+ expect(block_verifier).to receive(:verify)
21
+
22
+ subject
23
+ end
24
+
25
+ it "returns the built stub" do
26
+ built_stub = instance_double(HttpStub::Configurer::DSL::StubBuilder)
27
+ allow(default_stub_template).to receive(:build_stub).and_return(built_stub)
28
+
29
+ expect(subject).to eql(built_stub)
30
+ end
13
31
 
14
- it "produces stub builders" do
15
- expect(scenario_builder).to be_a(HttpStub::Configurer::DSL::StubBuilderProducer)
16
32
  end
17
33
 
18
34
  describe "#add_stub!" do
19
35
 
20
- let(:stub_builder) { instance_double(HttpStub::Configurer::DSL::StubBuilder, invoke: nil) }
36
+ let(:stub_builder) { instance_double(HttpStub::Configurer::DSL::StubBuilder) }
21
37
 
22
38
  context "when a block is provided" do
23
39
 
24
40
  let(:block_verifier) { double("BlockVerifier") }
25
- let(:block) { lambda { block_verifier.verify } }
41
+ let(:block) { lambda { block_verifier.verify } }
26
42
 
27
43
  subject { scenario_builder.add_stub!(&block) }
28
44
 
29
- before(:example) { allow(HttpStub::Configurer::DSL::StubBuilder).to receive(:new).and_return(stub_builder) }
30
-
31
- it "creates a stub builder with the response defaults provided to the scenario builder" do
32
- expect(HttpStub::Configurer::DSL::StubBuilder).to receive(:new).and_return(stub_builder)
33
-
34
- subject
35
- end
45
+ before(:example) { allow(scenario_builder).to receive(:build_stub).and_return(stub_builder) }
36
46
 
37
- it "requests the stub builder invoke the provided block" do
38
- expect(stub_builder).to receive(:invoke).and_yield
47
+ it "builds a stub whose values are initialized via the provided block" do
48
+ expect(scenario_builder).to receive(:build_stub).with(no_args).and_yield
39
49
  expect(block_verifier).to receive(:verify)
40
50
 
41
51
  subject
@@ -65,6 +75,20 @@ describe HttpStub::Configurer::DSL::ScenarioBuilder do
65
75
 
66
76
  end
67
77
 
78
+ describe "#add_stubs!" do
79
+
80
+ let(:stub_builders) { (1..3).map { instance_double(HttpStub::Configurer::DSL::StubBuilder) } }
81
+
82
+ subject { scenario_builder.add_stubs!(stub_builders) }
83
+
84
+ it "adds each stub to the scenario builders" do
85
+ stub_builders.each { |stub_builder| expect(scenario_builder).to receive(:add_stub!).with(stub_builder) }
86
+
87
+ subject
88
+ end
89
+
90
+ end
91
+
68
92
  describe "#build" do
69
93
 
70
94
  let(:scenario) { instance_double(HttpStub::Configurer::Request::Scenario) }
@@ -79,17 +103,14 @@ describe HttpStub::Configurer::DSL::ScenarioBuilder do
79
103
  subject
80
104
  end
81
105
 
82
- context "when multiple stubs have been added" do
106
+ context "when the scenario registers multiple stubs" do
83
107
 
84
- let(:stubs) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
108
+ let(:stubs) { (1..3).map { instance_double(HttpStub::Configurer::Request::Stub) } }
85
109
  let(:stub_builders) do
86
- stubs.map { |stub| instance_double(HttpStub::Configurer::DSL::StubBuilder, invoke: nil, build: stub) }
110
+ stubs.map { |stub| instance_double(HttpStub::Configurer::DSL::StubBuilder, build: stub) }
87
111
  end
88
112
 
89
- before(:example) do
90
- allow(HttpStub::Configurer::DSL::StubBuilder).to receive(:new).and_return(*stub_builders)
91
- stub_builders.each { scenario_builder.add_stub! { |_builder| "some block" } }
92
- end
113
+ before(:example) { scenario_builder.add_stubs!(stub_builders) }
93
114
 
94
115
  it "builds the stubs" do
95
116
  stub_builders.each { |stub_builder| expect(stub_builder).to receive(:build) }
@@ -105,7 +126,7 @@ describe HttpStub::Configurer::DSL::ScenarioBuilder do
105
126
 
106
127
  end
107
128
 
108
- context "when no stubs have been added" do
129
+ context "when the scenario registers no stubs" do
109
130
 
110
131
  it "creates a scenario that has empty stubs" do
111
132
  expect(HttpStub::Configurer::Request::Scenario).to receive(:new).with(hash_including(stubs: []))
@@ -115,9 +136,9 @@ describe HttpStub::Configurer::DSL::ScenarioBuilder do
115
136
 
116
137
  end
117
138
 
118
- context "when triggered scenarios have been added" do
139
+ context "when the scenario activates an array scenarios" do
119
140
 
120
- let(:triggered_scenario_names) { (1..3).map { |i| "activator_#{i}" } }
141
+ let(:triggered_scenario_names) { (1..3).map { |i| "scenario #{i}" } }
121
142
 
122
143
  before(:example) { scenario_builder.activate!(triggered_scenario_names) }
123
144
 
@@ -131,7 +152,39 @@ describe HttpStub::Configurer::DSL::ScenarioBuilder do
131
152
 
132
153
  end
133
154
 
134
- context "when no scenario activators have been added" do
155
+ context "when the scenario activates a list of scenarios" do
156
+
157
+ let(:triggered_scenario_names) { (1..3).map { |i| "activator_#{i}" } }
158
+
159
+ before(:example) { scenario_builder.activate!(*triggered_scenario_names) }
160
+
161
+ it "creates a scenario that includes the triggered scenario names" do
162
+ expect(HttpStub::Configurer::Request::Scenario).to(
163
+ receive(:new).with(hash_including(triggered_scenario_names: triggered_scenario_names))
164
+ )
165
+
166
+ subject
167
+ end
168
+
169
+ end
170
+
171
+ context "when the scenario activates one scenario" do
172
+
173
+ let(:triggered_scenario_name) { "a scenario" }
174
+
175
+ before(:example) { scenario_builder.activate!(triggered_scenario_name) }
176
+
177
+ it "creates a scenario that includes the triggered scenario names" do
178
+ expect(HttpStub::Configurer::Request::Scenario).to(
179
+ receive(:new).with(hash_including(triggered_scenario_names: [ triggered_scenario_name ]))
180
+ )
181
+
182
+ subject
183
+ end
184
+
185
+ end
186
+
187
+ context "when the scenario does not activate any scenarios" do
135
188
 
136
189
  it "creates a scenario that has empty triggered scenario names" do
137
190
  expect(HttpStub::Configurer::Request::Scenario).to(