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
@@ -0,0 +1,74 @@
1
+ describe HttpStub::Server::Request::Factory do
2
+
3
+ let(:session_configuration) { instance_double(HttpStub::Server::Session::Configuration) }
4
+ let(:session_registry) { instance_double(HttpStub::Server::Session::Registry) }
5
+ let(:server_memory) { instance_double(HttpStub::Server::Memory::Memory, sessions: session_registry) }
6
+
7
+ let(:session_identifier_strategy) { instance_double(HttpStub::Server::Session::IdentifierStrategy) }
8
+
9
+ let(:factory) { described_class.new(session_configuration, server_memory) }
10
+
11
+ before(:example) do
12
+ allow(HttpStub::Server::Session::IdentifierStrategy).to receive(:new).and_return(session_identifier_strategy)
13
+ end
14
+
15
+ it "creates a session identifier strategy based on the session configuration" do
16
+ expect(HttpStub::Server::Session::IdentifierStrategy).to receive(:new).with(session_configuration)
17
+
18
+ factory
19
+ end
20
+
21
+ describe "#create" do
22
+
23
+ let(:rack_request) { Rack::RequestFixture.create }
24
+ let(:sinatra_parameters) { { some_parameter: "some parameter value" } }
25
+ let(:logger) { instance_double(Logger) }
26
+
27
+ let(:discovered_session_id) { "some session id" }
28
+ let(:sinatra_request) { instance_double(HttpStub::Server::Request::SinatraRequest) }
29
+ let(:session) { instance_double(HttpStub::Server::Session::Session) }
30
+ let(:server_request) { instance_double(HttpStub::Server::Request::Request) }
31
+
32
+ subject { factory.create(rack_request, sinatra_parameters, logger) }
33
+
34
+ before(:example) do
35
+ allow(HttpStub::Server::Request::SinatraRequest).to receive(:new).and_return(sinatra_request)
36
+ allow(session_identifier_strategy).to receive(:identifier_for).and_return(discovered_session_id)
37
+ allow(session_registry).to receive(:find_or_create).and_return(session)
38
+ end
39
+
40
+ it "creates a sinatra request for the rack request and sinatra parameters" do
41
+ expect(HttpStub::Server::Request::SinatraRequest).to receive(:new).with(rack_request, sinatra_parameters)
42
+
43
+ subject
44
+ end
45
+
46
+ it "discovers the session identifier for the sinatra request" do
47
+ expect(session_identifier_strategy).to receive(:identifier_for).with(sinatra_request)
48
+
49
+ subject
50
+ end
51
+
52
+ it "finds or creates the session for the identifier via the servers session registry" do
53
+ expect(session_registry).to receive(:find_or_create).with(discovered_session_id, logger)
54
+
55
+ subject
56
+ end
57
+
58
+ it "creates a http_stub request containing the sinatra request" do
59
+ expect(HttpStub::Server::Request::Request).to receive(:new).with(sinatra_request, anything, anything)
60
+
61
+ subject
62
+ end
63
+
64
+ it "returns a http_stub request containing the discovered session id" do
65
+ expect(subject.session_id).to eql(discovered_session_id)
66
+ end
67
+
68
+ it "returns a http_stub request containing the retrieved session" do
69
+ expect(subject.session).to eql(session)
70
+ end
71
+
72
+ end
73
+
74
+ end
@@ -1,6 +1,6 @@
1
1
  describe HttpStub::Server::Request::Parameters do
2
2
 
3
- let(:parameter_hash) { {} }
3
+ let(:parameter_hash) { { "some_parameter_name" => "some parameter value" } }
4
4
 
5
5
  let(:parameters) { described_class.new(parameter_hash) }
6
6
 
@@ -10,17 +10,14 @@ describe HttpStub::Server::Request::Parameters do
10
10
 
11
11
  describe "::create" do
12
12
 
13
- let(:rack_params) { { "some_parameter_name" => "some parameter value" } }
14
- let(:rack_request) { instance_double(Rack::Request, params: rack_params) }
13
+ subject { described_class.create(parameter_hash) }
15
14
 
