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.
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
@@ -0,0 +1,444 @@
1
+ describe HttpStub::Server::Session::Session do
2
+
3
+ let(:id) { "Some session id" }
4
+ let(:scenario_registry) { instance_double(HttpStub::Server::Registry) }
5
+ let(:memory_session) { instance_double(HttpStub::Server::Session::Session) }
6
+
7
+ let(:stub_registry) { instance_double(HttpStub::Server::Stub::Registry) }
8
+ let(:stub_match_registry) { instance_double(HttpStub::Server::Registry) }
9
+ let(:stub_miss_registry) { instance_double(HttpStub::Server::Registry) }
10
+
11
+ let(:logger) { instance_double(Logger) }
12
+
13
+ let(:session) { described_class.new(id, scenario_registry, memory_session) }
14
+
15
+ before(:example) do
16
+ allow(HttpStub::Server::Stub::Registry).to receive(:new).and_return(stub_registry)
17
+ allow(HttpStub::Server::Registry).to receive(:new).with("stub match").and_return(stub_match_registry)
18
+ allow(HttpStub::Server::Registry).to receive(:new).with("stub miss").and_return(stub_miss_registry)
19
+ end
20
+
21
+ it "uses a stub registry that is initialized with the provided memory session" do
22
+ expect(HttpStub::Server::Stub::Registry).to receive(:new).with(memory_session)
23
+
24
+ session
25
+ end
26
+
27
+ describe "#id" do
28
+
29
+ it "returns the provided id" do
30
+ expect(session.id).to eql(id)
31
+ end
32
+
33
+ end
34
+
35
+ describe "#matches?" do
36
+
37
+ subject { session.matches?(provided_id, logger) }
38
+
39
+ context "when the provided id is equal to the session id" do
40
+
41
+ let(:provided_id) { id }
42
+
43
+ it "returns true" do
44
+ expect(subject).to be(true)
45
+ end
46
+
47
+ end
48
+
49
+ context "when the provided id is not equal to the session id" do
50
+
51
+ let(:provided_id) { "Another session id" }
52
+
53
+ it "returns false" do
54
+ expect(subject).to be(false)
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
61
+ describe "activate_scenario!" do
62
+
63
+ let(:scenario_name) { "Some scenario name" }
64
+ let(:scenario) { nil }
65
+
66
+ subject { session.activate_scenario!(scenario_name, logger) }
67
+
68
+ before(:example) { allow(scenario_registry).to receive(:find).with(scenario_name, anything).and_return(scenario) }
69
+
70
+ it "attempts to retrieve the scenario with the provided name from the scenario registry" do
71
+ expect(scenario_registry).to receive(:find).with(scenario_name, logger)
72
+
73
+ subject rescue nil
74
+ end
75
+
76
+ context "when the scenario is found" do
77
+
78
+ let(:scenario_trigger_names) { (1..3).map { |i| "scenario trigger #{i}" } }
79
+ let(:scenario_triggers) do
80
+ scenario_trigger_names.map { |name| instance_double(HttpStub::Server::Scenario::Trigger, name: name) }
81
+ end
82
+ let(:triggered_scenarios) do
83
+ (1..3).map { instance_double(HttpStub::Server::Scenario::Scenario, triggered_scenarios: [], stubs: []) }
84
+ end
85
+ let(:scenario_stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
86
+ let(:scenario) do
87
+ instance_double(HttpStub::Server::Scenario::Scenario, triggered_scenarios: scenario_triggers,
88
+ stubs: scenario_stubs)
89
+ end
90
+
91
+ before(:example) do
92
+ scenario_trigger_names.zip(triggered_scenarios).each do |scenario_trigger_name, triggered_scenario|
93
+ allow(scenario_registry).to(
94
+ receive(:find).with(scenario_trigger_name, anything).and_return(triggered_scenario)
95
+ )
96
+ end
97
+ allow(stub_registry).to receive(:concat)
98
+ end
99
+
100
+ it "triggers activation of the scenario triggers of the scenario" do
101
+ scenario_trigger_names.zip(triggered_scenarios).each do |scenario_trigger_name, triggered_scenario|
102
+ expect(scenario_registry).to receive(:find).with(scenario_trigger_name, logger).and_return(triggered_scenario)
103
+ end
104
+
105
+ subject
106
+ end
107
+
108
+ it "adds the scenarios stubs to the stub registry" do
109
+ expect(stub_registry).to receive(:concat).with(scenario_stubs, logger)
110
+
111
+ subject
112
+ end
113
+
114
+ end
115
+
116
+ context "when the scenario is not found" do
117
+
118
+ let(:scenario) { nil }
119
+
120
+ it "raises a scenario not found error with the provided name" do
121
+ expect { subject }.to raise_error(HttpStub::Server::Scenario::NotFoundError, /#{scenario_name}/)
122
+ end
123
+
124
+ end
125
+
126
+ end
127
+
128
+ describe "#add_stub" do
129
+
130
+ let(:the_stub) { instance_double(HttpStub::Server::Stub::Stub) }
131
+
132
+ subject { session.add_stub(the_stub, logger) }
133
+
134
+ it "adds the provided stub to the stub regsitry" do
135
+ expect(stub_registry).to receive(:add).with(the_stub, logger)
136
+
137
+ subject
138
+ end
139
+
140
+ end
141
+
142
+ describe "#find_stub" do
143
+
144
+ let(:id) { SecureRandom.uuid }
145
+ let(:the_stub) { instance_double(HttpStub::Server::Stub::Stub) }
146
+
147
+ subject { session.find_stub(id, logger) }
148
+
149
+ before(:example) { allow(stub_registry).to receive(:find).and_return(the_stub) }
150
+
151
+ it "finds the stub with the provided id in the stub regsitry" do
152
+ expect(stub_registry).to receive(:find).with(id, logger)
153
+
154
+ subject
155
+ end
156
+
157
+ it "returns any found stub in the stub regsitry" do
158
+ expect(subject).to eql(the_stub)
159
+ end
160
+
161
+ end
162
+
163
+ describe "#stubs" do
164
+
165
+ let(:the_stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
166
+
167
+ subject { session.stubs }
168
+
169
+ before(:example) { allow(stub_registry).to receive(:all).and_return(the_stubs) }
170
+
171
+ it "finds all stubs in the stub regsitry" do
172
+ expect(stub_registry).to receive(:all)
173
+
174
+ subject
175
+ end
176
+
177
+ it "returns the stubs in the stub regsitry" do
178
+ expect(subject).to eql(the_stubs)
179
+ end
180
+
181
+ end
182
+
183
+ describe "#match" do
184
+
185
+ let(:request) { instance_double(HttpStub::Server::Request::Request) }
186
+
187
+ let(:matched_stub) { instance_double(HttpStub::Server::Stub::Stub) }
188
+
189
+ subject { session.match(request, logger) }
190
+
191
+ before(:example) { allow(stub_registry).to receive(:match).and_return(matched_stub) }
192
+
193
+ it "delegates to the stub registry to match the request with a stub" do
194
+ expect(stub_registry).to receive(:match).with(request, logger)
195
+
196
+ subject
197
+ end
198
+
199
+ it "returns any matched stub" do
200
+ expect(subject).to eql(matched_stub)
201
+ end
202
+
203
+ end
204
+
205
+ describe "#add_match" do
206
+
207
+ let(:triggered_scenario_names) { [] }
208
+ let(:triggered_stubs) { [] }
209
+ let(:match_stub_triggers) do
210
+ instance_double(HttpStub::Server::Stub::Triggers, scenario_names: triggered_scenario_names,
211
+ stubs: triggered_stubs)
212
+ end
213
+ let(:match_stub) do
214
+ instance_double(HttpStub::Server::Stub::Stub, triggers: match_stub_triggers)
215
+ end
216
+ let(:match) { instance_double(HttpStub::Server::Stub::Match::Match, stub: match_stub) }
217
+
218
+ subject { session.add_match(match, logger) }
219
+
220
+ before(:example) do
221
+ allow(stub_match_registry).to receive(:add)
222
+ end
223
+
224
+ it "adds the match to the match registry" do
225
+ expect(stub_match_registry).to receive(:add).with(match, logger)
226
+
227
+ subject
228
+ end
229
+
230
+ context "when scenarios are to be triggered by the stub" do
231
+
232
+ let(:triggered_scenario_names) { (1..3).map { |i| "triggered scenario #{i}" } }
233
+
234
+ it "activates the scenarios in the session" do
235
+ triggered_scenario_names.each do |scenario_name|
236
+ expect(session).to receive(:activate_scenario!).with(scenario_name, logger)
237
+ end
238
+
239
+ subject
240
+ end
241
+
242
+ end
243
+
244
+ context "when no scenarios are to be triggered by the stub" do
245
+
246
+ let(:triggered_scenario_names) { [] }
247
+
248
+ it "does not activate any scenarios in the session" do
249
+ expect(session).to_not receive(:activate_scenario!)
250
+
251
+ subject
252
+ end
253
+
254
+ end
255
+
256
+ context "when stubs are to be triggered by the stub" do
257
+
258
+ let(:triggered_stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
259
+
260
+ it "adds the stubs to the session" do
261
+ triggered_stubs.each { |triggered_stub| expect(session).to receive(:add_stub).with(triggered_stub, logger) }
262
+
263
+ subject
264
+ end
265
+
266
+ end
267
+
268
+ context "when no stubs are to be triggered by the stub" do
269
+
270
+ let(:triggered_stubs) { [] }
271
+
272
+ it "does not add any stubs to the session" do
273
+ expect(session).to_not receive(:add_stub)
274
+
275
+ subject
276
+ end
277
+
278
+ end
279
+
280
+ end
281
+
282
+ describe "#matches" do
283
+
284
+ let(:stub_matches) { (1..3).map { instance_double(HttpStub::Server::Stub::Match::Match) } }
285
+
286
+ subject { session.matches }
287
+
288
+ before(:example) { allow(stub_match_registry).to receive(:all).and_return(stub_matches) }
289
+
290
+ it "retrieves all the matches in the stub match registry" do
291
+ expect(stub_match_registry).to receive(:all)
292
+
293
+ subject
294
+ end
295
+
296
+ it "returns any matches" do
297
+ expect(subject).to eql(stub_matches)
298
+ end
299
+
300
+ end
301
+
302
+ describe "#last_match" do
303
+
304
+ let(:match_args) { { uri: "some uri", method: "some method" } }
305
+
306
+ let(:stub_match) { instance_double(HttpStub::Server::Stub::Match::Match) }
307
+
308
+ subject { session.last_match(match_args, logger) }
309
+
310
+ before(:example) { allow(stub_match_registry).to receive(:find).and_return(stub_match) }
311
+
312
+ it "retrieves the match for the provided URI and method via the stub match registry" do
313
+ expect(stub_match_registry).to receive(:find).with(match_args, logger)
314
+
315
+ subject
316
+ end
317
+
318
+ it "returns any match" do
319
+ expect(subject).to eql(stub_match)
320
+ end
321
+
322
+ end
323
+
324
+ describe "#add_miss" do
325
+
326
+ let(:stub_miss) { instance_double(HttpStub::Server::Stub::Match::Miss) }
327
+
328
+ subject { session.add_miss(stub_miss, logger) }
329
+
330
+ it "adds the miss to the stub miss registry" do
331
+ expect(stub_miss_registry).to receive(:add).with(stub_miss, logger)
332
+
333
+ subject
334
+ end
335
+
336
+ end
337
+
338
+ describe "#misses" do
339
+
340
+ let(:stub_misses) { (1..3).map { instance_double(HttpStub::Server::Stub::Match::Miss) } }
341
+
342
+ subject { session.misses }
343
+
344
+ before(:example) { allow(stub_miss_registry).to receive(:all).and_return(stub_misses) }
345
+
346
+ it "retrieves all the misses in the stub miss registry" do
347
+ expect(stub_miss_registry).to receive(:all)
348
+
349
+ subject
350
+ end
351
+
352
+ it "returns any misses" do
353
+ expect(subject).to eql(stub_misses)
354
+ end
355
+
356
+ end
357
+
358
+ describe "#reset" do
359
+
360
+ subject { session.reset(logger) }
361
+
362
+ before(:example) do
363
+ allow(stub_registry).to receive(:reset)
364
+ allow(stub_match_registry).to receive(:clear)
365
+ allow(stub_miss_registry).to receive(:clear)
366
+ end
367
+
368
+ it "resets the stub registry to revert it to its original state" do
369
+ expect(stub_registry).to receive(:reset).with(logger)
370
+
371
+ subject
372
+ end
373
+
374
+ it "clears the stub miss registry to revert it to its original state" do
375
+ expect(stub_miss_registry).to receive(:clear).with(logger)
376
+
377
+ subject
378
+ end
379
+
380
+ it "clears the stub match registry to revert it to its original state" do
381
+ expect(stub_match_registry).to receive(:clear).with(logger)
382
+
383
+ subject
384
+ end
385
+
386
+ it "clears stub misses before the resetting stubs" do
387
+ expect(stub_miss_registry).to receive(:clear).ordered
388
+ expect(stub_registry).to receive(:reset).ordered
389
+
390
+ subject
391
+ end
392
+
393
+ it "clears stub matches before the resetting stubs" do
394
+ expect(stub_match_registry).to receive(:clear).ordered
395
+ expect(stub_registry).to receive(:reset).ordered
396
+
397
+ subject
398
+ end
399
+
400
+ end
401
+
402
+ describe "#clear" do
403
+
404
+ subject { session.clear(logger) }
405
+
406
+ before(:example) do
407
+ [ stub_registry, stub_match_registry, stub_miss_registry ].each { |registry| allow(registry).to receive(:clear) }
408
+ end
409
+
410
+ it "clears the stub registry" do
411
+ expect(stub_registry).to receive(:clear).with(logger)
412
+
413
+ subject
414
+ end
415
+
416
+ it "clears the stub miss registry" do
417
+ expect(stub_miss_registry).to receive(:clear).with(logger)
418
+
419
+ subject
420
+ end
421
+
422
+ it "clears the stub match registry" do
423
+ expect(stub_match_registry).to receive(:clear).with(logger)
424
+
425
+ subject
426
+ end
427
+
428
+ it "clears stub misses before the stubs" do
429
+ expect(stub_miss_registry).to receive(:clear).ordered
430
+ expect(stub_registry).to receive(:clear).ordered
431
+
432
+ subject
433
+ end
434
+
435
+ it "clears stub matches before the stubs" do
436
+ expect(stub_match_registry).to receive(:clear).ordered
437
+ expect(stub_registry).to receive(:clear).ordered
438
+
439
+ subject
440
+ end
441
+
442
+ end
443
+
444
+ end
@@ -1,26 +1,27 @@
1
1
  describe HttpStub::Server::Stub::Controller do
2
2
 
3
- let(:request) { instance_double(HttpStub::Server::Request::Request) }
4
- let(:logger) { instance_double(Logger) }
5
- let(:payload) { HttpStub::StubFixture.new.server_payload }
6
- let(:stub_uri) { "/some/stub/uri" }
7
- let(:the_stub) { instance_double(HttpStub::Server::Stub::Stub, uri: stub_uri) }
8
-
9
- let(:stub_registry) { instance_double(HttpStub::Server::Stub::Registry).as_null_object }
10
- let(:match_registry) { instance_double(HttpStub::Server::Registry).as_null_object }
11
- let(:miss_registry) { instance_double(HttpStub::Server::Registry).as_null_object }
12
-
13
- let(:controller) { HttpStub::Server::Stub::Controller.new(stub_registry, match_registry, miss_registry) }
14
-
15
- before(:example) do
16
- allow(HttpStub::Server::Stub::Parser).to receive(:parse).and_return(payload)
17
- allow(HttpStub::Server::Stub).to receive(:create).and_return(the_stub)
3
+ let(:request_parameters) { {} }
4
+ let(:session) { instance_double(HttpStub::Server::Session::Session) }
5
+ let(:request) do
6
+ instance_double(HttpStub::Server::Request::Request, parameters: request_parameters, session: session)
18
7
  end
8
+ let(:logger) { instance_double(Logger) }
9
+ let(:payload) { HttpStub::StubFixture.new.server_payload }
10
+ let(:stub_uri) { "/some/stub/uri" }
11
+ let(:the_stub) { instance_double(HttpStub::Server::Stub::Stub, uri: stub_uri) }
12
+
13
+ let(:controller) { described_class.new }
19
14
 
20
15
  describe "#register" do
21
16
 
22
17
  subject { controller.register(request, logger) }
23
18
 
19
+ before(:example) do
20
+ allow(HttpStub::Server::Stub::Parser).to receive(:parse).and_return(payload)
21
+ allow(HttpStub::Server::Stub).to receive(:create).and_return(the_stub)
22
+ allow(session).to receive(:add_stub)
23
+ end
24
+
24
25
  it "parses the payload from the request" do
25
26
  expect(HttpStub::Server::Stub::Parser).to receive(:parse).with(request).and_return(payload)
26
27
 
@@ -33,8 +34,8 @@ describe HttpStub::Server::Stub::Controller do
33
34
  subject
34
35
  end
35
36
 
36
- it "adds the stub to the stub registry" do
37
- expect(stub_registry).to receive(:add).with(the_stub, logger)
37
+ it "adds the stub to the users session" do
38
+ expect(session).to receive(:add_stub).with(the_stub, logger)
38
39
 
39
40
  subject
40
41
  end
@@ -56,20 +57,30 @@ describe HttpStub::Server::Stub::Controller do
56
57
 
57
58
  describe "#match" do
58
59
 
60
+ let(:matched_stub) { nil }
61
+
59
62
  let(:calculated_stub_response) { instance_double(HttpStub::Server::Stub::Response::Base) }
60
63
 
61
64
  subject { controller.match(request, logger) }
62
65
 
63
66
  before(:example) do
64
- allow(stub_registry).to receive(:match).with(request, logger).and_return(matched_stub)
67
+ allow(session).to receive(:match).and_return(matched_stub)
65
68
  allow(the_stub).to receive(:response_for).and_return(calculated_stub_response)
66
69
  end
67
70
 
68
- describe "when a stub has been registered that matches the request" do
71
+ it "evaluates the matching stub for the user" do
72
+ allow(session).to receive(:add_match)
73
+ allow(session).to receive(:add_miss)
74
+ expect(session).to receive(:match).with(request, logger)
75
+
76
+ subject
77
+ end
78
+
79
+ describe "when a stub matches the request" do
69
80
 
70
81
  let(:matched_stub) { the_stub }
71
82
 
72
- before(:example) { allow(match_registry).to receive(:add) }
83
+ before(:example) { allow(session).to receive(:add_match) }
73
84
 
74
85
  it "calculates the stubs response based on the request" do
75
86
  expect(the_stub).to receive(:response_for).with(request)
@@ -83,16 +94,16 @@ describe HttpStub::Server::Stub::Controller do
83
94
  subject
84
95
  end
85
96
 
86
- it "adds the match to the match registry" do
97
+ it "adds the match to the users session" do
87
98
  match = instance_double(HttpStub::Server::Stub::Match::Match)
88
99
  allow(HttpStub::Server::Stub::Match::Match).to receive(:new).and_return(match)
89
- expect(match_registry).to receive(:add).with(match, logger)
100
+ expect(session).to receive(:add_match).with(match, logger)
90
101
 
91
102
  subject
92
103
  end
93
104
 
94
- it "does not add to the miss registry" do
95
- expect(miss_registry).to_not receive(:add)
105
+ it "does not add to the users session" do
106
+ expect(session).to_not receive(:add_miss)
96
107
 
97
108
  subject
98
109
  end
@@ -107,7 +118,7 @@ describe HttpStub::Server::Stub::Controller do
107
118
 
108
119
  let(:matched_stub) { nil }
109
120
 
110
- before(:example) { allow(miss_registry).to receive(:add) }
121
+ before(:example) { allow(session).to receive(:add_miss) }
111
122
 
112
123
  it "returns a not found response" do
113
124
  expect(subject).to eql(HttpStub::Server::Response::NOT_FOUND)
@@ -119,16 +130,16 @@ describe HttpStub::Server::Stub::Controller do
119
130
  subject
120
131
  end
121
132
 
122
- it "adds the miss to the miss registry" do
133
+ it "adds the miss to the users session" do
123
134
  miss = instance_double(HttpStub::Server::Stub::Match::Miss)
124
135
  allow(HttpStub::Server::Stub::Match::Miss).to receive(:new).and_return(miss)
125
- expect(miss_registry).to receive(:add).with(miss, logger)
136
+ expect(session).to receive(:add_miss).with(miss, logger)
126
137
 
127
138
  subject
128
139
  end
129
140
 
130
- it "does not add to the match registry" do
131
- expect(match_registry).to_not receive(:add)
141
+ it "does not add to the match to the users session" do
142
+ expect(session).to_not receive(:add_match)
132
143
 
133
144
  subject
134
145
  end
@@ -137,24 +148,65 @@ describe HttpStub::Server::Stub::Controller do
137
148
 
138
149
  end
139
150
 
140
- describe "#clear" do
151
+ describe "#find" do
152
+
153
+ let(:id) { SecureRandom.uuid }
154
+ let(:request_parameters) { { stub_id: id } }
155
+
156
+ subject { controller.find(request, logger) }
157
+
158
+ before(:example) { allow(session).to receive(:find_stub).and_return(the_stub) }
159
+
160
+ it "finds the stub with the parameterized id in the user session" do
161
+ expect(session).to receive(:find_stub).with(id, logger)
162
+
163
+ subject
164
+ end
165
+
166
+ it "returns the found stub" do
167
+ expect(subject).to eql(the_stub)
168
+ end
169
+
170
+ end
141
171
 
142
- subject { controller.clear(logger) }
172
+ describe "#find_all" do
143
173
 
144
- it "clears the stub registry" do
145
- expect(stub_registry).to receive(:clear).with(logger)
174
+ let(:stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
175
+
176
+ subject { controller.find_all(request) }
177
+
178
+ before(:example) { allow(session).to receive(:stubs).and_return(stubs) }
179
+
180
+ it "retrieves all stubs from the users session" do
181
+ expect(session).to receive(:stubs)
146
182
 
147
183
  subject
148
184
  end
149
185
 
150
- it "clears the match registry" do
151
- expect(match_registry).to receive(:clear).with(logger)
186
+ it "returns the stubs" do
187
+ expect(subject).to eql(stubs)
188
+ end
189
+
190
+ end
191
+
192
+ describe "#reset" do
193
+
194
+ subject { controller.reset(request, logger) }
195
+
196
+ it "resets the users session" do
197
+ expect(session).to receive(:reset).with(logger)
152
198
 
153
199
  subject
154
200
  end
155
201
 
156
- it "clears the miss registry" do
157
- expect(miss_registry).to receive(:clear).with(logger)
202
+ end
203
+
204
+ describe "#clear" do
205
+
206
+ subject { controller.clear(request, logger) }
207
+
208
+ it "clears the users session" do
209
+ expect(session).to receive(:clear).with(logger)
158
210
 
159
211
  subject
160
212
  end