16
- subject { described_class.create(rack_request) }
17
-
18
- it "returns http stub request parameters" do
15
+ it "returns http_stub request parameters" do
19
16
  expect(subject).to be_an_instance_of(described_class)
20
17
  end
21
18
 
22
- it "returns parameters containing the rack request parameters" do
23
- expect(subject).to eql(rack_params)
19
+ it "contains the provided parameters" do
20
+ expect(subject).to eql(parameters)
24
21
  end
25
22
 
26
23
  end
@@ -1,34 +1,40 @@
1
1
  describe HttpStub::Server::Request::Request do
2
2
 
3
- let(:rack_base_url) { "http://base_url:8888" }
4
- let(:rack_path_info) { "/rack/path/info" }
5
- let(:rack_request_method) { "some method" }
6
- let(:rack_env) { { "some_env_name" => "some env value" } }
7
- let(:rack_parameters) { { "some_parameter_name" => "some parameter value" } }
8
- let(:rack_body) { "some request body" }
9
- let(:rack_request) do
10
- instance_double(Rack::Request, base_url: rack_base_url,
11
- path_info: rack_path_info,
12
- request_method: rack_request_method,
13
- env: rack_env,
14
- params: rack_parameters,
15
- body: StringIO.new(rack_body))
3
+ let(:sinatra_base_uri) { "http://base_url:8888" }
4
+ let(:sinatra_uri) { "/rack/path/info" }
5
+ let(:sinatra_request_method) { "some method" }
6
+ let(:sinatra_headers) { { "some_header" => "some header value" } }
7
+ let(:sinatra_parameters) { { "some_parameter" => "some parameter value" } }
8
+ let(:sinatra_body) { "some request body" }
9
+ let(:sinatra_request) do
10
+ instance_double(HttpStub::Server::Request::SinatraRequest, base_uri: sinatra_base_uri,
11
+ uri: sinatra_uri,
12
+ method: sinatra_request_method,
13
+ headers: sinatra_headers,
14
+ parameters: sinatra_parameters,
15
+ body: sinatra_body)
16
16
  end
17
+ let(:session_id) { "some session id" }
18
+ let(:session) { instance_double(HttpStub::Server::Session::Session) }
17
19
 
18
- let(:server_request) { described_class.new(rack_request) }
20
+ let(:server_request) { described_class.new(sinatra_request, session_id, session) }
19
21
 
20
22
  describe "#base_uri" do
21
23
 
22
- it "is the rack base url" do
23
- expect(server_request.base_uri).to eql(rack_base_url)
24
+ subject { server_request.base_uri }
25
+
26
+ it "is the sinatra requests base uri" do
27
+ expect(subject).to eql(sinatra_base_uri)
24
28
  end
25
29
 
26
30
  end
27
31
 
28
32
  describe "#uri" do
29
33
 
30
- it "is the rack request path information" do
31
- expect(server_request.uri).to eql(rack_path_info)
34
+ subject { server_request.uri }
35
+
36
+ it "is the sinatra requests uri" do
37
+ expect(subject).to eql(sinatra_uri)
32
38
  end
33
39
 
34
40
  end
@@ -37,8 +43,8 @@ describe HttpStub::Server::Request::Request do
37
43
 
38
44
  subject { server_request.method }
39
45
 
40
- it "is the rack request method" do
41
- expect(subject).to eql(rack_request_method)
46
+ it "is the sinatra requests method" do
47
+ expect(subject).to eql(sinatra_request_method)
42
48
  end
43
49
 
44
50
  end
@@ -47,72 +53,66 @@ describe HttpStub::Server::Request::Request do
47
53
 
48
54
  subject { server_request.headers }
49
55
 
50
- it "creates http stub request headers from the rack request" do
51
- expect(HttpStub::Server::Request::Headers).to receive(:create).with(rack_request)
56
+ it "is the sinatra requests headers" do
57
+ expect(subject).to eql(sinatra_headers)
52
58
 
53
59
  subject
54
60
  end
55
61
 
56
- it "returns the created http stub request headers" do
57
- http_stub_request_headers = instance_double(HttpStub::Server::Request::Headers)
58
- allow(HttpStub::Server::Request::Headers).to receive(:create).and_return(http_stub_request_headers)
59
-
60
- expect(subject).to eql(http_stub_request_headers)
61
- end
62
-
63
62
  end
64
63
 
65
64
  describe "#parameters" do
66
65
 
67
66
  subject { server_request.parameters }
68
67
 
69
- it "creates http stub request parameters from the rack request" do
70
- expect(HttpStub::Server::Request::Parameters).to receive(:create).with(rack_request)
68
+ it "is the sinatra requests parameters" do
69
+ expect(subject).to eql(sinatra_parameters)
71
70
 
72
71
  subject
73
72
  end
74
73
 
75
- it "returns the created http stub request parameters" do
76
- http_stub_request_parameters = instance_double(HttpStub::Server::Request::Parameters)
77
- allow(HttpStub::Server::Request::Parameters).to receive(:create).and_return(http_stub_request_parameters)
78
-
79
- expect(subject).to eql(http_stub_request_parameters)
80
- end
81
-
82
74
  end
83
75
 
84
76
  describe "#body" do
85
77
 
86
78
  subject { server_request.body }
87
79
 
88
- it "is the read rack request body" do
89
- expect(subject).to eql(rack_body)
80
+ it "is the sinatra requests body" do
81
+ expect(subject).to eql(sinatra_body)
90
82
  end
91
83
 
92
84
  end
93
85
 
94
86
  describe "#to_json" do
95
87
 
88
+ let(:sinatra_request_json) { "some json" }
89
+
96
90
  subject { server_request.to_json }
97
91
 
98
- it "contains the requests uri" do
99
- expect(subject).to include_in_json(uri: server_request.uri)
100
- end
92
+ before(:example) { allow(sinatra_request).to receive(:to_json).and_return(sinatra_request_json) }
101
93
 
102
- it "contains the requests method" do
103
- expect(subject).to include_in_json(method: server_request.method)
94
+ it "returns the sinatra requests json representation" do
95
+ expect(subject).to eql(sinatra_request_json)
104
96
  end
105
97
 
106
- it "contains the requests headers" do
107
- expect(subject).to include_in_json(headers: server_request.headers)
108
- end
98
+ end
99
+
100
+ describe "#session_id" do
101
+
102
+ subject { server_request.session_id }
109
103
 
110
- it "contains the requests parameters" do
111
- expect(subject).to include_in_json(parameters: server_request.parameters)
104
+ it "is the provided id" do
105
+ expect(subject).to eql(session_id)
112
106
  end
113
107
 
114
- it "contains the requests body" do
115
- expect(subject).to include_in_json(body: server_request.body)
108
+ end
109
+
110
+ describe "#session" do
111
+
112
+ subject { server_request.session }
113
+
114
+ it "is the provided session" do
115
+ expect(subject).to eql(session)
116
116
  end
117
117
 
118
118
  end
@@ -0,0 +1,132 @@
1
+ describe HttpStub::Server::Request::SinatraRequest do
2
+
3
+ let(:rack_base_url) { "http://base_url:8888" }
4
+ let(:rack_path_info) { "/rack/path/info" }
5
+ let(:rack_request_method) { "some method" }
6
+ let(:rack_env) { { "some_env_name" => "some env value" } }
7
+ let(:rack_parameters) { { "rack_parameter_name" => "rack parameter value" } }
8
+ let(:rack_body_content) { "some request body" }
9
+ let(:rack_body) { StringIO.new(rack_body_content) }
10
+ let(:rack_request) do
11
+ instance_double(Rack::Request, base_url: rack_base_url,
12
+ path_info: rack_path_info,
13
+ request_method: rack_request_method,
14
+ env: rack_env,
15
+ params: rack_parameters,
16
+ body: rack_body)
17
+ end
18
+ let(:sinatra_parameters) { { "sinatra_parameter_name" => "sinatra parameter value" } }
19
+
20
+ let(:sinatra_request) { described_class.new(rack_request, sinatra_parameters) }
21
+
22
+ describe "#base_uri" do
23
+
24
+ it "is the rack base url" do
25
+ expect(sinatra_request.base_uri).to eql(rack_base_url)
26
+ end
27
+
28
+ end
29
+
30
+ describe "#uri" do
31
+
32
+ it "is the rack request path information" do
33
+ expect(sinatra_request.uri).to eql(rack_path_info)
34
+ end
35
+
36
+ end
37
+
38
+ describe "#method" do
39
+
40
+ subject { sinatra_request.method }
41
+
42
+ it "is the rack request method" do
43
+ expect(subject).to eql(rack_request_method)
44
+ end
45
+
46
+ end
47
+
48
+ describe "#headers" do
49
+
50
+ subject { sinatra_request.headers }
51
+
52
+ it "creates http stub request headers from the rack request" do
53
+ expect(HttpStub::Server::Request::Headers).to receive(:create).with(rack_request)
54
+
55
+ subject
56
+ end
57
+
58
+ it "returns the created http stub request headers" do
59
+ http_stub_request_headers = instance_double(HttpStub::Server::Request::Headers)
60
+ allow(HttpStub::Server::Request::Headers).to receive(:create).and_return(http_stub_request_headers)
61
+
62
+ expect(subject).to eql(http_stub_request_headers)
63
+ end
64
+
65
+ end
66
+
67
+ describe "#parameters" do
68
+
69
+ subject { sinatra_request.parameters }
70
+
71
+ it "creates http stub request parameters from the sinatra parameters" do
72
+ expect(HttpStub::Server::Request::Parameters).to receive(:create).with(sinatra_parameters)
73
+
74
+ subject
75
+ end
76
+
77
+ it "returns the created http stub request parameters" do
78
+ http_stub_request_parameters = instance_double(HttpStub::Server::Request::Parameters)
79
+ allow(HttpStub::Server::Request::Parameters).to receive(:create).and_return(http_stub_request_parameters)
80
+
81
+ expect(subject).to eql(http_stub_request_parameters)
82
+ end
83
+
84
+ end
85
+
86
+ describe "#body" do
87
+
88
+ subject { sinatra_request.body }
89
+
90
+ it "is the read rack request body" do
91
+ expect(subject).to eql(rack_body_content)
92
+ end
93
+
94
+ it "rewinds the Rack body to allow the body to be accessed in future" do
95
+ expect(rack_body).to receive(:rewind)
96
+
97
+ subject
98
+ end
99
+
100
+ end
101
+
102
+ describe "#to_json" do
103
+
104
+ subject { sinatra_request.to_json }
105
+
106
+ it "contains the requests uri" do
107
+ expect(subject).to include_in_json(uri: sinatra_request.uri)
108
+ end
109
+
110
+ it "contains the requests method" do
111
+ expect(subject).to include_in_json(method: sinatra_request.method)
112
+ end
113
+
114
+ it "contains the requests headers" do
115
+ expect(subject).to include_in_json(headers: sinatra_request.headers)
116
+ end
117
+
118
+ it "contains the requests parameters" do
119
+ expect(subject).to include_in_json(parameters: sinatra_request.parameters)
120
+ end
121
+
122
+ it "contains the requests body" do
123
+ expect(subject).to include_in_json(body: sinatra_request.body)
124
+ end
125
+
126
+ it "does not contains the session" do
127
+ expect(subject).to_not include("session")
128
+ end
129
+
130
+ end
131
+
132
+ end
@@ -1,27 +1,34 @@
1
1
  describe HttpStub::Server::Scenario::Controller do
2
2
 
3
- let(:request_uri) { "/some/request/path" }
4
- let(:request) { instance_double(HttpStub::Server::Request::Request, uri: request_uri) }
5
- let(:logger) { instance_double(Logger) }
6
- let(:payload) { HttpStub::ScenarioFixture.new.server_payload }
7
- let(:stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
8
- let(:scenario) { instance_double(HttpStub::Server::Scenario::Scenario, stubs: stubs) }
9
- let(:scenario_registry) { instance_double(HttpStub::Server::Registry).as_null_object }
10
- let(:stub_registry) { instance_double(HttpStub::Server::Stub::Registry).as_null_object }
11
- let(:activator) { instance_double(HttpStub::Server::Scenario::Activator).as_null_object }
12
-
13
- let(:controller) { HttpStub::Server::Scenario::Controller.new(scenario_registry, stub_registry) }
14
-
15
- before(:example) do
16
- allow(HttpStub::Server::Scenario::Activator).to receive(:new).and_return(activator)
17
- allow(HttpStub::Server::Scenario::Parser).to receive(:parse).and_return(payload)
18
- allow(HttpStub::Server::Scenario).to receive(:create).and_return(scenario)
3
+ let(:scenario_registry) { instance_double(HttpStub::Server::Registry) }
4
+ let(:server_memory) { instance_double(HttpStub::Server::Memory::Memory, scenarios: scenario_registry) }
5
+
6
+ let(:request_uri) { "/some/request/path" }
7
+ let(:request_parameters) { {} }
8
+ let(:session) { instance_double(HttpStub::Server::Session::Session) }
9
+ let(:request) do
10
+ instance_double(HttpStub::Server::Request::Request, uri: request_uri,
11
+ parameters: request_parameters,
12
+ session: session)
19
13
  end
14
+ let(:logger) { instance_double(Logger) }
15
+ let(:payload) { HttpStub::ScenarioFixture.new.server_payload }
16
+ let(:stubs) { (1..3).map { instance_double(HttpStub::Server::Stub::Stub) } }
17
+ let(:scenario) { instance_double(HttpStub::Server::Scenario::Scenario, stubs: stubs) }
18
+ let(:activator) { instance_double(HttpStub::Server::Scenario::Activator).as_null_object }
19
+
20
+ let(:controller) { described_class.new(server_memory) }
20
21
 
21
22
  describe "#register" do
22
23
 
23
24
  subject { controller.register(request, logger) }
24
25
 
26
+ before(:example) do
27
+ allow(HttpStub::Server::Scenario::Parser).to receive(:parse).and_return(payload)
28
+ allow(HttpStub::Server::Scenario).to receive(:create).and_return(scenario)
29
+ allow(scenario_registry).to receive(:add)
30
+ end
31
+
25
32
  it "parses the payload from the request" do
26
33
  expect(HttpStub::Server::Scenario::Parser).to receive(:parse).with(request).and_return(payload)
27
34
 
@@ -34,7 +41,7 @@ describe HttpStub::Server::Scenario::Controller do
34
41
  subject
35
42
  end
36
43
 
37
- it "adds the created scenario to the scenario registry with the provided logger" do
44
+ it "adds the created scenario to the servers scenario registry with the provided logger" do
38
45
  expect(scenario_registry).to receive(:add).with(scenario, logger)
39
46
 
40
47
  subject
@@ -46,46 +53,125 @@ describe HttpStub::Server::Scenario::Controller do
46
53
 
47
54
  end
48
55
 
49
- describe "#activate" do
56
+ describe "#find" do
57
+
58
+ let(:name) { URI.encode_www_form_component("Some scenario name") }
59
+ let(:request_parameters) { { name: name } }
60
+
61
+ subject { controller.find(request, logger) }
50
62
 
51
- let(:scenario_name) { "Some Scenario Name" }
63
+ before(:example) { allow(scenario_registry).to receive(:find).and_return(scenario) }
52
64
 
53
- subject { controller.activate(scenario_name, logger) }
65
+ it "finds a scenario matching the parameterized name via the registry" do
66
+ expect(scenario_registry).to receive(:find).with(URI.decode_www_form_component("Some scenario name"), anything)
54
67
 
55
- it "finds a scenario whose name matches the provided name" do
56
- expect(scenario_registry).to receive(:find).with(scenario_name, logger)
68
+ subject
69
+ end
70
+
71
+ it "finds the scenario using the provided logger" do
72
+ expect(scenario_registry).to receive(:find).with(anything, logger)
57
73
 
58
74
  subject
59
75
  end
60
76
 
61
- describe "when a scenario is found" do
77
+ it "returns the found scenario" do
78
+ expect(subject).to eql(scenario)
79
+ end
80
+
81
+ end
82
+
83
+ describe "#find_all" do
84
+
85
+ let(:scenarios) { (1..3).map { |i| HttpStub::Server::ScenarioFixture.create("#{4 - i}") } }
86
+
87
+ subject { controller.find_all }
88
+
89
+ before(:example) { allow(scenario_registry).to receive(:all).and_return(scenarios) }
90
+
91
+ it "retrieves all scenarios from the servers scenario registry" do
92
+ expect(scenario_registry).to receive(:all)
93
+
94
+ subject
95
+ end
96
+
97
+ it "returns the scenarios sorted by name" do
98
+ expect(subject).to eql(scenarios.reverse)
99
+ end
100
+
101
+ end
102
+
103
+ describe "#activate" do
62
104
 
63
- before(:example) { allow(scenario_registry).to receive(:find).and_return(scenario) }
105
+ subject { controller.activate(request, logger) }
64
106
 
65
- it "activates the scenario via the activator" do
66
- expect(activator).to receive(:activate).with(scenario, logger)
107
+ context "when a scenario name is provided" do
108
+
109
+ let(:scenario_name) { "some scenario name" }
110
+ let(:request_parameters) { { name: scenario_name } }
111
+
112
+ it "delegates to the users session to activate the scenario with the parameterized name" do
113
+ expect(session).to receive(:activate_scenario!).with(scenario_name, logger)
67
114
 
68
115
  subject
69
116
  end
70
117
 
71
- it "returns an ok response" do
72
- expect(subject).to eql(HttpStub::Server::Response::OK)
118
+ describe "when the scenario is not found" do
119
+
120
+ before(:example) do
121
+ allow(session).to(
122
+ receive(:activate_scenario!).and_raise(HttpStub::Server::Scenario::NotFoundError, scenario_name)
123
+ )
124
+ end
125
+
126
+ it "returns a not found response" do
127
+ expect(subject).to eql(HttpStub::Server::Response::NOT_FOUND)
128
+ end
129
+
73
130
  end
74
131
 
75
132
  end
76
133
 
77
- describe "when no scenario is found" do
134
+ context "when scenario names are provided" do
78
135
 
79
- before(:example) { allow(scenario_registry).to receive(:find).and_return(nil) }
136
+ let(:scenario_names) { (1..3).map { |i| "scenario name #{i}" } }
137
+ let(:request_parameters) { { names: scenario_names } }
80
138
 
81
- it "does not add a stub to the registry" do
82
- expect(stub_registry).not_to receive(:concat)
139
+ it "delegates to the users session to activate the scenarios with the parameterized names" do
140
+ scenario_names.each do |scenario_name|
141
+ expect(session).to receive(:activate_scenario!).with(scenario_name, logger)
142
+ end
83
143
 
84
144
  subject
85
145
  end
86
146
 
87
- it "returns a not found response" do
88
- expect(subject).to eql(HttpStub::Server::Response::NOT_FOUND)
147
+ describe "when a scenario is not found" do
148
+
149
+ let(:scenario_name_not_found) { scenario_names[1] }
150
+
151
+ before(:example) do
152
+ allow(session).to receive(:activate_scenario!)
153
+ allow(session).to(
154
+ receive(:activate_scenario!).with(scenario_name_not_found, anything)
155
+ .and_raise(HttpStub::Server::Scenario::NotFoundError, scenario_name_not_found)
156
+ )
157
+ end
158
+
159
+ it "returns a not found response" do
160
+ expect(subject).to eql(HttpStub::Server::Response::NOT_FOUND)
161
+ end
162
+
163
+ end
164
+
165
+ end
166
+
167
+ describe "when all scenarios are successfully activated" do
168
+
169
+ let(:request_parameters) { { name: "some scenario name" } }
170
+
171
+ before(:example) { allow(session).to receive(:activate_scenario!) }
172
+
173
+ it "returns an ok response" do
174
+ expect(subject).to eql(HttpStub::Server::Response::OK)
89
175
  end
90
176
 
91
177
  end
@@ -96,7 +182,7 @@ describe HttpStub::Server::Scenario::Controller do
96
182
 
97
183
  subject { controller.clear(logger) }
98
184
 
99
- it "clears the scenario registry" do
185
+ it "clears the servers scenario registry" do
100
186
  expect(scenario_registry).to receive(:clear).with(logger)
101
187
 
102
188
  subject